Halaman ini menjelaskan cara membuat Load Balancer Jaringan passthrough internal atau load balancer internal di Google Kubernetes Engine (GKE). Untuk membuat Load Balancer Jaringan passthrough eksternal, lihat Membuat Service jenis LoadBalancer.
Sebelum membaca halaman ini, pastikan Anda memahami konsep berikut:
- Service LoadBalancer.
- Parameter Service LoadBalancer.
- Load Balancer Jaringan passthrough eksternal berbasis layanan backend.
Menggunakan Load Balancer Jaringan passthrough internal
Load Balancer Jaringan passthrough internal membuat Service cluster Anda dapat diakses oleh klien yang berada di jaringan VPC cluster Anda dan oleh klien di jaringan yang terhubung ke jaringan VPC cluster Anda. Klien di jaringan VPC cluster Anda dapat berupa node atau Pod cluster Anda, atau dapat berupa VM di luar cluster Anda. Untuk mengetahui informasi selengkapnya tentang konektivitas dari klien di jaringan yang terhubung, lihat Load Balancer Jaringan passthrough internal dan jaringan yang terhubung.
Menggunakan subsetelan GKE
Subsetelan GKE meningkatkan skalabilitas Service LoadBalancer
internal karena menggunakan grup endpoint jaringan (NEG) GCE_VM_IP
sebagai backend,
bukan grup instance. Jika subsetelan GKE diaktifkan, GKE akan membuat satu NEG per zona
komputasi per Service LoadBalancer internal.
externalTrafficPolicy
Service mengontrol keanggotaan node di backend NEG GCE_VM_IP
. Untuk mengetahui informasi selengkapnya, lihat Keanggotaan node di backend NEG GCE_VM_IP
.
Menggunakan afinitas zonal
Saat Anda mengaktifkan afinitas zonal di Load Balancer Jaringan passthrough Internal, GKE akan merutekan traffic yang berasal dari zona ke node dan Pod dalam zona yang sama. Jika tidak ada Pod yang responsif di zona tersebut, GKE akan merutekan traffic ke zona lain. Implementasi ini dioptimalkan untuk latensi dan biaya.
Untuk mengaktifkan afinitas zona di cluster GKE, Anda harus mengaktifkan subsetelan GKE.
Persyaratan dan batasan
Berikut adalah persyaratan dan batasan untuk load balancer internal.
Persyaratan
Subsetelan GKE memiliki persyaratan dan batasan berikut:
- Anda dapat mengaktifkan subsetelan GKE di cluster Standard baru dan cluster yang sudah ada di GKE versi 1.18.19-gke.1400 dan yang lebih baru. Setelah diaktifkan, subsetelan GKE tidak akan dapat dinonaktifkan.
- Subsetelan GKE dinonaktifkan secara default di cluster Autopilot. Namun, Anda dapat mengaktifkannya setelah membuat cluster.
- Subsetelan GKE mengharuskan add-on
HttpLoadBalancing
diaktifkan. Add-on ini diaktifkan secara default. Di cluster Autopilot, Anda tidak dapat menonaktifkan add-on yang diperlukan ini. - Kuota untuk Grup Endpoint Jaringan
berlaku. Google Cloud membuat satu NEG
GCE_VM_IP
per Service LoadBalancer internal per zona. - Berlaku kuota untuk aturan penerusan, layanan backend, dan health check. Untuk mengetahui informasi selengkapnya, lihat Kuota dan batas.
- Subsetelan GKE tidak dapat digunakan dengan anotasi untuk membagikan
layanan backend di antara beberapa load balancer,
alpha.cloud.google.com/load-balancer-backend-share
. - Anda harus memiliki Google Cloud CLI versi 345.0.0 atau yang lebih baru.
Afinitas zonal memiliki persyaratan berikut:
- Anda dapat mengaktifkan afinitas zonal di cluster baru dan yang sudah ada di GKE versi 1.33.3-gke.1392000 dan yang lebih baru.
- Anda harus mengaktifkan subsetelan GKE.
- Anda harus memastikan bahwa add-on
HttpLoadBalancing
diaktifkan untuk cluster Anda. Add-on ini diaktifkan secara default dan memungkinkan cluster mengelola load balancer yang menggunakan layanan backend. - Anda harus menyertakan
spec.trafficDistribution: PreferClose
dalam manifes Service LoadBalancer.
Manifes Layanan LoadBalancer dapat menggunakan externalTrafficPolicy: Local
atau externalTrafficPolicy: Cluster
.
Batasan
Load Balancer Jaringan passthrough internal
- Untuk cluster yang menjalankan Kubernetes versi 1.7.4 dan yang lebih baru, Anda dapat menggunakan load balancer internal dengan subnet mode kustom, selain subnet mode otomatis.
- Cluster yang menjalankan Kubernetes versi 1.7.X dan yang lebih baru mendukung penggunaan alamat IP yang dicadangkan
untuk Load Balancer Jaringan passthrough internal jika Anda membuat alamat IP
yang dicadangkan dengan
--purpose
flag disetel keSHARED_LOADBALANCER_VIP
. Lihat Mengaktifkan IP Bersama untuk mengetahui petunjuk langkah demi langkah. GKE hanya menyimpan alamat IP Load Balancer Jaringan passthrough internal jika Service merujuk ke alamat IP internal dengan tujuan tersebut. Jika tidak, GKE dapat mengubah alamat IP load balancer (spec.loadBalancerIP
) jika Service diperbarui (misalnya, jika port diubah). - Meskipun alamat IP load balancer berubah (lihat poin sebelumnya),
spec.clusterIP
akan tetap konstan. - Load balancer UDP internal tidak mendukung penggunaan
sessionAffinity: ClientIP
.
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
gcloud components update
.
- Pastikan Anda sudah memiliki cluster Autopilot atau Standard. Untuk membuat cluster baru, lihat Membuat cluster Autopilot.
Mengaktifkan subsetelan GKE di cluster
Anda dapat mengaktifkan subsetelan GKE untuk cluster yang ada menggunakan gcloud CLI atau Google Cloud konsol. Anda tidak dapat menonaktifkan subsetelan GKE setelah mengaktifkannya.
Konsol
Di konsol Google Cloud , buka halaman Google Kubernetes Engine.
Di daftar cluster, klik nama cluster yang ingin diubah.
Di bagian Networking, di samping kolom Subsetelan untuk Load Balancer Internal L4, klik edit Aktifkan subsetelan untuk load balancer internal L4.
Centang kotak Aktifkan subsetelan untuk load balancer internal L4.
Klik Simpan Perubahan.
gcloud
gcloud container clusters update CLUSTER_NAME \
--enable-l4-ilb-subsetting
Ganti kode berikut:
CLUSTER_NAME
: nama cluster.
Mengaktifkan subsetelan GKE tidak akan mengganggu
Service LoadBalancer internal yang sudah ada. Jika ingin memigrasikan Service LoadBalancer
internal yang sudah ada agar menggunakan layanan backend dengan NEG GCE_VM_IP
sebagai backend,
Anda harus men-deploy manifes Service pengganti. Untuk mengetahui detail selengkapnya, lihat
Pengelompokan node
dalam dokumentasi konsep Service LoadBalancer.
Men-deploy workload
Manifes berikut menjelaskan Deployment yang menjalankan image container aplikasi web contoh.
Simpan manifes sebagai
ilb-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: ilb-deployment spec: replicas: 3 selector: matchLabels: app: ilb-deployment template: metadata: labels: app: ilb-deployment spec: containers: - name: hello-app image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
Terapkan manifes ke cluster Anda:
kubectl apply -f ilb-deployment.yaml
Membuat Service LoadBalancer internal
(Opsional) Nonaktifkan pembuatan aturan firewall VPC otomatis:
Meskipun GKE otomatis membuat aturan firewall VPC untuk mengizinkan traffic ke load balancer internal Anda, Anda memiliki opsi untuk menonaktifkan pembuatan aturan firewall VPC otomatis dan mengelola aturan firewall sendiri. Anda dapat menonaktifkan aturan firewall VPC hanya jika Anda telah mengaktifkan subsetelan GKE untuk Layanan LoadBalancer internal. Namun, pengelolaan aturan firewall VPC bersifat opsional dan Anda dapat mengandalkan aturan otomatis.
Sebelum menonaktifkan pembuatan aturan firewall VPC otomatis, pastikan Anda menentukan aturan izinkan yang mengizinkan traffic menjangkau load balancer dan Pod aplikasi Anda.
Untuk mengetahui informasi selengkapnya tentang cara mengelola aturan firewall VPC, lihat Mengelola pembuatan aturan firewall otomatis dan cara menonaktifkan pembuatan aturan firewall otomatis, lihat Aturan firewall yang dikelola pengguna untuk Layanan LoadBalancer GKE.
Contoh berikut membuat Service LoadBalancer internal menggunakan
80
port TCP. GKE men-deploy Load Balancer Jaringan passthrough internal dengan aturan penerusan yang menggunakan port80
, tetapi kemudian meneruskan traffic ke Pod backend di port8080
:Simpan manifes sebagai
ilb-svc.yaml
:apiVersion: v1 kind: Service metadata: name: ilb-svc # Request an internal load balancer. annotations: networking.gke.io/load-balancer-type: "Internal" spec: type: LoadBalancer # Evenly route external traffic to all endpoints. externalTrafficPolicy: Cluster # Prioritize routing traffic to endpoints that are in the same zone. trafficDistribution: PreferClose selector: app: ilb-deployment # Forward traffic from TCP port 80 to port 8080 in backend Pods. ports: - name: tcp-port protocol: TCP port: 80 targetPort: 8080
Manifes Anda harus berisi elemen berikut:
name
untuk Service LoadBalancer internal, dalam hal iniilb-svc
.- Anotasi yang menentukan bahwa Anda memerlukan Service LoadBalancer internal.
Untuk GKE versi 1.17 dan yang lebih baru, gunakan anotasi
networking.gke.io/load-balancer-type: "Internal"
seperti yang ditunjukkan dalam contoh manifes. Untuk versi sebelumnya, gunakancloud.google.com/load-balancer-type: "Internal"
. type: LoadBalancer
.- Kolom
spec: selector
untuk menentukan Pod yang harus ditargetkan oleh Service, misalnya,app: hello
. - Informasi port:
port
menunjukkan port tujuan tempat aturan penerusan Load Balancer Jaringan passthrough internal menerima paket.targetPort
harus cocok dengancontainerPort
yang ditentukan di setiap Pod penayangan.- Nilai
port
dantargetPort
tidak harus sama. Node selalu menjalankan NAT tujuan, mengubah alamat IP aturan penerusan load balancer tujuan sertaport
menjadi alamat IP Pod tujuan dantargetPort
. Untuk detail selengkapnya, lihat Terjemahan Alamat Jaringan Tujuan pada node dalam dokumentasi konsep Service LoadBalancer.
Manifes Anda dapat berisi hal berikut:
spec.ipFamilyPolicy
danipFamilies
untuk menentukan cara GKE mengalokasikan alamat IP ke Service. GKE mendukung single stack (khusus IPv4 atau khusus IPv6), atau Service LoadBalancer IP dual-stack. Service LoadBalancer dual-stack diimplementasikan dengan dua aturan penerusan Load Balancer Jaringan internal yang terpisah, yaitu satu untuk traffic IPv4 dan satu untuk traffic IPv6. Layanan LoadBalancer dual-stack GKE tersedia di versi 1.29 atau yang lebih baru. Untuk mempelajari lebih lanjut, lihat Layanan stack ganda IPv4/IPv6.spec.trafficDistribution
untuk menentukan cara GKE merutekan traffic masuk (Pratinjau). Jika Anda menyetel kolom ini kePreferClose
, GKE akan merutekan traffic yang berasal dari zona ke node dan Pod dalam zona yang sama. Jika tidak ada Pod yang responsif di zona, GKE akan merutekan traffic ke zona lain. Jika Anda menyertakan kolom ini, Anda harus mengaktifkan subsetting GKE.
Untuk mengetahui informasi selengkapnya, lihat Parameter Service LoadBalancer
Terapkan manifes ke cluster Anda:
kubectl apply -f ilb-svc.yaml
Dapatkan informasi detail Service:
kubectl get service ilb-svc --output yaml
Output-nya mirip dengan yang berikut ini:
apiVersion: v1 kind: Service metadata: annotations: cloud.google.com/neg: '{"ingress":true}' cloud.google.com/neg-status: '{"network_endpoint_groups":{"0":"k8s2-pn2h9n5f-default-ilb-svc-3bei4n1r"},"zones":["ZONE_NAME","ZONE_NAME","ZONE_NAME"]}' kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{"networking.gke.io/load-balancer-type":"Internal"},"name":"ilb-svc","namespace":"default"},"spec":{"externalTrafficPolicy":"Cluster","ports":[{"name":"tcp-port","port":80,"protocol":"TCP","targetPort":8080}],"selector":{"app":"ilb-deployment"},"type":"LoadBalancer"}} networking.gke.io/load-balancer-type: Internal service.kubernetes.io/backend-service: k8s2-pn2h9n5f-default-ilb-svc-3bei4n1r service.kubernetes.io/firewall-rule: k8s2-pn2h9n5f-default-ilb-svc-3bei4n1r service.kubernetes.io/firewall-rule-for-hc: k8s2-pn2h9n5f-l4-shared-hc-fw service.kubernetes.io/healthcheck: k8s2-pn2h9n5f-l4-shared-hc service.kubernetes.io/tcp-forwarding-rule: k8s2-tcp-pn2h9n5f-default-ilb-svc-3bei4n1r creationTimestamp: "2022-07-22T17:26:04Z" finalizers: - gke.networking.io/l4-ilb-v2 - service.kubernetes.io/load-balancer-cleanup name: ilb-svc namespace: default resourceVersion: "51666" uid: d7a1a865-7972-44e1-aa9e-db5be23d6567 spec: allocateLoadBalancerNodePorts: true clusterIP: 10.88.2.141 clusterIPs: - 10.88.2.141 externalTrafficPolicy: Cluster internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - name: tcp-port # Kubernetes automatically allocates a port on the node during the # process of implementing a Service of type LoadBalancer. nodePort: 30521 port: 80 protocol: TCP targetPort: 8080 selector: app: ilb-deployment sessionAffinity: None trafficDistribution: PreferClose type: LoadBalancer status: # IP address of the load balancer forwarding rule. loadBalancer: ingress: - ip: 10.128.15.245
Output memiliki atribut berikut:
- Alamat IP dari aturan penerusan Load Balancer Jaringan passthrough internal disertakan dalam
status.loadBalancer.ingress
. Alamat IP ini berbeda dengan nilaiclusterIP
. Dalam contoh ini, alamat IP aturan penerusan load balancer adalah10.128.15.245
. - Setiap Pod yang memiliki label
app: ilb-deployment
merupakan Pod penayangan untuk Service ini. Pod tersebut adalah Pod yang menerima paket yang dirutekan oleh Load Balancer Jaringan passthrough internal. - Klien memanggil Service menggunakan alamat IP
loadBalancer
ini dan port tujuan TCP yang ditentukan di kolomport
manifes Service. Untuk mengetahui detail lengkap tentang cara paket diarahkan setelah diterima oleh node, lihat Pemrosesan paket. - GKE menetapkan
nodePort
ke Service; dalam contoh ini, port30521
ditetapkan.nodePort
tidak relevan dengan Load Balancer Jaringan passthrough internal.
- Alamat IP dari aturan penerusan Load Balancer Jaringan passthrough internal disertakan dalam
Periksa grup endpoint Jaringan Service:
kubectl get svc ilb-svc -o=jsonpath="{.metadata.annotations.cloud\.google\.com/neg-status}"
Output-nya mirip dengan yang berikut ini:
{"network_endpoint_groups":{"0":"k8s2-knlc4c77-default-ilb-svc-ua5ugas0"},"zones":["ZONE_NAME"]}
Respons tersebut menunjukkan bahwa GKE telah membuat grup endpoint jaringan bernama
k8s2-knlc4c77-default-ilb-svc-ua5ugas0
. Anotasi ini muncul di layanan jenisLoadBalancer
yang menggunakan subsetelan GKE dan tidak ada di Service yang tidak menggunakan subsetelan GKE.
Memverifikasi komponen Load Balancer Jaringan passthrough internal
Bagian ini menunjukkan cara memverifikasi komponen utama Load Balancer Jaringan passthrough internal Anda.
Pastikan Service Anda berjalan:
kubectl get service SERVICE_NAME --output yaml
Ganti
SERVICE_NAME
dengan nama manifes Layanan.Jika Anda mengaktifkan afinitas zonal, output akan menyertakan parameter
spec.trafficDistribution
dengan kolom yang ditetapkan kePreferClose
.Verifikasi alamat IP aturan penerusan Load Balancer Jaringan passthrough internal. Alamat IP aturan penerusan Load Balancer Jaringan passthrough internal adalah
10.128.15.245
dalam contoh yang disertakan di bagian Membuat Service LoadBalancer internal. Verifikasi bahwa aturan penerusan ini disertakan dalam daftar aturan penerusan di project cluster menggunakan Google Cloud CLI:gcloud compute forwarding-rules list --filter="loadBalancingScheme=INTERNAL"
Output-nya mencakup aturan penerusan Load Balancer Jaringan passthrough yang relevan, alamat IP-nya, dan layanan backend yang dirujuk oleh aturan penerusan (dalam contoh ini
k8s2-pn2h9n5f-default-ilb-svc-3bei4n1r
).NAME ... IP_ADDRESS ... TARGET ... k8s2-tcp-pn2h9n5f-default-ilb-svc-3bei4n1r 10.128.15.245 ZONE_NAME/backendServices/k8s2-pn2h9n5f-default-ilb-svc-3bei4n1r
Deskripsikan layanan backend load balancer menggunakan Google Cloud CLI:
gcloud compute backend-services describe k8s2-tcp-pn2h9n5f-default-ilb-svc-3bei4n1r --region=COMPUTE_REGION
Ganti
COMPUTE_REGION
dengan compute region layanan backend.Jika Anda mengaktifkan afinitas zonal:
- Kolom
networkPassThroughLbTrafficPolicy.zonalAffinity.spillover
harus ditetapkan keZONAL_AFFINITY_SPILL_CROSS_ZONE
. - Kolom
networkPassThroughLbTrafficPolicy.zonalAffinity.spilloverRatio
harus disetel ke0
atau tidak disertakan.
Output-nya mencakup NEG atau NEG
GCE_VM_IP
backend untuk Service (dalam contoh inik8s2-pn2h9n5f-default-ilb-svc-3bei4n1r
).backends: - balancingMode: CONNECTION group: .../ZONE_NAME/networkEndpointGroups/k8s2-pn2h9n5f-default-ilb-svc-3bei4n1r ... kind: compute#backendService loadBalancingScheme: INTERNAL name: aae3e263abe0911e9b32a42010a80008 networkPassThroughLbTrafficPolicy: zonalAffinity: spillover: ZONAL_AFFINITY_SPILL_CROSS_ZONE protocol: TCP ...
Jika Anda menonaktifkan afinitas zona, kolom
networkPassThroughLbTrafficPolicy.zonalAffinity.spillover
harus disetel keZONAL_AFFINITY_DISABLED
atau tidak disertakan. Perhatikan bahwa afinitas zonal dinonaktifkan secara otomatis jika cluster Anda menggunakan versi yang lebih lama dari 1.33.3-gke.1392000.- Kolom
Tentukan daftar node dalam subset untuk layanan:
gcloud compute network-endpoint-groups list-network-endpoints NEG_NAME \ --zone=COMPUTE_ZONE
Ganti kode berikut:
NEG_NAME
: nama grup endpoint jaringan yang dibuat oleh pengontrol GKE.COMPUTE_ZONE
: zona komputasi grup endpoint jaringan yang akan digunakan.
Tentukan daftar node responsif untuk Load Balancer Jaringan passthrough internal:
gcloud compute backend-services get-health SERVICE_NAME \ --region=COMPUTE_REGION
Ganti kode berikut:
SERVICE_NAME
: nama layanan backend. Nilai ini sama dengan nama grup endpoint jaringan yang dibuat oleh pengontrol GKE.COMPUTE_REGION
: region komputasi dari layanan backend yang akan digunakan.
Menguji konektivitas ke Load Balancer Jaringan passthrough internal
Jalankan perintah berikut di region yang sama dengan cluster:
curl LOAD_BALANCER_IP:80
Ganti LOAD_BALANCER_IP
dengan alamat IP aturan penerusan
load balancer.
Responsnya akan menunjukkan output ilb-deployment
:
Hello, world!
Version: 1.0.0
Hostname: ilb-deployment-77b45987f7-pw54n
Load Balancer Jaringan passthrough internal hanya dapat diakses dalam jaringan VPC yang sama (atau jaringan yang terhubung). Secara default, aturan penerusan load balancer menonaktifkan akses global sehingga VM klien, tunnel Cloud VPN, atau lampiran Cloud Interconnect (VLAN) harus berada di region yang sama dengan Network Load Balancer passthrough internal. Untuk mendukung klien di semua region, Anda dapat mengaktifkan akses global di aturan penerusan load balancer dengan menyertakan anotasi global access dalam manifes Service.
Menghapus resource load balancer dan Service LoadBalancer internal
Anda dapat menghapus Deployment dan Service menggunakan kubectl delete
atau
konsolGoogle Cloud .
kubectl
Menghapus Deployment
Untuk menghapus Deployment, jalankan perintah berikut:
kubectl delete deployment ilb-deployment
Menghapus Service
Untuk menghapus Service, jalankan perintah berikut:
kubectl delete service ilb-svc
Konsol
Menghapus Deployment
Untuk menghapus Deployment, lakukan langkah-langkah berikut:
Buka halaman Workloads di konsol Google Cloud .
Pilih Deployment yang ingin dihapus, lalu klik delete Hapus.
Jika diminta untuk mengonfirmasi, pilih kotak centang Hapus Autoscaler Pod Horizontal yang tertaut dengan Deployment yang dipilih, lalu klik Hapus.
Menghapus Service
Untuk menghapus Service, lakukan langkah-langkah berikut:
Buka halaman Services & Ingress di konsol Google Cloud .
Pilih Service yang ingin Anda hapus, lalu klik delete Hapus.
Saat diminta mengonfirmasi, klik Hapus.
IP bersama
Load Balancer Jaringan passthrough internal memungkinkan
berbagi alamat IP Virtual di antara beberapa aturan penerusan.
Kemampuan ini berguna untuk menambah jumlah port simultan di IP yang sama, atau
untuk menerima traffic UDP dan TCP di IP yang sama. Dengan ini, maksimum
50 port dapat diekspos per alamat IP. IP bersama didukung secara native di
cluster GKE dengan Service LoadBalancer internal.
Saat melakukan deployment, kolom loadBalancerIP
Service digunakan untuk menunjukkan
IP mana yang harus dibagikan di seluruh Service.
Batasan
IP bersama untuk beberapa load balancer memiliki batasan dan kemampuan berikut:
- Setiap aturan penerusan dapat memiliki hingga lima port (berurutan atau tidak berurutan), atau dapat dikonfigurasi untuk mencocokkan dan meneruskan traffic di semua port. Jika Layanan LoadBalancer Internal menentukan lebih dari lima port, aturan penerusan akan otomatis ditetapkan agar cocok dengan semua port.
- Maksimum sepuluh Service (aturan penerusan) dapat berbagi alamat IP. Dengan demikian, maksimum 50 port per IP bersama diperbolehkan.
- Setiap aturan penerusan yang memiliki alamat IP yang sama harus menggunakan kombinasi protokol dan port yang unik. Oleh karena itu, setiap Service LoadBalancer internal harus menggunakan serangkaian protokol dan port yang unik.
- Kombinasi Service khusus TCP dan khusus UDP didukung di IP bersama yang sama, tetapi Anda tidak dapat mengekspos port TCP dan UDP di Service yang sama.
Mengaktifkan IP Bersama
Untuk mengaktifkan Service LoadBalancer internal agar berbagi IP umum, ikuti langkah-langkah berikut:
Buat IP internal statis dengan
--purpose SHARED_LOADBALANCER_VIP
. Alamat IP harus dibuat dengan tujuan ini agar dapat dibagikan. Jika membuat alamat IP internal statis di VPC Bersama, Anda harus membuat alamat IP di project layanan yang sama dengan instance yang akan menggunakan alamat IP tersebut meskipun nilai alamat IP akan diperoleh dari rentang IP yang tersedia di subnet bersama yang dipilih dari jaringan VPC Bersama. Lihat mencadangkan IP internal statis di halaman Menyediakan VPC Bersama untuk mengetahui informasi selengkapnya.Deploy hingga sepuluh Service LoadBalancer internal menggunakan IP statis ini di kolom
loadBalancerIP
. Load Balancer Jaringan passthrough internal direkonsiliasi oleh pengontrol layanan GKE dan di-deploy menggunakan IP frontend yang sama.
Contoh berikut menunjukkan cara melakukannya untuk mendukung beberapa port TCP dan UDP di IP load balancer internal yang sama.
Buat IP statis di region yang sama dengan cluster GKE Anda. Subnet harus berupa subnet yang sama dengan yang digunakan load balancer, yang secara default merupakan subnet yang sama dengan yang digunakan oleh IP node cluster GKE.
Jika cluster dan jaringan VPC berada dalam project yang sama:
gcloud compute addresses create IP_ADDR_NAME \ --project=PROJECT_ID \ --subnet=SUBNET \ --addresses=IP_ADDRESS \ --region=COMPUTE_REGION \ --purpose=SHARED_LOADBALANCER_VIP
Jika cluster Anda berada dalam project layanan VPC Bersama, tetapi menggunakan jaringan VPC Bersama dalam project host:
gcloud compute addresses create IP_ADDR_NAME \ --project=SERVICE_PROJECT_ID \ --subnet=projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET \ --addresses=IP_ADDRESS \ --region=COMPUTE_REGION \ --purpose=SHARED_LOADBALANCER_VIP
Ganti kode berikut:
IP_ADDR_NAME
: nama untuk objek alamat IP.SERVICE_PROJECT_ID
: ID project layanan.PROJECT_ID
: ID project Anda (satu project).HOST_PROJECT_ID
: ID project host VPC Bersama.COMPUTE_REGION
: region komputasi yang berisi subnet bersama.IP_ADDRESS
: alamat IP internal yang tidak digunakan dari rentang alamat IP utama subnet yang dipilih. Jika Anda tidak menentukan alamat IP, Google Cloud akan memilih alamat IP internal yang tidak digunakan dari rentang alamat IP utama subnet yang dipilih. Untuk menentukan alamat yang dipilih secara otomatis, Anda harus menjalankangcloud compute addresses describe
.SUBNET
: nama subnet bersama.
Simpan konfigurasi Service TCP berikut ke file bernama
tcp-service.yaml
, lalu deploy ke cluster Anda. GantiIP_ADDRESS
dengan alamat IP yang telah Anda pilih di langkah sebelumnya.apiVersion: v1 kind: Service metadata: name: tcp-service namespace: default # Request an internal load balancer. annotations: networking.gke.io/load-balancer-type: "Internal" spec: type: LoadBalancer # Use an IP address that you create. loadBalancerIP: IP_ADDRESS selector: app: myapp ports: - name: 8001-to-8001 protocol: TCP port: 8001 targetPort: 8001 - name: 8002-to-8002 protocol: TCP port: 8002 targetPort: 8002 - name: 8003-to-8003 protocol: TCP port: 8003 targetPort: 8003 - name: 8004-to-8004 protocol: TCP port: 8004 targetPort: 8004 - name: 8005-to-8005 protocol: TCP port: 8005 targetPort: 8005
Terapkan definisi Service ini di cluster Anda:
kubectl apply -f tcp-service.yaml
Simpan konfigurasi Service UDP berikut ke file bernama
udp-service.yaml
, lalu deploy. Kode ini juga menggunakanIP_ADDRESS
yang telah Anda tentukan di langkah sebelumnya.apiVersion: v1 kind: Service metadata: name: udp-service namespace: default # Request an internal load balancer. annotations: networking.gke.io/load-balancer-type: "Internal" spec: type: LoadBalancer # Use the same IP address that you used for the TCP Service. loadBalancerIP: IP_ADDRESS selector: app: my-udp-app ports: - name: 9001-to-9001 protocol: UDP port: 9001 targetPort: 9001 - name: 9002-to-9002 protocol: UDP port: 9002 targetPort: 9002
Terapkan file ini di cluster Anda:
kubectl apply -f udp-service.yaml
Validasi bahwa VIP dibagikan di antara aturan penerusan load balancer dengan mencantumkannya dan memfilter IP statis. Tindakan ini menunjukkan bahwa ada aturan penerusan TCP dan UDP yang keduanya diproses di tujuh port berbeda di
IP_ADDRESS
bersama, yang dalam contoh ini adalah10.128.2.98
.gcloud compute forwarding-rules list | grep 10.128.2.98 ab4d8205d655f4353a5cff5b224a0dde us-west1 10.128.2.98 UDP us-west1/backendServices/ab4d8205d655f4353a5cff5b224a0dde acd6eeaa00a35419c9530caeb6540435 us-west1 10.128.2.98 TCP us-west1/backendServices/acd6eeaa00a35419c9530caeb6540435
Masalah umum
Waktu tunggu koneksi habis setiap 10 menit
Service LoadBalancer Internal yang dibuat dengan Subsetelan mungkin mengamati gangguan traffic kira-kira setiap 10 menit. Bug ini telah diperbaiki di versi:
- 1.18.19-gke.1700 dan yang lebih baru
- 1.19.10-gke.1000 dan yang lebih baru
- 1.20.6-gke.1000 dan yang lebih baru
Terjadi error saat membuat load balancer di tingkat Standard
Saat Anda membuat Load Balancer Jaringan passthrough internal dalam project dengan tingkat jaringan default project ditetapkan ke Standard, pesan error berikut akan muncul:
Error syncing load balancer: failed to ensure load balancer: googleapi: Error 400: STANDARD network tier (the project's default network tier) is not supported: Network tier other than PREMIUM is not supported for loadBalancingScheme=INTERNAL., badRequest
Untuk mengatasi masalah ini di GKE versi yang lebih lama dari 1.23.3-gke.900, konfigurasikan tingkat jaringan default project ke Premium.
Masalah ini diselesaikan di GKE versi 1.23.3-gke.900 dan yang lebih baru jika subsetelan GKE diaktifkan.
Pengontrol GKE membuat Load Balancer Jaringan passthrough internal di tingkat jaringan Premium meskipun tingkat jaringan default project ditetapkan ke Standard.
Langkah berikutnya
- Baca ringkasan jaringan GKE.
- Pelajari load balancer Compute Engine lebih lanjut.
- Pelajari cara membuat cluster VPC native.
- Memecahkan masalah load balancing di GKE.
- Pelajari agen penyamaran IP.
- Pelajari cara mengonfigurasi jaringan yang diizinkan.