Halaman ini menjelaskan cara menggunakan load balancing berbasis container di Google Kubernetes Engine (GKE). Load balancing berbasis container memungkinkan load balancer langsung menarget Pod Kubernetes dan mendistribusikan traffic ke Pod secara merata.
Untuk mengetahui informasi selengkapnya tentang manfaat, persyaratan, dan batasan load balancing berbasis container, lihat Load balancing berbasis container.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah
gcloud components update. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
- Pastikan Anda memiliki cluster VPC native yang sudah ada. Jika Anda memerlukannya, buat cluster. Cluster GKE bersifat VPC native secara default.
Menggunakan load balancing berbasis container
Bagian berikut akan memandu Anda melakukan konfigurasi load balancing berbasis container di GKE.
Membuat Deployment
Contoh
Deployment berikut, neg-demo-app, menjalankan satu instance server HTTP dalam container. Sebaiknya gunakan workload yang menggunakan masukan kesiapan Pod.
Menggunakan masukan kesiapan Pod
apiVersion: apps/v1 kind: Deployment metadata: labels: run: neg-demo-app # Label for the Deployment name: neg-demo-app # Name of Deployment spec: selector: matchLabels: run: neg-demo-app template: # Pod template metadata: labels: run: neg-demo-app # Labels Pods from this Deployment spec: # Pod specification; each Pod created by this Deployment has this specification containers: - image: registry.k8s.io/serve_hostname:v1.4 # Application to run in Deployment's Pods name: hostname # Container name ports: - containerPort: 9376 protocol: TCP
Menggunakan penundaan yang di-harcode
apiVersion: apps/v1 kind: Deployment metadata: labels: run: neg-demo-app # Label for the Deployment name: neg-demo-app # Name of Deployment spec: minReadySeconds: 60 # Number of seconds to wait after a Pod is created and its status is Ready selector: matchLabels: run: neg-demo-app template: # Pod template metadata: labels: run: neg-demo-app # Labels Pods from this Deployment spec: # Pod specification; each Pod created by this Deployment has this specification containers: - image: registry.k8s.io/serve_hostname:v1.4 # Application to run in Deployment's Pods name: hostname # Container name # Note: The following line is necessary only on clusters running GKE v1.11 and lower. # For details, see https://cloud.google.com/kubernetes-engine/docs/how-to/container-native-load-balancing#align_rollouts ports: - containerPort: 9376 protocol: TCP terminationGracePeriodSeconds: 60 # Number of seconds to wait for connections to terminate before shutting down Pods
Dalam Deployment ini, setiap container menjalankan server HTTP. Server HTTP menampilkan nama host server aplikasi (nama Pod tempat server berjalan) sebagai respons.
Simpan manifes ini sebagai neg-demo-app.yaml, lalu buat Deployment:
kubectl apply -f neg-demo-app.yaml
Membuat Layanan untuk load balancer berbasis container
Setelah membuat Deployment, Anda perlu mengelompokkan Pod-nya ke dalam Layanan.
Contoh Layanan berikut, neg-demo-svc, menargetkan contoh Deployment yang Anda buat di bagian sebelumnya:
apiVersion: v1
kind: Service
metadata:
name: neg-demo-svc # Name of Service
spec: # Service's specification
type: ClusterIP
selector:
run: neg-demo-app # Selects Pods labelled run: neg-demo-app
ports:
- name: http
port: 80 # Service's port
protocol: TCP
targetPort: 9376
Load balancer tidak dibuat sebelum Anda membuat Ingress untuk Layanan.
Simpan manifes ini sebagai neg-demo-svc.yaml, lalu buat Service:
kubectl apply -f neg-demo-svc.yaml
Membuat Ingress untuk Layanan
Contoh
Ingress berikut,
neg-demo-ing, menargetkan Layanan yang Anda buat:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: neg-demo-ing
spec:
defaultBackend:
service:
name: neg-demo-svc # Name of the Service targeted by the Ingress
port:
number: 80 # Should match the port used by the Service
Simpan manifes ini sebagai neg-demo-ing.yaml, lalu buat Ingress:
kubectl apply -f neg-demo-ing.yaml
Setelah membuat Ingress, Load Balancer Aplikasi akan dibuat di project, dan Grup Endpoint Jaringan(NEG) akan dibuat di setiap zona tempat cluster berjalan. Endpoint di NEG dan endpoint Layanan terus disinkronkan.
Verifikasi Ingress
Setelah men-deploy workload, mengelompokkan Pod-nya ke dalam Layanan, dan membuat Ingress untuk Layanan, Anda harus memverifikasi bahwa Ingress telah berhasil menyediakan load balancer berbasis container.
Ambil status Ingress:
kubectl describe ingress neg-demo-ing
Output mencakup peristiwa ADD dan CREATE:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ADD 16m loadbalancer-controller default/neg-demo-ing
Normal Service 4s loadbalancer-controller default backend set to neg-demo-svc:32524
Normal CREATE 2s loadbalancer-controller ip: 192.0.2.0
Menguji load balancer
Bagian berikut menjelaskan cara menguji fungsi load balancer berbasis container.
Membuka alamat IP Ingress
Tunggu beberapa menit hingga Load Balancer Aplikasi dikonfigurasi.
Anda dapat memverifikasi bahwa load balancer berbasis container berfungsi dengan membuka alamat IP Ingress.
Untuk mendapatkan alamat IP Ingress, jalankan perintah berikut:
kubectl get ingress neg-demo-ing
Dalam output perintah, alamat IP Ingress ditampilkan di kolom ADDRESS. Buka alamat IP di browser web.
Memeriksa status responsivitas layanan backend
Anda juga bisa mendapatkan status responsivitas layanan backend load balancer.
Dapatkan daftar layanan backend yang berjalan di project Anda:
gcloud compute backend-services listCatat nama layanan backend yang menyertakan nama Layanan, seperti
neg-demo-svc.Dapatkan status responsivitas layanan backend:
gcloud compute backend-services get-health BACKEND_SERVICE_NAME --globalGanti
BACKEND_SERVICE_NAMEdengan nama layanan backend.
Menguji Ingress
Cara lain untuk menguji apakah load balancer berfungsi sesuai ekspektasi adalah dengan menskalakan Deployment contoh, mengirimkan permintaan pengujian ke Ingress, dan memverifikasi bahwa jumlah replika yang merespons sudah benar.
Menskalakan Deployment
neg-demo-appdari satu instance menjadi dua instance:kubectl scale deployment neg-demo-app --replicas 2Pemrosesan perintah ini mungkin memerlukan waktu beberapa menit.
Pastikan peluncuran selesai:
kubectl get deployment neg-demo-appOutput harus menyertakan dua replika yang tersedia:
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE neg-demo-app 2 2 2 2 26mDapatkan alamat IP Ingress:
kubectl describe ingress neg-demo-ingJika perintah ini menampilkan error 404, tunggu beberapa menit hingga load balancer dimulai, lalu coba lagi.
Hitung jumlah respons yang berbeda dari load balancer:
for i in `seq 1 100`; do \ curl --connect-timeout 1 -s IP_ADDRESS && echo; \ done | sort | uniq -cGanti
IP_ADDRESSdengan alamat IP Ingress.Outputnya mirip dengan hal berikut ini:
44 neg-demo-app-7f7dfd7bc6-dcn95 56 neg-demo-app-7f7dfd7bc6-jrmzfDalam output ini, jumlah respons yang berbeda sama dengan jumlah replika, yang menunjukkan bahwa semua Pod backend melayani traffic.
Pembersihan
Setelah menyelesaikan tugas di halaman ini, ikuti langkah-langkah berikut untuk menghapus resource guna mencegah timbulnya biaya yang tidak diinginkan pada akun Anda:
Menghapus cluster
gcloud
gcloud container clusters delete neg-demo-cluster
Konsol
Buka halaman Google Kubernetes Engine di konsol Google Cloud .
Pilih neg-demo-cluster lalu klik delete Delete.
Saat diminta untuk mengonfirmasi, klik Delete.
Langkah berikutnya
- Pelajari cara menggunakan load balancing berbasis container melalui NEG zona mandiri.
- Pelajari lebih lanjut cluster VPC native.
- Pelajari lebih lanjut konfigurasi Ingress.
- Pelajari cara menggunakan sertifikat SSL yang dikelola Google.