Halaman ini menunjukkan cara mengaktifkan Gateway GKE Controller multi-cluster, yakni pengontrol yang dihosting Google yang menyediakan load balancer eksternal dan internal, untuk cluster GKE Anda. Untuk mempelajari cara menggunakan resource Gateway untuk load balancing container, lihat Men-deploy Gateway atau Men-deploy Gateway multi-cluster.
GKE Gateway Controller multi-cluster menginstal GatewayClass multi-cluster berikut di cluster Anda:
gke-l7-global-external-managed-mc
untuk Gateway multi-cluster eksternal globalgke-l7-regional-external-managed-mc
untuk Gateway multi-cluster eksternal regionalgke-l7-rilb-mc
untuk Gateway multi-cluster internal regionalgke-l7-gxlb-mc
untuk Gateway multi-cluster Klasik eksternal global
Pelajari lebih lanjut kemampuan berbagai GatewayClass di GKE.
Harga
Semua resource Compute Engine yang di-deploy melalui pengontrol Gateway akan dikenai biaya sesuai project tempat cluster GKE Anda berada. Pengontrol Gateway cluster tunggal ditawarkan tanpa biaya tambahan sebagai bagian dari harga GKE Standard dan Autopilot. Harga untuk Gateway multi-cluster dijelaskan di halaman harga Gateway dan Multi Cluster Ingress.
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
.
Persyaratan GKE Gateway Controller
- Untuk Standard, GKE versi 1.24 atau yang lebih baru.
- Untuk Autopilot, GKE versi 1.26 atau yang lebih baru.
- Google Cloud CLI versi 407.0.0 atau yang lebih baru.
- Gateway API hanya didukung di cluster native VPC.
- Jika menggunakan GatewayClass internal, Anda harus mengaktifkan subnet khusus proxy.
- Cluster Anda harus mengaktifkan add-on
HttpLoadBalancing
. - Jika menggunakan Istio, Anda harus mengupgrade Istio ke salah satu versi berikut:
- 1.15.2 atau yang lebih baru
- 1.14.5 atau yang lebih baru
- 1.13.9 atau yang lebih baru.
- Jika menggunakan VPC Bersama, di project host, Anda harus menetapkan peran
Compute Network User
ke Akun Layanan GKE untuk project layanan.
Persyaratan Gateway multi-cluster
Selain persyaratan pengontrol GKE Gateway, untuk deployment Gateway multi-cluster, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Gateway API di cluster konfigurasi Anda.
- Aktifkan Workload Identity Federation for GKE di cluster Anda.
- Selesaikan prasyarat umum fleet untuk mendaftarkan cluster Anda.
Aktifkan API yang diperlukan Gateway multi-cluster berikut di project Anda:
- Cloud Service Mesh API
- Multi-cluster Services API
- API Multi Cluster Ingress
Jalankan perintah ini untuk mengaktifkan API yang diperlukan jika belum diaktifkan:
gcloud services enable \ trafficdirector.googleapis.com \ multiclusterservicediscovery.googleapis.com \ multiclusteringress.googleapis.com \ --project=PROJECT_ID
Ganti
PROJECT_ID
dengan project ID tempat cluster GKE Anda berjalan.
Batasan dan Pembatasan
Batasan dan masalah umum yang sama untuk Gateway cluster tunggal juga berlaku untuk Gateway multi-cluster.
Selain batasan Gateway cluster tunggal, batasan berikut berlaku untuk Gateway multi-cluster:
Load balancing ke backend di region yang berbeda tidak didukung dengan GatewayClass internal regional
gke-l7-rilb-mc
. Untuk mempelajari lebih lanjut berbagai fitur yang didukung oleh setiap GatewayClass, lihat Kemampuan GatewayClass.Service
tidak didukung sebagaibackendRefs
dengan Gateway multi-cluster. Multi-cluster Gateway hanya mendukungServiceImport
sebagaibackendRefs
yang valid.Load balancing lintas project tidak didukung. Semua cluster (cluster konfigurasi dan cluster target) yang dilampirkan ke Gateway multi-cluster yang sama harus di-deploy di project host atau project layanan VPC Bersama yang sama. Untuk informasi selengkapnya tentang topologi VPC Bersama yang didukung dengan Gateway multi-cluster, lihat Menggunakan Gateway multi-cluster dengan VPC Bersama.
Load balancing lintas-VPC tidak didukung. Semua cluster (cluster konfigurasi dan cluster target) yang dilampirkan ke Gateway multi-cluster yang sama harus di-deploy di VPC yang sama.
Multi-cluster Gateway bergantung pada MCS untuk menangani penemuan layanan lintas cluster. Dengan demikian, layanan yang diekspos oleh Gateway multi-cluster tunduk pada semua persyaratan Layanan Multi-cluster.
Kuota
GKE Gateway menggunakan kuota Cloud Load Balancing untuk membatasi jumlah resource yang dapat dibuat oleh pengontrol Gateway untuk mengelola traffic masuk yang dirutekan ke cluster GKE.
Menyiapkan lingkungan Anda untuk Gateway multi-cluster
Perlu beberapa cluster GKE untuk menyelesaikan contoh dalam Men-deploy Gateway multi-cluster. Semua cluster terdaftar ke armada yang sama sehingga Gateway dan Layanan multi-cluster dapat beroperasi di semua cluster tersebut.
Langkah-langkah berikut akan men-deploy tiga cluster GKE di dua region berbeda dalam project Anda:
us-west1-a/gke-west-1
us-west1-a/gke-west-2
us-east1-b/gke-east-1
Tindakan ini akan membuat topologi cluster berikut:
Cluster GKE ini digunakan untuk mendemonstrasikan load balancing multi-region dan pemisahan traffic multi-cluster berwarna biru-hijau menggunakan Gateway eksternal dan internal.
Men-deploy cluster
Pada langkah ini, Anda akan men-deploy tiga cluster GKE ke region us-east1
dan us-west1
.
Cluster akan terdaftar ke fleet project Anda. Dengan mengelompokkan cluster GKE Anda dalam satu fleet, cluster tersebut dapat ditarget oleh Gateway multi-cluster.
Buat cluster GKE di
us-west1
bernamagke-west-1
:gcloud container clusters create gke-west-1 \ --gateway-api=standard \ --zone=us-west1-a \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --enable-fleet \ --project=PROJECT_ID
Ganti kode berikut:
PROJECT_ID
: project ID tempat cluster GKE Anda berjalan.VERSION
: versi GKE, 1.24 atau yang lebih baru.
Buat cluster GKE lain di
us-west1
(atau region yang sama dengan cluster sebelumnya) bernamagke-west-2
:gcloud container clusters create gke-west-2 \ --gateway-api=standard \ --zone=us-west1-a \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --enable-fleet \ --project=PROJECT_ID
Buat cluster GKE di
us-east1
(atau region yang berbeda dengan yang sebelumnya) bernamagke-east-1
gcloud container clusters create gke-east-1 \ --gateway-api=standard \ --zone=us-east1-b \ --workload-pool=PROJECT_ID.svc.id.goog \ --cluster-version=VERSION \ --enable-fleet \ --project=PROJECT_ID
Konfirmasi bahwa cluster telah berhasil didaftarkan ke fleet:
gcloud container fleet memberships list --project=PROJECT_ID
Outputnya akan mirip dengan berikut ini:
NAME EXTERNAL_ID LOCATION gke-east-1 45a80b37-4b00-49aa-a68b-b430fce1e3f0 us-east1 gke-west-2 ac7087a5-f5ee-401e-b430-57f3af141239 us-west1 gke-west-1 549efe3a-b18e-4eb9-8796-e50b7967cde2 us-west1
Mengonfigurasi kredensial cluster
Langkah ini akan mengonfigurasi kredensial cluster dengan nama yang mudah diingat. Hal ini mempermudah beralih antar-cluster saat men-deploy resource di beberapa cluster.
Ambil kredensial untuk cluster
gke-west-1
,gke-west-2
, dangke-east-1
:gcloud container clusters get-credentials gke-west-1 --zone=us-west1-a --project=PROJECT_ID gcloud container clusters get-credentials gke-west-2 --zone=us-west1-a --project=PROJECT_ID gcloud container clusters get-credentials gke-east-1 --zone=us-east1-b --project=PROJECT_ID
Tindakan ini akan menyimpan kredensial secara lokal sehingga Anda dapat menggunakan klien kubectl untuk mengakses server API cluster. Secara default, nama yang dibuat secara otomatis dibuat untuk kredensial.
Ganti nama konteks cluster agar lebih mudah dirujuk di lain waktu:
kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-1 gke-west-1 kubectl config rename-context gke_PROJECT_ID_us-west1-a_gke-west-2 gke-west-2 kubectl config rename-context gke_PROJECT_ID_us-east1-b_gke-east-1 gke-east-1
Ganti
PROJECT_ID
dengan project ID tempat cluster Anda di-deploy.
Mengaktifkan Layanan multi-cluster di fleet
Aktifkan Layanan multi-cluster di fleet Anda untuk cluster yang terdaftar. Langkah ini memungkinkan pengontrol MCS untuk tiga cluster yang terdaftar ke fleet Anda, sehingga pengontrol tersebut dapat mulai memproses dan mengekspor Layanan.
gcloud container fleet multi-cluster-services enable \ --project PROJECT_ID
Berikan izin Identity and Access Management (IAM) yang diperlukan oleh pengontrol MCS:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-mcs/gke-mcs-importer]" \ --role "roles/compute.networkViewer" \ --project=PROJECT_ID
Ganti
PROJECT_ID
dengan project ID tempat cluster Anda di-deploy.Pastikan MCS sudah diaktifkan untuk cluster yang terdaftar. Anda akan melihat keanggotaan untuk tiga cluster yang terdaftar. Mungkin perlu waktu beberapa menit hingga semua cluster ditampilkan.
gcloud container fleet multi-cluster-services describe --project=PROJECT_ID
Outputnya mirip dengan hal berikut ini:
createTime: '2023-10-12T06:14:33.466903587Z' membershipStates: projects/441323991697/locations/us-east1/memberships/gke-east-1: state: code: OK description: Firewall successfully updated updateTime: '2023-10-12T06:15:28.395318091Z' projects/441323991697/locations/us-west1/memberships/gke-west-1: state: code: OK description: Firewall successfully updated updateTime: '2023-10-12T06:15:30.534594027Z' projects/441323991697/locations/us-west1/memberships/gke-west-2: state: code: OK description: Firewall successfully updated updateTime: '2023-10-12T06:15:29.110582109Z' name: projects/pierre-louis-playground/locations/global/features/multiclusterservicediscovery resourceState: state: ACTIVE spec: {} updateTime: '2023-10-12T06:15:31.027276757Z'
Mengaktifkan Gateway multi-cluster di fleet
Pengontrol Gateway GKE multi-cluster mengatur deployment Gateway multi-cluster.
Saat mengaktifkan pengontrol Gateway multi-cluster, Anda harus memilih cluster konfigurasi. Cluster konfigurasi adalah cluster GKE tempat resource Gateway (Gateway, Routes, Policies) di-deploy. Ini adalah tempat terpusat yang mengontrol pemilihan rute di seluruh cluster Anda. Lihat Desain cluster konfigurasi untuk membantu Anda menentukan cluster mana yang akan dipilih sebagai cluster konfigurasi.
Aktifkan Gateway multi-cluster dan tentukan cluster konfigurasi Anda di fleet. Perlu diperhatikan bahwa Anda selalu dapat memperbarui cluster konfigurasi di lain waktu. Contoh ini menetapkan
gke-west-1
sebagai cluster konfigurasi yang akan menghosting resource untuk Gateway multi-cluster.gcloud container fleet ingress enable \ --config-membership=projects/PROJECT_ID/locations/us-west1/memberships/gke-west-1 \ --project=PROJECT_ID
Berikan izin Identity and Access Management (IAM) yang diperlukan oleh pengontrol Gateway multi-cluster:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-multiclusteringress.iam.gserviceaccount.com" \ --role "roles/container.admin" \ --project=PROJECT_ID
Ganti
PROJECT_ID
danPROJECT_NUMBER
dengan project ID dan nomor project tempat cluster Anda di-deploy.Pastikan pengontrol GKE Gateway telah diaktifkan untuk fleet Anda:
gcloud container fleet ingress describe --project=PROJECT_ID
Outputnya mirip dengan hal berikut ini:
createTime: '2023-10-12T06:23:06.732858524Z' membershipStates: projects/441323991697/locations/us-east1/memberships/gke-east-1: state: code: OK updateTime: '2023-10-12T06:30:08.815839024Z' projects/441323991697/locations/us-west1/memberships/gke-west-1: state: code: OK updateTime: '2023-10-12T06:30:08.815837031Z' projects/441323991697/locations/us-west1/memberships/gke-west-2: state: code: OK updateTime: '2023-10-12T06:30:08.815840985Z' name: projects/pierre-louis-playground/locations/global/features/multiclusteringress resourceState: state: ACTIVE spec: multiclusteringress: configMembership: projects/pierre-louis-playground/locations/us-west1/memberships/gke-west-1 state: state: code: OK description: Ready to use updateTime: '2023-10-12T06:23:51.317464415Z' updateTime: '2023-10-12T06:30:09.439319551Z'
Pastikan GatewayClass ada di cluster konfigurasi Anda:
kubectl get gatewayclasses --context=gke-west-1
Outputnya mirip dengan hal berikut ini:
NAME CONTROLLER ACCEPTED AGE gke-l7-global-external-managed networking.gke.io/gateway True 78m gke-l7-global-external-managed-mc networking.gke.io/gateway True 4m22s gke-l7-gxlb networking.gke.io/gateway True 78m gke-l7-gxlb-mc networking.gke.io/gateway True 4m23s gke-l7-regional-external-managed networking.gke.io/gateway True 78m gke-l7-regional-external-managed-mc networking.gke.io/gateway True 4m22s gke-l7-rilb networking.gke.io/gateway True 78m gke-l7-rilb-mc networking.gke.io/gateway True 4m22s
Output ini mencakup GatewayClass gke-l7-global-external-managed-mc, gke-l7-regional-external-managed-mc, gke-l7-gxlb-mc untuk Gateway multi-cluster eksternal, dan GatewayClass gke-l7-rilb-mc untuk Gateway multi-cluster internal.
Alihkan konteks kubectl ke cluster konfigurasi:
kubectl config use-context gke-west-1
Sekarang Anda siap untuk mulai men-deploy Gateway multi-cluster di cluster konfigurasi.
Pemecahan masalah
Bagian ini menunjukkan cara menyelesaikan masalah terkait pengaktifan pengontrol Gateway multi-cluster.
GatewayClass tidak tersedia di cluster konfigurasi
Error berikut mungkin terjadi saat Anda menjalankan perintah kubectl get gatewayclasses
:
error: the server doesn't have a resource type "gatewayclasses"
Untuk mengatasi masalah ini, instal Gateway API di cluster Anda:
gcloud container clusters update CLUSTER_NAME \
--gateway-api=standard \
--region=COMPUTE_REGION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster Anda.COMPUTE_REGION
: region Compute Engine Anda. Untuk cluster zona, gunakan--zone=COMPUTE_ZONE
.
Masalah Umum
- Ada masalah umum pada pengontrol Gateway multi-cluster yang mungkin gagal dimulai. Untuk menghindari masalah ini, aktifkan Gateway API di cluster konfigurasi dan sertakan CRD sebelum fitur ingress Arah diaktifkan.
- Gateway Multi-cluster dapat membocorkan resource load balancer dalam skenario berikut:
- Fitur ingress Fleet diupdate dengan cluster konfigurasi baru yang tidak memiliki semua resource
Gateway
yang ada di cluster konfigurasi saat ini. - Fitur ingress Fleet dinonaktifkan saat resource
Gateway
yang mereferensikanGatewayClass
multi-cluster ada di cluster konfigurasi.
- Fitur ingress Fleet diupdate dengan cluster konfigurasi baru yang tidak memiliki semua resource
- Multi-cluster Gateway berjalan sebagai layanan global. Jika pengontrol Gateway multi-cluster mengalami kegagalan bidang kontrol regional Fleet (Hub), pengontrol tersebut akan merespons dengan kegagalan statis dan tidak membuat perubahan load balancer lebih lanjut hingga region tersebut dikembalikan ke layanan.
Langkah selanjutnya
- Untuk men-deploy load balancing multi-cluster, lihat Men-deploy Gateway multi-cluster.
- Untuk mempelajari pengontrol Gateway lebih lanjut, lihat Gateway.