Menyiapkan mesh hybrid atau multi-cloud
Halaman ini menjelaskan cara menyiapkan multi-cloud atau mesh hybrid untuk platform berikut:
- Hybrid: GKE di Google Cloud dan GKE di VMware (pratinjau)
- Hybrid: GKE di Google Cloud dan GKE di Bare Metal (pratinjau)
- Multi-cloud: GKE di Google Cloud dan Amazon EKS (pratinjau)
Prasyarat
- Semua cluster harus didaftarkan ke project host armada yang sama.
- Semua cluster GKE harus berada dalam konfigurasi VPC bersama di jaringan yang sama.
- Alamat bidang kontrol Kubernetes cluster dan alamat gateway harus dapat dijangkau dari setiap cluster dalam mesh. Project Google Cloud tempat cluster GKE berada harus diizinkan untuk membuat jenis load balancing eksternal. Sebaiknya gunakan jaringan yang diizinkan dan aturan firewall VPC untuk membatasi akses.
- Cluster pribadi, termasuk cluster pribadi GKE, tidak didukung. Jika Anda menggunakan cluster On-Premises, seperti GKE di VMware dan GKE di Bare Metal, alamat bidang kontrol Kubernetes dan alamat gateway harus dapat dijangkau dari pod di cluster GKE. Sebaiknya gunakan CloudVPN untuk menghubungkan subnet cluster GKE dengan jaringan cluster On-Premises.
- Jika Anda menggunakan Istio CA, gunakan root certificate kustom yang sama untuk semua cluster.
Sebelum memulai
Panduan ini mengasumsikan bahwa Anda telah menginstal Anthos Service Mesh menggunakan alat asmcli
. Anda memerlukan
asmcli
dan paket konfigurasi yang didownload oleh asmcli
ke direktori
yang Anda tentukan dalam --output_dir saat menjalankan asmcli install
. Untuk mengetahui informasi
selengkapnya, lihat
Menginstal alat dependen dan memvalidasi cluster
untuk:
- Instal alat yang diperlukan
- Download asmcli
- Memberikan izin admin cluster
- Memvalidasi project dan cluster
Anda memerlukan akses ke file kubeconfig untuk semua cluster yang Anda
siapkan di mesh. Untuk cluster GKE, agar dapat membuat file kubeconfig baru untuk cluster, Anda dapat mengekspor env KUBECONFIG
dengan jalur lengkap file sebagai nilai di terminal Anda dan membuat entri kubeconfig.
Menyiapkan variabel dan placeholder lingkungan
Anda memerlukan variabel lingkungan berikut saat menginstal gateway timur-barat.
Buat variabel lingkungan untuk nomor project. Dalam perintah berikut, ganti FLEET_PROJECT_ID dengan project ID dari project host armada.
export PROJECT_NUMBER=$(gcloud projects describe FLEET_PROJECT_ID --format="value(projectNumber)")
Buat variabel lingkungan untuk ID mesh.
export MESH_ID="proj-${PROJECT_NUMBER}"
Buat variabel lingkungan untuk nama jaringan.
Secara default, cluster GKE menggunakan nama jaringan cluster:
ekspor NETWORK_1="PROJECT_ID-CLUSTER_NETWORK"
Cluster lain menggunakan
default
:ekspor NETWORK_2="default"
Perlu diketahui bahwa jika Anda menginstal Anthos Service Mesh di cluster lain dengan nilai yang berbeda untuk
--network_id
, Anda harus meneruskan nilai yang sama ke nilai yang sama ke NETWORK_2.
Menginstal gateway timur-barat
Instal gateway di CLUSTER_1 (cluster GKE Anda) yang dikhususkan untuk traffic timur-barat ke CLUSTER_2 (cluster multi-cloud atau lokal):
asm/istio/expansion/gen-eastwest-gateway.sh \ --mesh ${MESH_ID} \ --network ${NETWORK_1} \ --revision asm-1157-23 | \ ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 install -y -f -
Perlu diketahui bahwa gateway ini bersifat publik di Internet secara default. Sistem produksi mungkin memerlukan pembatasan akses tambahan, misalnya aturan firewall, untuk mencegah serangan eksternal.
Instal gateway di CLUSTER_2 yang dikhususkan untuk traffic timur-barat untuk CLUSTER_1.
asm/istio/expansion/gen-eastwest-gateway.sh \ --mesh ${MESH_ID} \ --network ${NETWORK_2} \ --revision asm-1157-23 | \ ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_2 install -y -f -
Mengekspos layanan
Karena cluster berada di jaringan terpisah, Anda harus mengekspos semua layanan
(\*.local
) di gateway timur-barat pada kedua cluster. Meskipun gateway ini bersifat publik di internet, layanan di belakangnya hanya dapat diakses oleh layanan yang memiliki sertifikat mTLS dan ID workload tepercaya, seolah-olah berada di jaringan yang sama.
Mengekspos layanan melalui gateway timur-barat untuk setiap cluster
kubectl --kubeconfig=PATH_TO_KUBECONFIG_1 apply -n istio-system -f \
asm/istio/expansion/expose-services.yaml
kubectl --kubeconfig=PATH_TO_KUBECONFIG_2 apply -n istio-system -f \
asm/istio/expansion/expose-services.yaml
Aktifkan penemuan endpoint
Jalankan perintah asmcli create-mesh
untuk mengaktifkan penemuan endpoint. Contoh ini hanya menampilkan dua cluster, tetapi Anda dapat menjalankan perintah untuk mengaktifkan penemuan endpoint pada cluster tambahan, sesuai dengan batas layanan GKE Hub.
./asmcli create-mesh \
FLEET_PROJECT_ID \
PATH_TO_KUBECONFIG_1 \
PATH_TO_KUBECONFIG_2
Memverifikasi konektivitas multi-cluster
Bagian ini menjelaskan cara men-deploy sampel layanan HelloWorld
dan Sleep
ke lingkungan multi-cluster Anda untuk memverifikasi bahwa load balancing
lintas cluster berfungsi.
Aktifkan injeksi file bantuan
Temukan nilai label revisi yang akan Anda gunakan di langkah-langkah berikutnya. Langkah ini bergantung pada jenis Anthos Service Mesh Anda (baik terkelola atau dalam cluster).
Terkelola
Gunakan perintah berikut untuk menemukan label revisi, yang akan Anda gunakan di langkah selanjutnya.
kubectl get controlplanerevision -n istio-system
Outputnya terlihat mirip dengan yang berikut ini:
NAME RECONCILED STALLED AGE asm-managed-rapid True False 89d
Dalam output, di kolom
NAME
, catat nilai label revisi. Dalam contoh ini, nilainya adalahasm-managed-rapid
. Gunakan nilai revisi pada langkah-langkah di bagian berikutnya.Dalam cluster
Gunakan perintah berikut untuk menemukan label revisi, yang akan Anda gunakan di langkah selanjutnya.
kubectl -n istio-system get pods -l app=istiod --show-labels
Outputnya terlihat mirip dengan yang berikut ini:
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-173-3-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-173-3,istio=istiod,pod-template-hash=5788d57586 istiod-asm-173-3-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-173-3,istio=istiod,pod-template-hash=5788d57586
Pada output, di kolom
LABELS
, catat nilai label revisiistiod
, yang mengikuti awalanistio.io/rev=
. Dalam contoh ini, nilainya adalahasm-173-3
. Gunakan nilai revisi di langkah-langkah di bagian berikutnya.
Menginstal layanan HelloWorld
Buat contoh namespace dan Definisi Layanan di setiap cluster. Dalam perintah berikut, ganti REVISION dengan label revisi
istiod
yang Anda catat dari langkah sebelumnya.for CTX in ${CTX_1} ${CTX_2} do kubectl create --context=${CTX} namespace sample kubectl label --context=${CTX} namespace sample \ istio-injection- istio.io/rev=REVISION --overwrite done
dengan REVISION adalah label revisi
istiod
yang sebelumnya Anda catat.Output-nya adalah:
label "istio-injection" not found. namespace/sample labeled
Anda dapat mengabaikan
label "istio-injection" not found.
dengan amanBuat layanan HelloWorld di kedua cluster:
kubectl create --context=${CTX_1} \ -f ${SAMPLES_DIR}/samples/helloworld/helloworld.yaml \ -l service=helloworld -n sample
kubectl create --context=${CTX_2} \ -f ${SAMPLES_DIR}/samples/helloworld/helloworld.yaml \ -l service=helloworld -n sample
Men-deploy HelloWorld v1 dan v2 ke setiap cluster
Deploy
HelloWorld v1
keCLUSTER_1
danv2
keCLUSTER_2
, yang nantinya akan membantu memverifikasi load balancing lintas cluster:kubectl create --context=${CTX_1} \ -f ${SAMPLES_DIR}/samples/helloworld/helloworld.yaml \ -l version=v1 -n sample
kubectl create --context=${CTX_2} \ -f ${SAMPLES_DIR}/samples/helloworld/helloworld.yaml \ -l version=v2 -n sample
Pastikan
HelloWorld v1
danv2
berjalan menggunakan perintah berikut. Pastikan outputnya mirip dengan yang ditunjukkan.:kubectl get pod --context=${CTX_1} -n sample
NAME READY STATUS RESTARTS AGE helloworld-v1-86f77cd7bd-cpxhv 2/2 Running 0 40s
kubectl get pod --context=${CTX_2} -n sample
NAME READY STATUS RESTARTS AGE helloworld-v2-758dd55874-6x4t8 2/2 Running 0 40s
Men-deploy layanan Tidur
Deploy layanan
Sleep
ke kedua cluster. Pod ini menghasilkan traffic jaringan buatan untuk tujuan demonstrasi:for CTX in ${CTX_1} ${CTX_2} do kubectl apply --context=${CTX} \ -f ${SAMPLES_DIR}/samples/sleep/sleep.yaml -n sample done
Tunggu hingga layanan
Sleep
dimulai di setiap cluster. Pastikan outputnya mirip dengan yang ditampilkan:kubectl get pod --context=${CTX_1} -n sample -l app=sleep
NAME READY STATUS RESTARTS AGE sleep-754684654f-n6bzf 2/2 Running 0 5s
kubectl get pod --context=${CTX_2} -n sample -l app=sleep
NAME READY STATUS RESTARTS AGE sleep-754684654f-dzl9j 2/2 Running 0 5s
Memverifikasi load balancing lintas cluster
Panggil layanan HelloWorld
beberapa kali dan periksa output untuk memverifikasi
balasan alternatif dari v1 dan v2:
Panggil layanan
HelloWorld
:kubectl exec --context="${CTX_1}" -n sample -c sleep \ "$(kubectl get pod --context="${CTX_1}" -n sample -l \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \ -- /bin/sh -c 'for i in $(seq 1 20); do curl -sS helloworld.sample:5000/hello; done'
Outputnya akan mirip dengan yang ditunjukkan:
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8 Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv ...
Panggil layanan
HelloWorld
lagi:kubectl exec --context="${CTX_2}" -n sample -c sleep \ "$(kubectl get pod --context="${CTX_2}" -n sample -l \ app=sleep -o jsonpath='{.items[0].metadata.name}')" \ -- /bin/sh -c 'for i in $(seq 1 20); do curl -sS helloworld.sample:5000/hello; done'
Outputnya akan mirip dengan yang ditunjukkan:
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8 Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv ...
Selamat, Anda telah memverifikasi Anthos Service Mesh multi-cluster Anda yang di-load balanced.
Pembersihan
Setelah selesai memverifikasi load balancing, hapus layanan HelloWorld
dan Sleep
dari cluster Anda.
kubectl delete ns sample --context ${CTX_1} kubectl delete ns sample --context ${CTX_2}