Halaman ini menunjukkan cara men-deploy Layanan LoadBalancer eksternal yang membangun Load Balancer Jaringan passthrough eksternal berbasis layanan backend. Sebelum membaca halaman ini, Anda harus memahami konsep berikut:
Load Balancer Jaringan passthrough eksternal berbasis layanan backend
Sebagai administrator cluster, Anda dapat membuat Layanan LoadBalancer eksternal sehingga
klien di luar cluster dapat mengirim paket ke Pod Service. Diagram
berikut mengilustrasikan dua Load Balancer Jaringan passthrough eksternal berbasis layanan backend yang dibuat untuk dua Layanan LoadBalancer eksternal (store-v1-lb-svc
dan
store-v2-lb-svc
). Kedua load balancer mendistribusikan paket ke node dalam
cluster, dan node merutekan paket ke Pod aktif.
Panduan ini menunjukkan cara menyiapkan Layanan LoadBalancer eksternal bernama store-v1-lb-svc
dengan langkah-langkah berikut:
- Buat cluster dengan add-on
HttpLoadBalancing
aktif. - Buat Service yang menyertakan anotasi
cloud.google.com/l4-rbs
. Anotasi ini menginstruksikan GKE untuk membuat Network Load Balancer passthrough eksternal berbasis layanan backend yang menggunakan layanan backend regional. Verifikasi bahwa load balancer berhasil mengirimkan paket ke Pod Service
store-v1-lb-svc
. Pastikan juga bahwa GKE membuat komponen Load Balancer Jaringan passthrough eksternal berbasis layanan backend:- Aturan penerusan
- Layanan backend regional
- Instance group
- Health check
- Aturan firewall VPC
Hapus Layanan LoadBalancer eksternal
store-v1-lb-svc
.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
initialize
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
Menyiapkan cluster
Membuat cluster
Gunakan gcloud CLI untuk membuat cluster baru yang mendukung pembuatan Load Balancer Jaringan passthrough eksternal berbasis layanan backend:
gcloud container clusters create-auto CLUSTER_NAME \
--release-channel=RELEASE_CHANNEL \
--cluster-version=VERSION \
--location=COMPUTE_LOCATION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster baru.RELEASE_CHANNEL
: nama saluran rilis GKE untuk cluster.VERSION
: versi GKE untuk cluster, yang harus 1.24.9 atau yang lebih baru.COMPUTE_LOCATION
: region Compute Engine cluster.
Cluster baru Anda telah mengaktifkan add-on HttpLoadBalancing
secara default. Add-on
ini diperlukan agar bidang kontrol dapat membuat dan mengelola Load Balancer Jaringan passthrough eksternal berbasis layanan backend.
Mengupgrade cluster yang ada
Gunakan gcloud CLI untuk mengupdate cluster yang ada sehingga dapat mendukung pembuatan Load Balancer Jaringan passthrough eksternal berbasis layanan backend.
Upgrade bidang kontrol Anda ke GKE versi 1.24.9 atau yang lebih baru:
gcloud container clusters upgrade CLUSTER_NAME \ --cluster-version=VERSION \ --master \ --location=COMPUTE_LOCATION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster Anda.VERSION
: versi GKE, yang harus merupakan versi 1.24.9 atau yang lebih baru. Versi harus berupa versi minor yang valid di saluran rilis cluster Anda. Untuk informasi selengkapnya, lihat Mengupgrade bidang kontrol secara manual.COMPUTE_LOCATION
: lokasi Compute Engine untuk cluster baru.
Membuat Layanan LoadBalancer eksternal
Simpan contoh Deployment berikut sebagai
store-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: store spec: replicas: 2 selector: matchLabels: app: store template: metadata: labels: app: store spec: containers: - image: gcr.io/google_containers/echoserver:1.10 imagePullPolicy: Always name: echoserver ports: - name: http containerPort: 8080 readinessProbe: httpGet: path: /healthz port: 8080 scheme: HTTP
Terapkan manifes ke cluster:
kubectl apply -f store-deployment.yaml
Pastikan ada dua Pod aktif untuk Deployment:
kubectl get pods
Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE store-cdb9bb4d6-s25vw 1/1 Running 0 10s store-cdb9bb4d6-vck6s 1/1 Running 0 10s
Simpan manifes Service berikut sebagai
store-v1-lb-svc.yaml
:apiVersion: v1 kind: Service metadata: name: store-v1-lb-svc annotations: cloud.google.com/l4-rbs: "enabled" spec: type: LoadBalancer externalTrafficPolicy: Cluster selector: app: store ports: - name: tcp-port protocol: TCP port: 8080 targetPort: 8080
Layanan LoadBalancer eksternal ini menggunakan
externalTrafficPolicy
defaultCluster
. Untuk detail caraexternalTrafficPolicy
menentukan pengelompokan node, node mana yang lulus health check load balancer, dan pemrosesan paket, lihat Konsep Layanan LoadBalancer.Jika Anda menggunakan cluster dual-stack IPv4/IPv6, tambahkan
spec.ipFamilyPolicy
danipFamilies
untuk menentukan cara GKE mengalokasikan alamat IP ke Service. Pertimbangkan kondisi berikut saat menggunakan spesifikasiipFamilyPolicy
danipFamilies
:- Saat Anda membuat Load Balancer Jaringan passthrough eksternal berbasis layanan backend,
GKE otomatis menambahkan anotasi
cloud.google.com/l4-rbs
ke Service baru yang dibuat di cluster dual stack IPv4/IPv6. Namun, jika Anda menambahkan anotasicloud.google.com/l4-rbs: "enabled"
ke manifes Service yang sudah ada, Layanan LoadBalancer yang sudah ada di cluster akan tetap menggunakan Load Balancer Jaringan passthrough eksternal berbasis kumpulan target, yang khusus IPv4. Untuk informasi tambahan, lihat Pengelompokan node. - GKE dapat mengalokasikan Layanan LoadBalancer satu stack (khusus IPv4 atau IPv6) atau dual-stack. Layanan LoadBalancer dual-stack diimplementasikan dengan dua aturan penerusan Network Load Balancer passthrough eksternal yang terpisah: satu untuk menangani traffic TCP melalui IPv4 dan satu lagi untuk menangani traffic TCP melalui IPv6. Untuk informasi selengkapnya, lihat Service.
- Saat Anda membuat Load Balancer Jaringan passthrough eksternal berbasis layanan backend,
GKE otomatis menambahkan anotasi
Terapkan manifes ke cluster:
kubectl apply -f store-v1-lb-svc.yaml
Pastikan Service Anda berjalan:
kubectl get svc store-v1-lb-svc
Outputnya mirip dengan hal berikut ini:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-v1-lb-svc LoadBalancer 10.44.196.160 35.193.28.231 8080:32466/TCP 11m
GKE menetapkan
EXTERNAL_IP
untuk Load Balancer Jaringan passthrough eksternal.Uji koneksi ke load balancer:
curl EXTERNAL_IP:PORT
Ganti kode berikut:
EXTERNAL_IP
: alamat IP yang dialokasikan untuk Load Balancer Jaringan passthrough eksternal.PORT
: nomor port yang dialokasikan untuk Load Balancer Jaringan passthrough eksternal.
Outputnya mirip dengan hal berikut ini:
Hostname: store-v1-lb-svc-cdb9bb4d6-hflxd Pod Information: -no pod information available- Server values: server_version=nginx: 1.13.3 - lua: 10008 Request Information: client_address=10.128.0.50 method=GET real path=/ query= request_version=1.1 request_scheme=http request_uri=EXTERNAL_IP Request Headers: accept=*/* host=EXTERNAL_IP user-agent=curl/7.81.0 Request Body: -no body in request-
Memverifikasi Layanan LoadBalancer eksternal dan komponennya
Periksa Layanan LoadBalancer dan kumpulan anotasinya yang menjelaskan resource Google Cloud-nya:
kubectl describe svc store-v1-lb-svc
Outputnya mirip dengan hal berikut ini:
Name: store-v1-lb-svc Namespace: default Labels: <none> Annotations: cloud.google.com/l4-rbs: enabled service.kubernetes.io/backend-service: k8s2-c086604n-default-store-v1-lb-svc-aip4ty1x service.kubernetes.io/firewall-rule: k8s2-c086604n-default-store-v1-lb-svc-aip4ty1x service.kubernetes.io/firewall-rule-for-hc: k8s2-c086604n-l4-shared-hc-fw service.kubernetes.io/healthcheck: k8s2-c086604n-l4-shared-hc service.kubernetes.io/tcp-forwarding-rule: a683373f85bfe433ba929a50ca8d72e2 Selector: app=store Type: LoadBalancer IP Family Policy: SingleStack IP Families: IPv4 IP: 10.44.196.160 IPs: 10.44.196.160 LoadBalancer Ingress: 35.193.28.231 Port: tcp-port 8080/TCP TargetPort: 8080/TCP NodePort: tcp-port 32466/TCP Endpoints: 10.48.0.5:8080,10.48.2.8:8080 Session Affinity: None External Traffic Policy: Cluster Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 2m42s loadbalancer-controller default/store-v1-lb-svc Normal EnsuringLoadBalancer 102s (x2 over 2m42s) service-controller Ensuring load balancer Normal Annotations 102s loadbalancer-controller map[cloud.google.com/l4-rbs:enabled kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"v1","kind":"Service","metadata":{"annotations": {"cloud.google.com/l4-rbs":"enabled"},"name":"store-v1-lb-svc","namespace":"default"} ,"spec":{"externalTrafficPolicy":"Cluster","ports": [{"name":"tcp-port","port":8080,"protocol":"TCP","targetPort":8080}], "selector":{"app":"store"},"type":"LoadBalancer"}} ] -> map[cloud.google.com/l4-rbs:enabled kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"v1","kind": "Service","metadata":{"annotations":{"cloud.google.com/l4-rbs":"enabled"}, "name":"store-v1-lb-svc","namespace":"default"},"spec":{"externalTrafficPolicy" :"Cluster","ports":[{"name":"tcp-port","port":8080,"protocol":"TCP","targetPort" :8080}],"selector":{"app":"store"},"type":"LoadBalancer"}} service.kubernetes.io/backend-service:k8s2-c086604n-default-store-v1-lb-svc-aip4ty1x service.kubernetes.io/firewall-rule:k8s2-c086604n-default-store-v1-lb-svc-aip4ty1x service.kubernetes.io/firewall-rule-for-hc:k8s2-c086604n-l4-shared-hc-fw service.kubernetes.io/healthcheck:k8s2-c086604n-l4-shared-hc service.kubernetes.io/tcp-forwarding-rule:a683373f85bfe433ba929a50ca8d72e2] Normal SyncLoadBalancerSuccessful 16s (x3 over 102s) loadbalancer-controller Successfully ensured L4 External LoadBalancer resources
Ada beberapa kolom yang menunjukkan bahwa Load Balancer Jaringan passthrough eksternal berbasis layanan backend dan resource Google Cloud-nya berhasil dibuat:
- Kolom
Events
. Kolom ini kosong saat LoadBalancer Service dan resource-nya berhasil dibuat. Jika terjadi, error akan dicantumkan di sini. Daftar
Annotations
yang diaktifkan: GKE menambahkan daftar anotasi hanya baca berikut ke manifes Service. Setiap anotasi yang namanya diawali denganservice.kubernetes.io/
digunakan untuk menunjukkan nama resource Google Cloud yang dibuat sebagai bagian dari atau untuk mendukung load balancer.Anotasi
service.kubernetes.io/backend-service
menunjukkan nama layanan backend load balancer.Anotasi
service.kubernetes.io/healthcheck
menunjukkan nama health check load balancer yang digunakan oleh layanan backend.Anotasi
service.kubernetes.io/tcp-forwarding-rule
atauservice.kubernetes.io/udp-forwarding-rule
menunjukkan nama aturan penerusan load balancer.Anotasi
service.kubernetes.io/firewall-rule
menunjukkan nama aturan firewall yang dibuat untuk mengizinkan traffic ke node cluster. Rentang sumber untuk aturan firewall ini dapat disesuaikan menggunakanspec.loadBalancerSourceRanges[]
. Guna mengetahui detail tambahan tentang aturan firewall untuk Layanan LoadBalancer, lihat Aturan firewall dan daftar alamat IP sumber yang diizinkan.Anotasi
service.kubernetes.io/firewall-rule-for-hc
menunjukkan nama aturan firewall yang diperlukan untuk health check load balancer.
- Kolom
Verifikasi bahwa resource load balancer dan aturan firewall telah dibuat untuk Layanan LoadBalancer eksternal:
Untuk melihat aturan penerusan, jalankan perintah berikut:
gcloud compute forwarding-rules describe FWD_RULE_NAME \ --region=REGION_NAME
Ganti kode berikut:
FWD_RULE_NAME
: nama aturan penerusan yang diberikan oleh anotasi hanya bacaservice.kubernetes.io/tcp-forwarding-rule
atauservice.kubernetes.io/udp-forwarding-rule
. Untuk memeriksa anotasi ini, jalankankubectl describe svc SERVICE_NAME
.REGION_NAME
: region Google Cloud yang berisi cluster. Untuk cluster zona, region berisi zona yang digunakan oleh cluster.
Untuk melihat layanan backend, jalankan perintah berikut:
gcloud compute backend-services describe BACKEND_SERVICE_NAME \ --region=REGION_NAME
Ganti kode berikut:
BACKEND_SERVICE_NAME
: nama layanan backend yang disediakan oleh anotasi hanya bacaservice.kubernetes.io/backend-service
. Untuk memeriksa anotasi hanya baca ini, jalankankubectl describe svc SERVICE_NAME
.REGION_NAME
: region Google Cloud yang berisi cluster. Untuk cluster zona, region berisi zona yang digunakan oleh cluster.
Untuk melihat health check load balancer, jalankan perintah berikut:
gcloud compute health-checks describe HEALTH_CHECK_NAME \ --region=REGION_NAME
Ganti kode berikut:
HEALTH_CHECK_NAME
: nama health check load balancer. Nama health check diberikan oleh anotasi hanya bacaservice.kubernetes.io/healthcheck
. Untuk memeriksa anotasi hanya baca ini, jalankankubectl describe svc SERVICE_NAME
.REGION_NAME
: region Google Cloud yang berisi cluster. Untuk cluster zona, region berisi zona yang digunakan oleh cluster.
Untuk melihat aturan firewall, jalankan perintah berikut:
gcloud compute firewall-rules describe FIREWALL_RULE_NAME \ gcloud compute firewall-rules describe HEALTH_CHECK_FIREWALL_RULE_NAME
Ganti kode berikut:
FIREWALL_RULE_NAME
: nama aturan firewall yang mengizinkan traffic ke load balancer. Nama aturan firewall ini disediakan oleh anotasi hanya bacaservice.kubernetes.io/firewall-rule
. Untuk memeriksa anotasi hanya baca ini, jalankankubectl describe svc SERVICE_NAME
.HEALTH_CHECK_FIREWALL_RULE_NAME
: nama aturan firewall yang mengizinkan health check backend load balancer (node cluster). Nama aturan firewall ini disediakan oleh anotasi hanya bacaservice.kubernetes.io/firewall-rule-for-hc
. Untuk memeriksa anotasi hanya baca ini, jalankankubectl describe svc SERVICE_NAME
.
Menghapus Layanan LoadBalancer eksternal dan komponennya
Hapus Layanan LoadBalancer eksternal store-v1-lb-svc
.
kubectl delete service store-v1-lb-svc
GKE menghapus resource berikut:
- Aturan penerusan load balancer.
- Layanan backend load balancer.
- Health check load balancer.
- Aturan firewall VPC yang diperlukan untuk load balancer dan traffic health check-nya.
- Backend grup instance yang tidak dikelola menurut zona, hanya jika GKE tidak perlu menggunakannya sebagai backend untuk load balancer lain yang dibuat oleh cluster.
Langkah selanjutnya
- Untuk mengetahui ringkasan tentang Layanan Load Balancer, lihat Layanan LoadBalancer.
- Untuk deskripsi parameter Layanan Load Balancer, lihat Parameter Layanan LoadBalancer.