Halaman ini menjelaskan cara membuat Load Balancer Jaringan passthrough internal pada Google Kubernetes Engine (GKE) di jaringan VPC.
Sebelum membaca halaman ini, pastikan Anda sudah memahami konsep berikut:
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
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
Membuat load balancer internal dengan Private Service Connect
Sebagai produsen layanan, Anda dapat menggunakan lampiran layanan agar layanan
tersedia untuk konsumen di jaringan VPC lain dengan
Private Service Connect. Anda dapat
membuat, mengelola, dan menghapus lampiran layanan dengan
resource kustom ServiceAttachment
.
Persyaratan dan batasan
- Batasan untuk Private Service Connect berlaku.
- Anda dapat membuat lampiran layanan di GKE versi 1.21.4-gke.300 dan yang lebih baru.
- Anda tidak dapat menggunakan subnet yang sama dalam beberapa konfigurasi lampiran layanan.
- Anda harus membuat layanan GKE yang menggunakan Load Balancer Jaringan passthrough internal.
- Anda tidak dapat menentukan subnet di project yang berbeda (VPC Bersama) untuk versi GKE sebelum 1.22.4-gke.100. Untuk VPC Bersama, pastikan semua persyaratan untuk VPC Bersama terpenuhi.
Membuat ServiceAttachment
Buat subnet
Anda harus membuat subnet baru untuk setiap
ServiceAttachment
.gcloud beta compute networks subnets create SUBNET_NAME \ --project PROJECT_ID \ --network NETWORK_NAME \ --region REGION \ --range SUBNET_RANGE \ --purpose PRIVATE_SERVICE_CONNECT
Ganti kode berikut:
SUBNET_NAME
: nama subnet baru. Pada GKE versi 1.22.4-gke.100 dan yang lebih baru, Anda dapat menentukan subnet dalam project yang berbeda menggunakan URL referensi yang sepenuhnya memenuhi syarat untuk kolom ini. Anda bisa mendapatkan URL referensi yang sepenuhnya memenuhi syarat menggunakan perintahgcloud compute networks subnets describe
.PROJECT_ID
: ID project Google Cloud Anda.NETWORK_NAME
: nama jaringan VPC untuk subnet.REGION
: region untuk subnet baru. Anda harus menggunakan region yang sama dengan layanan yang Anda buat.SUBNET_RANGE
: rentang alamat IP yang akan digunakan untuk subnet.
Deploy workload.
Manifes berikut menjelaskan Deployment yang menjalankan image container aplikasi web contoh. Simpan manifes sebagai
my-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: psc-ilb spec: replicas: 3 selector: matchLabels: app: psc-ilb template: metadata: labels: app: psc-ilb spec: containers: - name: whereami image: us-docker.pkg.dev/google-samples/containers/gke/whereami:v1 ports: - name: http containerPort: 8080 readinessProbe: httpGet: path: /healthz port: 8080 scheme: HTTP initialDelaySeconds: 5 timeoutSeconds: 1
Terapkan manifes ke cluster Anda:
kubectl apply -f my-deployment.yaml
Buat layanan. Manifes berikut menjelaskan layanan yang membuat Load Balancer Jaringan passthrough internal pada port TCP 8080. Simpan manifes sebagai
my-service.yaml
:apiVersion: v1 kind: Service metadata: name: SERVICE_NAME annotations: networking.gke.io/load-balancer-type: "Internal" spec: type: LoadBalancer selector: app: psc-ilb ports: - port: 80 targetPort: 8080 protocol: TCP
Ganti kode berikut:
SERVICE_NAME
: nama layanan baru.
Terapkan manifes ke cluster Anda:
kubectl apply -f my-service.yaml
Buat
ServiceAttachment
.Manifes berikut menjelaskan
ServiceAttachment
yang menampilkan layanan yang Anda buat untuk konsumen layanan. Simpan manifes sebagaimy-psc.yaml
:apiVersion: networking.gke.io/v1 kind: ServiceAttachment metadata: name: SERVICE_ATTACHMENT_NAME namespace: default spec: connectionPreference: ACCEPT_AUTOMATIC natSubnets: - SUBNET_NAME proxyProtocol: false resourceRef: kind: Service name: SERVICE_NAME
Ganti kode berikut:
SERVICE_ATTACHMENT_NAME
: nama lampiran layanan baru.SUBNET_NAME
: nama subnet baru. Pada GKE versi 1.22.4-gke.100 dan yang lebih baru, Anda dapat menentukan subnet dalam project yang berbeda menggunakan URL referensi yang sepenuhnya memenuhi syarat untuk kolom ini. Anda bisa mendapatkan URL referensi yang sepenuhnya memenuhi syarat menggunakan perintahgcloud compute networks subnets describe
. Untuk konfigurasi VPC Bersama, gunakan format berikut:projects/HOST_PROJECT_ID/regions/COMPUTE_REGION/subnetworks/SUBNET_NAME
.
Untuk informasi selengkapnya tentang kolom manifes, lihat kolom lampiran layanan.
Terapkan manifes ke cluster Anda:
kubectl apply -f my-psc.yaml
Pastikan pengontrol Private Service Connect membuat lampiran layanan:
gcloud beta compute service-attachments list
Output menampilkan lampiran layanan dengan nama yang dibuat secara otomatis:
NAME REGION PRODUCER_FORWARDING_RULE CONNECTION_PREFERENCE k8s1-sa-... REGION_NAME a3fea439c870148bdba5e59c9ea9451a ACCEPT_AUTOMATIC
Melihat ServiceAttachment
Anda dapat melihat detail ServiceAttachment
dengan perintah berikut:
kubectl describe serviceattachment SERVICE_ATTACHMENT_NAME
Outputnya mirip dengan ini:
Name: <sa-name>
Namespace: default
Labels: <none>
Annotations: <none>
API Version: networking.gke.io/v1beta1
Kind: ServiceAttachment
Metadata:
...
Status:
Forwarding Rule URL: https://www.googleapis.com/compute/beta/projects/<project>/regions/<region>/forwardingRules/<fr-name>
Last Modified Timestamp: 2021-07-08T01:32:39Z
Service Attachment URL: https://www.googleapis.com/compute/beta/projects/<projects>/regions/<region>/serviceAttachments/<gce-service-attachment-name>
Events: <none>
Menggunakan ServiceAttachment
Untuk menggunakan layanan Anda dari project lain, lakukan langkah-langkah berikut:
Dapatkan URL
ServiceAttachment
:kubectl get serviceattachment SERVICE_ATTACHMENT_NAME -o=jsonpath="{.status.serviceAttachmentURL}"
Outputnya mirip dengan ini:
serviceAttachmentURL: https://www.googleapis.com/compute/alpha/projects/<project>/region/<region>/serviceAttachments/k8s1-...my-sa
Buat endpoint Private Service Connect menggunakan URL
ServiceAttachment
.Pastikan Anda dapat terhubung ke Layanan yang di-deploy di project produsen menggunakan perintah
curl
dari VM di project konsumen:curl PSC_IP_ADDRESS
Ganti
PSC_IP_ADDRESS
dengan alamat IP aturan penerusan di project konsumen.Outputnya mirip dengan ini:
{ "cluster_name":"cluster", "host_header":"10.128.15.200", "node_name":"gke-psc-default-pool-be9b6e0e-dvxg.c.gke_project.internal", "pod_name":"foo-7bf648dcfd-l5jf8", "pod_name_emoji":"👚", "project_id":"gke_project", "timestamp":"2021-06-29T21:32:03", "zone":"ZONE_NAME" }
Mengupdate ServiceAttachment
Anda dapat mengupdate ServiceAttachment
dengan langkah-langkah berikut:
Edit manifes
ServiceAttachment
dimy-psc.yaml
:apiVersion: networking.gke.io/v1 kind: ServiceAttachment metadata: name: my-sa namespace: default spec: connectionPreference: ACCEPT_AUTOMATIC natSubnets: - my-nat-subnet proxyProtocol: false resourceRef: kind: Service name: ilb-service
Terapkan manifes ke cluster Anda:
kubectl apply -f my-psc.yaml
Menghapus ServiceAttachment
Anda tidak dapat menghapus Load Balancer Jaringan passthrough internal yang terhubung ke lampiran layanan. Anda harus menghapus lampiran layanan dan Layanan GKE secara terpisah.
Hapus lampiran layanan:
kubectl delete serviceattachment SERVICE_ATTACHMENT_NAME --wait=false
Perintah ini menandai lampiran layanan untuk dihapus, tetapi resource akan tetap ada. Anda juga dapat menunggu hingga penghapusan selesai dengan menghilangkan flag
--wait
.Hapus Layanan:
kubectl delete svc SERVICE_NAME
Hapus subnet:
gcloud compute networks subnets delete SUBNET_NAME
Kolom ServiceAttachment
ServiceAttachment
memiliki kolom berikut:
connectionPreference
: preferensi koneksi yang menentukan cara pelanggan terhubung ke layanan. Anda dapat menggunakan persetujuan project otomatis denganACCEPT_AUTOMATIC
atau persetujuan project eksplisit denganACCEPT_MANUAL
. Untuk mengetahui informasi selengkapnya, lihat Memublikasikan layanan menggunakan Private Service Connect.natSubnets
: daftar nama resource subnetwork untuk lampiran layanan.proxyProtocol
: jika ditetapkan ke true, IP sumber konsumen dan ID koneksi Private Service Connect akan tersedia dalam permintaan. Kolom ini bersifat opsional dan setelan defaultnya adalah false.consumerAllowList
: daftar project konsumen yang diizinkan untuk terhubung keServiceAttachment
. Kolom ini hanya dapat digunakan jikaconnectionPreference
disetel keACCEPT_MANUAL
. Untuk mengetahui informasi selengkapnya tentang kolom ini, lihat Memublikasikan layanan menggunakan Private Service Connect.project
: ID atau nomor project untuk project konsumen.connectionLimit
: batas koneksi untuk project konsumen. Kolom ini bersifat opsional.forceSendFields
: nama kolom yang dikirim untuk disertakan dalam permintaan API. Kolom ini bersifat opsional.nullFields
: nama kolom yang disertakan dalam permintaan API dengan nilai null. Kolom ini bersifat opsional.
consumerRejectList
: daftar project ID atau nomor project konsumen yang tidak diizinkan untuk terhubung keServiceAttachment
. Kolom ini hanya dapat digunakan jikaconnectionPreference
disetel keACCEPT_MANUAL
. Untuk mengetahui informasi selengkapnya tentang kolom ini, lihat Memublikasikan layanan menggunakan Private Service Connect.resourceRef
: referensi ke resource Kubernetes.kind
: jenis resource Kubernetes. Anda harus menggunakanService
.name
: nama resource Kubernetes yang harus berada di namespace yang sama dengan Load Balancer Jaringan passthrough internal.
Pemecahan masalah
Anda dapat melihat pesan error dengan perintah berikut:
kubectl get events -n NAMESPACE
Ganti NAMESPACE
dengan namespace
Load Balancer Jaringan passthrough internal.
Pesan error seperti di bawah ini muncul jika Anda mencoba menghapus
Load Balancer Jaringan passthrough internal yang sedang digunakan lampiran layanan. Anda harus menghapus
ServiceAttachment
sebelum menghapus Load Balancer Jaringan passthrough internal.
Error syncing load balancer: failed to ensure load balancer: googleapi:
Error 400: The forwarding_rule resource '<fwd-rule-URL>' is already being used
by '<svc-attachment-URL>', resourceInUseByAnotherResource.
Langkah selanjutnya
- Baca ringkasan jaringan GKE.
- Pelajari load balancer Compute Engine lebih lanjut.
- Pelajari cara membuat cluster VPC native.
- Pelajari cara mengonfigurasi jaringan yang diizinkan.
- Memecahkan masalah load balancing di GKE.