Panduan ini menjelaskan cara menggabungkan dua cluster ke dalam satu Anthos Service Mesh menggunakan Mesh CA atau Citadel, dan mengaktifkan load balancing lintas cluster. Anda dapat dengan mudah memperluas proses ini untuk menggabungkan sejumlah cluster ke dalam mesh Anda.
Konfigurasi Anthos Service Mesh multi-cluster dapat menyelesaikan beberapa skenario perusahaan penting, seperti skala, lokasi, dan isolasi. Untuk mengetahui informasi selengkapnya, lihat Kasus penggunaan multi-cluster. Selain itu, Anda harus mengoptimalkan aplikasi untuk mendapatkan manfaat maksimal dari mesh layanan. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan aplikasi untuk Anthos Service Mesh.
Prasyarat
Panduan ini mengasumsikan bahwa Anda memiliki dua atau lebih cluster Google Cloud GKE yang memenuhi persyaratan berikut:
- Anthos Service Mesh versi 1.6.8 atau yang lebih baru diinstal di cluster. Lihat Ringkasan penginstalan untuk menginstal atau mengupgrade cluster Anda ke versi yang diperlukan.
- Jika Anda bergabung dengan cluster yang tidak berada dalam project yang sama, cluster tersebut harus diinstal
menggunakan profil
asm-gcp-multiproject
dan cluster harus berada dalam konfigurasi VPC bersama bersama di jaringan yang sama. Selain itu, sebaiknya Anda memiliki satu project untuk menghosting VPC bersama, dan dua project layanan untuk membuat cluster. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan cluster dengan VPC Bersama. - Jika Anda menggunakan Citadel CA, gunakan root CA kustom yang sama untuk kedua cluster.
Menetapkan variabel project dan cluster
Tetapkan folder kerja untuk memudahkan Anda. Ini adalah folder tempat Anda mendownload dan mengekstrak file Anthos Service Mesh dalam langkah prasyarat, Preparing to install Anthos Service Mesh.
export PROJECT_DIR=YOUR_WORKING_FOLDER
Buat variabel konteks untuk setiap cluster. Konteksnya adalah string yang dibuat dari ID project cluster, nama cluster, dan lokasi. Untuk nilai lokasi, gunakan lokasi cluster, misalnya
us-west2-a
. Dalam contoh ini, mesh sudah berisi satu cluster dan Anda menambahkan cluster lain ke mesh:export CTX_1=gke_CLUSTER_1_PROJECT_ID_CLUSTER_1_LOCATION_CLUSTER_1_NAME export CTX_2=gke_CLUSTER_2_PROJECT_ID_CLUSTER_2_LOCATION_CLUSTER_2_NAME
Mengonfigurasi penemuan endpoint antar-cluster
Konfigurasikan penemuan endpoint untuk load balancing lintas cluster menggunakan perintah berikut. Langkah ini melakukan tugas berikut:
- Perintah
istioctl
membuat rahasia yang memberikan akses ke Server API Kube untuk cluster. - Perintah
kubectl
menerapkan rahasia ke cluster lain, sehingga cluster kedua dapat membaca endpoint layanan dari cluster pertama.
istioctl x create-remote-secret --context=${CTX_1} --name=${CLUSTER_1_NAME} | \ kubectl apply -f - --context=${CTX_2}
istioctl x create-remote-secret --context=${CTX_2} --name=${CLUSTER_2_NAME} | \ kubectl apply -f - --context=${CTX_1}
Memverifikasi deployment Anda
Bagian ini menjelaskan cara men-deploy sampel layanan HelloWorld
ke lingkungan multi-cluster Anda untuk memverifikasi bahwa load balancing lintas cluster berfungsi.
Aktifkan injeksi file bantuan
Gunakan perintah berikut untuk menemukan nilai label revisi dari layanan
istiod
, yang akan Anda gunakan di langkah-langkah berikutnya.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 kubectl create --context=${CTX} \ -f ${PROJECT_DIR}/samples/helloworld/helloworld.yaml \ -l app=helloworld -n sample done
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 ${PROJECT_DIR}/samples/helloworld/helloworld.yaml \ -l app=helloworld -l version=v1 -n sample
kubectl create --context=${CTX_2} \ -f ${PROJECT_DIR}/samples/helloworld/helloworld.yaml \ -l app=helloworld -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 ${PROJECT_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:
kubectl exec --context=${CTX_1} -it -n sample -c sleep \ $(kubectl get pod --context=${CTX_1} -n sample -l \ app=sleep -o jsonpath='{.items[0].metadata.name}') -- curl \ helloworld.sample:5000/hello
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8 Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv ...
kubectl exec --context=${CTX_2} -it -n sample -c sleep \ $(kubectl get pod --context=${CTX_2} -n sample -l \ app=sleep -o jsonpath='{.items[0].metadata.name}') -- curl \ helloworld.sample:5000/hello
Pastikan outputnya mirip dengan yang ditampilkan:
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.
Bersihkan layanan HelloWorld
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}