Menyiapkan mesh multi-cluster di luar Google Cloud
Panduan ini menjelaskan cara menyiapkan mesh multi-cluster untuk hal berikut platform:
- Google Distributed Cloud
- Google Distributed Cloud
- GKE on Azure
- GKE on AWS
- Cluster terpasang, termasuk cluster Amazon EKS dan cluster Microsoft AKS
Panduan ini menunjukkan cara menyiapkan dua klaster, tetapi Anda dapat memperluas proses ini ke menggabungkan sejumlah cluster ke dalam {i>mesh<i} Anda.
Sebelum memulai
Panduan ini mengasumsikan Anda telah menginstal Cloud Service Mesh menggunakan
asmcli install
Anda perlu
asmcli
dan paket konfigurasi yang didownload asmcli
ke
yang Anda tentukan di --output_dir
saat menjalankan asmcli install
.
Jika perlu melakukan penyiapan, ikuti langkah-langkah di
Menginstal alat dependen dan memvalidasi cluster
menjadi:
- Menginstal alat yang diperlukan
- Download
asmcli
- Memberikan izin admin cluster
- Memvalidasi project dan cluster
Anda memerlukan akses ke file {i>kubeconfig<i} untuk semua cluster yang disiapkan di jala.
Menyiapkan placeholder dan variabel lingkungan
Anda memerlukan variabel lingkungan berikut saat menginstal lapisan east-west gateway.
Buat variabel lingkungan untuk nomor project. Dalam , ganti FLEET_PROJECT_ID dengan project ID dari project host perangkat.
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 cluster dalam format yang
asmcli
memerlukan.export CLUSTER_1="cn-FLEET_PROJECT_ID-global-CLUSTER_NAME_1" export CLUSTER_2="cn-FLEET_PROJECT_ID-global-CLUSTER_NAME_2"
Dapatkan nama konteks untuk cluster dengan menggunakan nilai di bawah kolom
NAME
dalam output perintah ini:kubectl config get-contexts
Menetapkan variabel lingkungan ke nama konteks cluster, yang akan disertakan dalam panduan ini gunakan dalam banyak langkah:
export CTX_1=CLUSTER1_CONTEXT_NAME export CTX_2=CLUSTER2_CONTEXT_NAME
Menginstal gateway east-west
Dalam perintah berikut:
Ganti
CLUSTER_NAME_1
danCLUSTER_NAME_2
dengan nama cluster Anda.Ganti
PATH_TO_KUBECONFIG_1
danPATH_TO_KUBECONFIG_2
dengan file kubeconfig untuk ke cluster Anda.
Cluster Anthos
Mesh CA atau CA Service
Instal gateway di cluster1 yang dikhususkan untuk lalu lintas timur-barat ke
$CLUSTER_2
. Secara default, gateway ini akan bersifat publik di Internet. Sistem produksi mungkin memerlukan batasan akses tambahan, untuk contoh aturan {i>firewall<i}, untuk mencegah serangan eksternal.asm/istio/expansion/gen-eastwest-gateway.sh \ --mesh ${MESH_ID} \ --cluster ${CLUSTER_1} \ --network default \ --revision asm-1204-0 | \ ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 \ install -y --set spec.values.global.pilotCertProvider=kubernetes -f -
Instal gateway di
$CLUSTER_2
yang dikhususkan untuk traffic timur-barat untuk$CLUSTER_1
.asm/istio/expansion/gen-eastwest-gateway.sh \ --mesh ${MESH_ID} \ --cluster ${CLUSTER_2} \ --network default \ --revision asm-1204-0 | \ ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_2 \ install -y --set spec.values.global.pilotCertProvider=kubernetes -f -
Istio CA
Instal gateway di cluster1 yang dikhususkan untuk lalu lintas timur-barat ke
$CLUSTER_2
. Secara default, gateway ini akan bersifat publik di Internet. Sistem produksi mungkin memerlukan batasan akses tambahan, untuk contoh aturan {i>firewall<i}, untuk mencegah serangan eksternal.asm/istio/expansion/gen-eastwest-gateway.sh \ --mesh ${MESH_ID} \ --cluster ${CLUSTER_1} \ --network default \ --revision asm-1204-0 | \ ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 \ install -y --set spec.values.global.pilotCertProvider=istiod -f -
Instal gateway di
$CLUSTER_2
yang dikhususkan untuk traffic timur-barat untuk$CLUSTER_1
.asm/istio/expansion/gen-eastwest-gateway.sh \ --mesh ${MESH_ID} \ --cluster ${CLUSTER_2} \ --network default \ --revision asm-1204-0 | \ ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_2 \ install -y --set spec.values.global.pilotCertProvider=istiod -f -
Azure, AWS, & Terlampir
Jaring CA
Instal gateway di cluster1 yang dikhususkan untuk lalu lintas timur-barat ke
$CLUSTER_2
. Secara default, gateway ini akan bersifat publik di Internet. Sistem produksi mungkin memerlukan batasan akses tambahan, untuk contoh aturan {i>firewall<i}, untuk mencegah serangan eksternal.asm/istio/expansion/gen-eastwest-gateway.sh \ --mesh ${MESH_ID} \ --cluster ${CLUSTER_1} \ --network default \ --revision asm-1204-0 | \ ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 \ install -y --set spec.values.global.pilotCertProvider=istiod -f -
Instal gateway di
$CLUSTER_2
yang dikhususkan untuk traffic timur-barat untuk$CLUSTER_1
.asm/istio/expansion/gen-eastwest-gateway.sh \ --mesh ${MESH_ID} \ --cluster ${CLUSTER_2} \ --network default \ --revision asm-1204-0 | \ ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_2 \ install -y --set spec.values.global.pilotCertProvider=istiod -f -
Istio CA
Instal gateway di cluster1 yang dikhususkan untuk lalu lintas timur-barat ke
$CLUSTER_2
. Secara default, gateway ini akan bersifat publik di Internet. Sistem produksi mungkin memerlukan batasan akses tambahan, untuk contoh aturan {i>firewall<i}, untuk mencegah serangan eksternal.asm/istio/expansion/gen-eastwest-gateway.sh \ --mesh ${MESH_ID} \ --cluster ${CLUSTER_1} \ --network default \ --revision asm-1204-0 | \ ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_1 \ install -y --set spec.values.global.pilotCertProvider=istiod -f -
Instal gateway di
$CLUSTER_2
yang dikhususkan untuk traffic timur-barat untuk$CLUSTER_1
.asm/istio/expansion/gen-eastwest-gateway.sh \ --mesh ${MESH_ID} \ --cluster ${CLUSTER_2} \ --network default \ --revision asm-1204-0 | \ ./istioctl --kubeconfig=PATH_TO_KUBECONFIG_2 \ install -y --set spec.values.global.pilotCertProvider=istiod -f -
Layanan yang menampakkan
Karena cluster berada di jaringan terpisah, Anda perlu mengekspos semua layanan
(*.local
) di gateway timur-barat di kedua cluster. Meskipun gateway ini
publik di Internet, layanan di belakangnya hanya
dapat diakses oleh layanan dengan
sertifikat mTLS yang tepercaya dan ID beban kerja, seolah-olah berada di
jaringan.
Mengekspos layanan melalui gateway timur-barat untuk
CLUSTER_NAME_1
.kubectl --kubeconfig=PATH_TO_KUBECONFIG_1 apply -n istio-system -f \ asm/istio/expansion/expose-services.yaml
Mengekspos layanan melalui gateway timur-barat untuk
CLUSTER_NAME_2
.kubectl --kubeconfig=PATH_TO_KUBECONFIG_2 apply -n istio-system -f \ asm/istio/expansion/expose-services.yaml
Mengaktifkan penemuan endpoint
Jalankan perintah asmcli create-mesh
untuk mengaktifkan penemuan endpoint. Ini
contoh hanya menunjukkan dua klaster, tetapi Anda dapat menjalankan perintah untuk mengaktifkan
penemuan endpoint pada cluster tambahan,
Batas layanan GKE Hub.
./asmcli create-mesh \
FLEET_PROJECT_ID \
PATH_TO_KUBECONFIG_1 \
PATH_TO_KUBECONFIG_2
Memverifikasi konektivitas multicluster
Bagian ini menjelaskan cara men-deploy contoh layanan HelloWorld
dan Sleep
ke lingkungan multi-cluster Anda untuk memverifikasi bahwa beban lintas cluster
cara kerja balancing.
Aktifkan injeksi file bantuan
Temukan nilai label revisi, yang Anda gunakan di langkah-langkah berikutnya.
Gunakan perintah berikut untuk menemukan label revisi, yang akan gunakan di langkah-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 bawah kolom LABELS
, perhatikan nilai istiod
label revisi, yang mengikuti awalan istio.io/rev=
. Dalam contoh ini,
nilainya adalah asm-173-3
. Gunakan nilai revisi pada langkah-langkah di bagian berikutnya.
Menginstal layanan HelloWorld
Buat contoh namespace dan Service Definition di setiap cluster. Di beberapa perintah berikut, ganti REVISION dengan
istiod
label revisi 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 dicatat.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 output mirip dengan yang ditampilkan.: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 output 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 outputnya 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 mirip dengan yang ditampilkan:
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 mirip dengan yang ditampilkan:
Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8 Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv ...
Selamat, Anda telah memverifikasi Cloud Service Mesh multi-cluster dengan load balancing.
Pembersihan
Setelah Anda selesai memverifikasi load balancing, hapus HelloWorld
dan Sleep
dari cluster Anda.
kubectl delete ns sample --context ${CTX_1} kubectl delete ns sample --context ${CTX_2}