Menambahkan cluster GKE ke Anthos Service Mesh

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.
    • Jika cluster Anda berada dalam project yang sama, lihat Ringkasan penginstalan untuk menginstal atau mengupgrade cluster ke versi yang diperlukan.
    • Jika cluster Anda berada dalam project yang berbeda, lihat Penginstalan dan migrasi multi-project untuk menginstal atau mengupgrade cluster 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.
  • Jika Anthos Service Mesh Anda di-build di cluster pribadi, sebaiknya buat satu subnet di VPC yang sama. Jika tidak, Anda harus memastikan bahwa:
    1. Pesawat kontrol dapat menjangkau bidang kontrol cluster pribadi jarak jauh melalui IP pribadi cluster.
    2. Anda dapat menambahkan rentang IP bidang kontrol panggilan ke jaringan yang diizinkan cluster pribadi jarak jauh. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi penemuan endpoint antara cluster pribadi.

Menetapkan variabel project dan cluster

  1. 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
  2. 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

  1. 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 revisi istiod, yang mengikuti awalan istio.io/rev=. Dalam contoh ini, nilainya adalah asm-173-3. Gunakan nilai revisi di langkah-langkah di bagian berikutnya.

Menginstal layanan HelloWorld

Buat contoh namespace dan Definisi Layanan di setiap cluster.

  1. Buat contoh namespace di setiap cluster:

    kubectl create --context=${CTX_1} namespace sample
    
    kubectl create --context=${CTX_2} namespace sample
    
  2. Timpa label revisi:

    kubectl label --context=${CTX_1} namespace sample \
          istio-injection- istio.io/rev=REVISION --overwrite
    
    kubectl label --context=${CTX_2} namespace sample \
      istio-injection- istio.io/rev=REVISION --overwrite
    

    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 aman

  3. Buat layanan HelloWorld di kedua cluster:

    kubectl create --context=${CTX_1} \
        -f ${PROJECT_DIR}/samples/helloworld/helloworld.yaml \
        -l service=helloworld -n sample
    
    kubectl create --context=${CTX_2} \
        -f ${PROJECT_DIR}/samples/helloworld/helloworld.yaml \
        -l service=helloworld -n sample
    

Men-deploy HelloWorld v1 dan v2 ke setiap cluster

  1. Deploy HelloWorld v1 ke CLUSTER_1 dan v2 ke CLUSTER_2, yang nantinya akan membantu memverifikasi load balancing lintas cluster:

    kubectl create --context=${CTX_1} \
      -f ${PROJECT_DIR}/samples/helloworld/helloworld.yaml \
      -l version=v1 -n sample
    kubectl create --context=${CTX_2} \
      -f ${PROJECT_DIR}/samples/helloworld/helloworld.yaml \
      -l version=v2 -n sample
  2. Pastikan HelloWorld v1 dan v2 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

  1. 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
  2. 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:

  1. 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}')" \
        -- curl -sS helloworld.sample:5000/hello
    

    Outputnya akan mirip dengan yang ditunjukkan:

    Hello version: v2, instance: helloworld-v2-758dd55874-6x4t8
    Hello version: v1, instance: helloworld-v1-86f77cd7bd-cpxhv
    ...
  2. 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}')" \
        -- curl -sS helloworld.sample:5000/hello
    

    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.

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}