Halaman ini menunjukkan cara merutekan traffic ke beberapa cluster Google Kubernetes Engine (GKE) di berbagai region menggunakan Multi Cluster Ingress, dengan contoh menggunakan dua cluster.
Untuk perbandingan mendetail antara Multi Cluster Ingress (MCI), Multi-cluster Gateway (MCG), dan load balancer dengan Grup Endpoint Jaringan Mandiri (LB dan NEG Mandiri), lihat Memilih API load balancing multi-cluster untuk GKE.
Untuk mempelajari lebih lanjut cara men-deploy Multi Cluster Ingress, lihat Men-deploy Ingress di seluruh cluster.
Langkah-langkah ini memerlukan izin yang ditingkatkan dan harus dilakukan oleh administrator GKE.
Sebelum Anda 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 dan batasan
Multi Cluster Ingress memiliki persyaratan berikut:
- Google Cloud CLI versi 290.0.0 dan yang lebih baru.
Jika Anda menggunakan cluster mode Standar, pastikan Anda memenuhi persyaratan berikut. Cluster Autopilot sudah memenuhi persyaratan ini.
- Cluster harus mengaktifkan add-on
HttpLoadBalancing
. Add-on ini diaktifkan secara default, Anda tidak boleh menonaktifkannya. - Cluster harus bersifat VPC-native.
- Cluster harus mengaktifkan Workload Identity Federation for GKE.
Multi Cluster Ingress memiliki batasan berikut:
- Hanya didukung dengan Load Balancer Aplikasi eksternal.
- Jangan buat load balancer Compute Engine dalam project yang sama dengan awalan
mci-
yang tidak dikelola oleh Multi Cluster Ingress. Jika tidak, load balancer tersebut akan dihapus. Google Cloud menggunakan awalanmci-[6 char hash]
untuk mengelola resource Compute Engine yang di-deploy oleh Multi Cluster Ingress. - Konfigurasi HTTPS memerlukan alamat IP statis yang telah dialokasikan sebelumnya. HTTPS tidak didukung dengan alamat IP ephemeral.
Ringkasan
Dalam latihan ini, Anda melakukan langkah-langkah berikut:
- Pilih harga yang ingin Anda gunakan.
- Deploy cluster.
- Mengonfigurasi kredensial cluster.
- Daftarkan cluster ke fleet.
- Menentukan cluster konfigurasi. Klaster ini dapat berupa control plane khusus, atau dapat menjalankan beban kerja lain.
Diagram berikut menunjukkan tampilan lingkungan Anda setelah menyelesaikan latihan:
Dalam diagram, ada dua cluster GKE bernama gke-us
dan gke-eu
di region europe-west1
dan us-central1
. Cluster
terdaftar ke fleet sehingga pengontrol Multi Cluster Ingress dapat
mengenalinya. Dengan fleet, Anda dapat mengelompokkan dan menormalisasi cluster GKE secara logis, sehingga mempermudah administrasi infrastruktur dan memungkinkan penggunaan fitur multi-cluster seperti Multi Cluster Ingress. Anda dapat mempelajari lebih lanjut manfaat fleet dan cara membuatnya di dokumentasi pengelolaan fleet.
Pilih harga
Jika Multi Cluster Ingress adalah satu-satunya kemampuan GKE Enterprise yang Anda gunakan, sebaiknya gunakan harga mandiri. Jika project Anda menggunakan komponen atau kemampuan GKE Enterprise di Google Cloud lainnya, Anda harus mengaktifkan seluruh platform GKE Enterprise. Dengan begitu, Anda dapat menggunakan semua fitur GKE Enterprise dengan satu pengisian daya per vCPU.
API yang harus Anda aktifkan bergantung pada harga Multi Cluster Ingress yang Anda gunakan.
- Jika GKE Enterprise API (
anthos.googleapis.com
) diaktifkan, project Anda akan ditagih sesuai dengan jumlah vCPU cluster dan harga GKE Enterprise. - Jika GKE Enterprise API dinonaktifkan, project Anda akan ditagih sesuai dengan jumlah pod backend Multi Cluster Ingress di project Anda.
Anda dapat mengubah model penagihan Multi Cluster Ingress dari mandiri ke GKE Enterprise, atau dari GKE Enterprise ke mandiri kapan saja tanpa memengaruhi traffic atau resource Multi Cluster Ingress.
Harga mandiri
Untuk mengaktifkan harga mandiri, lakukan langkah-langkah berikut:
Pastikan GKE Enterprise API dinonaktifkan di project Anda:
gcloud services list --project=PROJECT_ID | grep anthos.googleapis.com
Ganti
PROJECT_ID
dengan project ID tempat cluster GKE Anda berjalan.Jika outputnya berupa respons kosong, GKE Enterprise API akan dinonaktifkan di project Anda dan semua resource Multi Cluster Ingress ditagih menggunakan harga mandiri.
Aktifkan API yang diperlukan di dalam project Anda
gcloud services enable \ multiclusteringress.googleapis.com \ gkehub.googleapis.com \ container.googleapis.com \ multiclusterservicediscovery.googleapis.com \ --project=PROJECT_ID
Harga GKE Enterprise
Untuk mengaktifkan harga GKE Enterprise, aktifkan API yang diperlukan di project Anda:
gcloud services enable \
anthos.googleapis.com \
multiclusteringress.googleapis.com \
gkehub.googleapis.com \
container.googleapis.com \
multiclusterservicediscovery.googleapis.com \
--project=PROJECT_ID
Setelah anthos.googleapis.com
diaktifkan dalam project Anda, semua cluster
yang terdaftar ke Connect akan ditagih sesuai dengan
harga GKE Enterprise.
Men-deploy cluster
Buat dua cluster GKE bernama gke-us
dan gke-eu
di region europe-west1
dan us-central1
.
Autopilot
Buat cluster
gke-us
di regionus-central1
:gcloud container clusters create-auto gke-us \ --region=us-central1 \ --release-channel=stable \ --project=PROJECT_ID
PROJECT_ID
dengan project ID Google Cloud AndaBuat cluster
gke-eu
di regioneurope-west1
:gcloud container clusters create-auto gke-eu \ --region=europe-west1 \ --release-channel=stable \ --project=PROJECT_ID
Standard
Buat dua cluster dengan Workload Identity Federation for GKE diaktifkan.
Buat cluster
gke-us
di regionus-central1
:gcloud container clusters create gke-us \ --region=us-central1 \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --release-channel=stable \ --project=PROJECT_ID
PROJECT_ID
dengan project ID Google Cloud AndaBuat cluster
gke-eu
di regioneurope-west1
:gcloud container clusters create gke-eu \ --region=europe-west1 \ --enable-ip-alias \ --workload-pool=PROJECT_ID.svc.id.goog \ --release-channel=stable \ --project=PROJECT_ID
Mengonfigurasi kredensial cluster
Konfigurasikan kredensial untuk cluster Anda dan ganti nama konteks cluster untuk mempermudah beralih antar-cluster saat men-deploy resource.
Ambil kredensial untuk cluster Anda:
gcloud container clusters get-credentials gke-us \ --region=us-central1 \ --project=PROJECT_ID gcloud container clusters get-credentials gke-eu \ --region=europe-west1 \ --project=PROJECT_ID
Kredensial disimpan secara lokal sehingga Anda dapat menggunakan klien kubectl untuk mengakses server API cluster. Secara default, nama yang dibuat secara otomatis akan dibuat untuk kredensial.
Ganti nama konteks cluster:
kubectl config rename-context gke_PROJECT_ID_us-central1_gke-us gke-us kubectl config rename-context gke_PROJECT_ID_europe-west1_gke-eu gke-eu
Mendaftarkan cluster ke fleet
Daftarkan cluster Anda ke fleet project Anda sebagai berikut.
Daftarkan cluster Anda:
gcloud container fleet memberships register gke-us \ --gke-cluster us-central1/gke-us \ --enable-workload-identity \ --project=PROJECT_ID gcloud container fleet memberships register gke-eu \ --gke-cluster europe-west1/gke-eu \ --enable-workload-identity \ --project=PROJECT_ID
Konfirmasi bahwa cluster Anda telah berhasil didaftarkan ke fleet:
gcloud container fleet memberships list --project=PROJECT_ID
Outputnya mirip dengan hal berikut ini:
NAME EXTERNAL_ID gke-us 0375c958-38af-11ea-abe9-42010a800191 gke-eu d3278b78-38ad-11ea-a846-42010a840114
Setelah mendaftarkan cluster, GKE akan men-deploy Pod gke-mcs-importer
ke cluster Anda.
Anda dapat mempelajari lebih lanjut cara mendaftarkan cluster di artikel Mendaftarkan cluster GKE ke fleet Anda.
Menentukan cluster konfigurasi
Cluster konfigurasi adalah cluster GKE yang Anda pilih untuk menjadi titik kontrol pusat Ingress di seluruh cluster anggota. Cluster ini harus sudah terdaftar untuk fleet. Untuk mengetahui informasi selengkapnya, lihat Desain cluster konfigurasi.
Aktifkan Multi Cluster Ingress dan pilih gke-us
sebagai cluster konfigurasi:
gcloud container fleet ingress enable \
--config-membership=gke-us \
--location=us-central1 \
--project=PROJECT_ID
Cluster konfigurasi memerlukan waktu hingga 15 menit untuk mendaftar. Output yang berhasil mirip dengan hal berikut ini:
Waiting for Feature to be created...done.
Waiting for controller to start...done.
Output yang tidak berhasil mirip dengan hal berikut ini:
Waiting for controller to start...failed.
ERROR: (gcloud.container.fleet.ingress.enable) Controller did not start in 2 minutes. Please use the `describe` command to check Feature state for debugging information.
Jika kegagalan terjadi di langkah sebelumnya, periksa status fitur:
gcloud container fleet ingress describe \
--project=PROJECT_ID
Output yang berhasil mirip dengan hal berikut ini:
createTime: '2021-02-04T14:10:25.102919191Z'
membershipStates:
projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
state:
code: ERROR
description: '...is not a VPC-native GKE Cluster.'
updateTime: '2021-08-10T13:58:50.298191306Z'
projects/PROJECT_ID/locations/global/memberships/CLUSTER_NAME:
state:
code: OK
updateTime: '2021-08-10T13:58:08.499505813Z'
Untuk mempelajari lebih lanjut cara memecahkan masalah error dengan Multi Cluster Ingress, lihat Pemecahan masalah dan operasi.
Dampak pada cluster aktif
Anda dapat mengaktifkan Multi Cluster Ingress dengan aman menggunakan gcloud container fleet ingress enable
di cluster aktif, karena tidak akan menyebabkan downtime atau memengaruhi traffic di cluster.
VPC Bersama
Anda dapat men-deploy resource MultiClusterIngress
untuk cluster di jaringan VPC Bersama, tetapi semua cluster GKE backend yang berpartisipasi harus berada dalam project yang sama. Memiliki cluster GKE di
project yang berbeda menggunakan VIP Cloud Load Balancing yang sama tidak didukung.
Dalam jaringan VPC non-Berbagi, pengontrol Multi Cluster Ingress mengelola aturan firewall agar health check dapat diteruskan dari load balancer ke beban kerja container.
Di jaringan VPC Bersama, administrator project host harus secara manual membuat aturan firewall untuk traffic load balancer mewakili pengontrol Ingress Multi Cluster.
Perintah berikut menunjukkan aturan firewall yang harus Anda buat jika cluster berada di jaringan VPC Bersama. Rentang sumber adalah rentang yang digunakan load balancer untuk mengirim traffic ke backend. Aturan ini harus ada selama masa aktif operasional resource MultiClusterIngress
.
Jika cluster berada di jaringan VPC Bersama, buat aturan firewall:
gcloud compute firewall-rules create FIREWALL_RULE_NAME \
--project=HOST_PROJECT \
--network=SHARED_VPC \
--direction=INGRESS \
--allow=tcp:0-65535 \
--source-ranges=130.211.0.0/22,35.191.0.0/16
Ganti kode berikut:
FIREWALL_RULE_NAME
: nama aturan firewall baru yang Anda pilih.HOST_PROJECT
: ID project host VPC Bersama.SHARED_VPC
: nama jaringan VPC bersama.
Masalah umum
Bagian ini menjelaskan masalah umum untuk Multi Cluster Ingress
InvalidValueError untuk kolom config_membership
Masalah umum mencegah Google Cloud CLI berinteraksi dengan Multi Cluster Ingress. Masalah ini diperkenalkan di versi 346.0.0 dan telah diperbaiki dalam versi 348.0.0. Sebaiknya jangan gunakan gcloud CLI versi 346.0.0 dan 347.0.0 dengan Multi Cluster Ingress.
Nilai tidak valid untuk kolom 'resource'
Google Cloud Armor tidak dapat berkomunikasi dengan cluster konfigurasi Multi Cluster Ingress yang berjalan pada versi GKE berikut:
- 1.18.19-gke.1400 dan yang lebih baru
- 1.19.10-gke.700 dan yang lebih baru
- 1.20.6-gke.700 dan yang lebih baru
Saat Anda mengonfigurasi kebijakan keamanan Google Cloud Armor, pesan berikut akan muncul:
Invalid value for field 'resource': '{"securityPolicy": "global/securityPolicies/"}': The given policy does not exist
Untuk menghindari masalah ini, upgrade cluster konfigurasi ke versi 1.21 atau yang lebih baru, atau gunakan perintah berikut untuk mengupdate BackendConfig CustomResourceDefinition
:
kubectl patch crd backendconfigs.cloud.google.com --type='json' -p='[{"op": "replace", "path": "/spec/versions/1/schema/openAPIV3Schema/properties/spec/properties/securityPolicy", "value":{"properties": {"name": {"type": "string"}}, "required": ["name" ],"type": "object"}}]'