Bermigrasi dari Istio ke Anthos Service Mesh

Halaman ini adalah bagian dari panduan multi-halaman yang menjelaskan cara bermigrasi dari Istio 1.8 or 1.9 ke Anthos Service Mesh versi 1.9.8 di cluster GKE untuk mesh yang berisi beberapa cluster yang berada di project Google Cloud yang berbeda. Jika memiliki Istio versi sebelumnya, Anda harus mengupgrade terlebih dahulu sebelum bermigrasi ke Anthos Service Mesh. Jika Anda perlu melakukan upgrade, buka halaman Upgrade Istio di versi Istio yang berlaku. Perlu diperhatikan bahwa Mengupgrade Istio di lebih dari satu versi minor (misalnya, 1,6.x hingga 1,8.x) dalam satu langkah tidak diuji atau direkomendasikan secara resmi.

Untuk migrasi pada mesh cluster tunggal atau untuk mesh yang berisi beberapa cluster dalam project Google Cloud yang sama, lihat Penginstalan, migrasi, dan upgrade untuk GKE.

Sebelum memulai

Sebelum menginstal Anthos Service Mesh, pastikan Anda memiliki:

Mempersiapkan migrasi

Pastikan untuk meninjau Mempersiapkan migrasi dari Istio.

Untuk bermigrasi dari Istio, Anda harus mengikuti proses upgrade revisi (disebut sebagai upgrade "canary" dalam dokumentasi Istio). Dengan upgrade berbasis revisi, Anda menginstal revisi baru pada bidang kontrol bersama dengan bidang kontrol yang ada. Saat menjalankan istioctl install, Anda menyertakan opsi untuk menetapkan label revision yang mengidentifikasi bidang kontrol baru.

Kemudian, Anda bermigrasi ke versi baru dengan menetapkan label revision yang sama pada beban kerja dan melakukan mulai ulang berkelanjutan untuk memasukkan ulang proxy dengan versi dan konfigurasi Anthos Service Mesh yang baru. Dengan pendekatan ini, Anda dapat memantau efek upgrade pada sebagian kecil workload Anda. Setelah menguji aplikasi, Anda dapat memigrasikan semua traffic ke revisi baru. Pendekatan ini jauh lebih aman daripada melakukan upgrade langsung, karena bidang kontrol baru akan langsung menggantikan versi bidang kontrol sebelumnya.

Menetapkan kredensial dan izin

  1. Lakukan inisialisasi project Anda agar siap untuk diinstal. Di antara hal lainnya, perintah ini membuat akun layanan yang memungkinkan komponen bidang kontrol, seperti proxy sidecar, mengakses data dan resource project Anda dengan aman.

    curl --request POST \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --data '' \
      "https://meshconfig.googleapis.com/v1alpha1/projects/${PROJECT_ID}:initialize"

    Perintah ini merespons dengan tanda kurung kurawal kosong: {}

  2. Dapatkan kredensial autentikasi untuk berinteraksi dengan cluster. Perintah ini juga menetapkan konteks saat ini untuk kubectl ke cluster.

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
        --project=${PROJECT_ID}
    
  3. Berikan izin admin cluster kepada pengguna saat ini. Anda memerlukan izin ini guna membuat aturan role-based access control (RBAC) yang diperlukan untuk Anthos Service Mesh.

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user="$(gcloud config get-value core/account)"

Jika melihat error "cluster-admin-binding" already exists, Anda dapat mengabaikannya dengan aman dan melanjutkan dengan cluster-admin-binding yang ada.

Mendownload file penginstalan

Linux

  1. Download file penginstalan Anthos Service Mesh ke direktori kerja saat ini:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-linux-amd64.tar.gz
  2. Download file tanda tangan dan gunakan openssl untuk memverifikasi tanda tangan:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.9.8-asm.6-linux-amd64.tar.gz.1.sig istio-1.9.8-asm.6-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    Output yang diharapkan adalah: Verified OK.

  3. Ekstrak konten file ke lokasi mana saja di sistem file Anda. Misalnya, untuk mengekstrak konten ke direktori kerja saat ini:

     tar xzf istio-1.9.8-asm.6-linux-amd64.tar.gz

    Perintah tersebut membuat direktori penginstalan di direktori kerja saat ini bernama istio-1.9.8-asm.6 yang berisi:

    • Contoh aplikasi di direktori samples.
    • Alat command line istioctl yang Anda gunakan untuk menginstal Anthos Service Mesh ada di direktori bin.
    • Profil konfigurasi Anthos Service Mesh berada di direktori manifests/profiles.
  4. Pastikan Anda berada di direktori utama penginstalan Anthos Service Mesh.

    cd istio-1.9.8-asm.6

Mac OS

  1. Download file penginstalan Anthos Service Mesh ke direktori kerja Anda saat ini:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-osx.tar.gz
  2. Download file tanda tangan dan gunakan openssl untuk memverifikasi tanda tangan:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.9.8-asm.6-osx.tar.gz.1.sig istio-1.9.8-asm.6-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    Output yang diharapkan adalah: Verified OK.

  3. Ekstrak konten file ke lokasi mana saja di sistem file Anda. Misalnya, untuk mengekstrak konten ke direktori kerja saat ini:

    tar xzf istio-1.9.8-asm.6-osx.tar.gz

    Perintah tersebut membuat direktori penginstalan di direktori kerja saat ini bernama istio-1.9.8-asm.6 yang berisi:

    • Contoh aplikasi di direktori samples.
    • Alat command line istioctl yang Anda gunakan untuk menginstal Anthos Service Mesh ada di direktori bin.
    • Profil konfigurasi Anthos Service Mesh berada di direktori manifests/profiles.
  4. Pastikan Anda berada di direktori utama penginstalan Anthos Service Mesh.

    cd istio-1.9.8-asm.6

Windows

  1. Download file penginstalan Anthos Service Mesh ke direktori kerja Anda saat ini:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-win.zip
  2. Download file tanda tangan dan gunakan openssl untuk memverifikasi tanda tangan:

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.9.8-asm.6-win.zip.1.sig istio-1.9.8-asm.6-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    Output yang diharapkan adalah: Verified OK.

  3. Ekstrak konten file ke lokasi mana saja di sistem file Anda. Misalnya, untuk mengekstrak konten ke direktori kerja saat ini:

    tar xzf istio-1.9.8-asm.6-win.zip

    Perintah tersebut membuat direktori penginstalan di direktori kerja saat ini bernama istio-1.9.8-asm.6 yang berisi:

    • Contoh aplikasi di direktori samples.
    • Alat command line istioctl yang Anda gunakan untuk menginstal Anthos Service Mesh ada di direktori bin.
    • Profil konfigurasi Anthos Service Mesh berada di direktori manifests/profiles.
  4. Pastikan Anda berada di direktori utama penginstalan Anthos Service Mesh.

    cd istio-1.9.8-asm.6

Mempersiapkan file konfigurasi resource

Saat menjalankan perintah istioctl install, Anda menentukan -f istio-operator.yaml pada command line. File ini berisi informasi tentang project dan cluster yang diperlukan Anthos Service Mesh. Anda harus mendownload paket yang berisi istio-operator.yaml dan file konfigurasi resource lainnya agar dapat menetapkan informasi project dan cluster.

Untuk menyiapkan file konfigurasi resource:

Mesh CA

  1. Buat direktori baru untuk file konfigurasi resource paket Anthos Service Mesh. Sebaiknya gunakan nama cluster sebagai nama direktori.

  2. Ubah ke direktori tempat Anda ingin mendownload paket Anthos Service Mesh.

  3. Verifikasi versi kpt. Pastikan Anda menjalankan kpt versi sebelum 1.x:

    kpt version
    

    Outputnya akan mirip dengan berikut ini:

    0.39.2

    Jika Anda memiliki kpt versi 1.x atau yang lebih baru, lihat Menyiapkan lingkungan untuk mendownload versi yang diperlukan untuk sistem operasi Anda.

  4. Download paket:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.9-asm asm
    
  5. Tetapkan project ID untuk project tempat cluster dibuat:

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  6. Tetapkan nomor project untuk project host fleet:

    kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
    
  7. Tetapkan nama cluster:

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  8. Tetapkan zona atau region default:

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  9. Setel tag ke versi Anthos Service Mesh yang Anda instal:

    kpt cfg set asm anthos.servicemesh.tag 1.9.8-asm.6
    
  10. Tetapkan revisi di file konfigurasi resource paket Anthos Service Mesh:

    kpt cfg set asm anthos.servicemesh.rev asm-198-6
    

    Saat menginstal Anthos Service Mesh, Anda menetapkan label revisi pada istiod. Anda harus menetapkan revisi yang sama pada webhook validasi.

  11. Karena cluster dalam konfigurasi multi-cluster Anda berada dalam project yang berbeda, Anda perlu mengonfigurasi alias domain tepercaya untuk project lain yang akan membentuk mesh layanan multi-cluster/multi-project.

    1. Dapatkan project ID dari semua cluster yang akan berada di mesh multi-cluster/multi-project.

    2. Untuk setiap project ID cluster, tetapkan alias domain kepercayaan. Misalnya, jika Anda memiliki cluster di 3 project, jalankan perintah berikut dan ganti PROJECT_ID_1, PROJECT_ID_2, dan PROJECT_ID_3 dengan project ID setiap cluster.

      kpt cfg set asm anthos.servicemesh.trustDomainAliases PROJECT_ID_1.svc.id.goog PROJECT_ID_2.svc.id.goog PROJECT_ID_3.svc.id.goog

      Saat mengonfigurasi cluster di project lain, Anda dapat menggunakan perintah yang sama.

      Alias domain kepercayaan memungkinkan Mesh CA untuk mengautentikasi beban kerja pada cluster dalam project lain. Selain menyetel alias domain tepercaya, setelah menginstal Anthos Service Mesh, Anda harus mengaktifkan load balancing lintas cluster.

  12. Hasilkan nilai penyetel kpt:

    kpt cfg list-setters asm
    

    Output perintah ini akan mirip dengan berikut ini:

                              NAME                                                       VALUE
    anthos.servicemesh.canonicalServiceHub               gke.gcr.io/asm/canonical-service-controller:1.9.8-asm.6
    anthos.servicemesh.controlplane.monitoring.enabled   true
    anthos.servicemesh.hub                               gke.gcr.io/asm
    anthos.servicemesh.hubMembershipID                   MEMBERSHIP_ID
    anthos.servicemesh.tag                               1.9.8-asm.6
    anthos.servicemesh.trustDomainAliases                [example-project-12345.svc.id.goog,example-project-23456.svc.id.goog,example-project-98765.svc.id.goog]
    base-dir                                             base
    gcloud.compute.location                              us-central
    gcloud.compute.network                               default
    gcloud.compute.subnetwork                            default
    gcloud.container.cluster                             example-cluster-1
    gcloud.container.cluster.clusterSecondaryRange
    gcloud.container.cluster.releaseChannel              REGULAR
    gcloud.container.cluster.servicesSecondaryRange
    gcloud.container.nodepool.max-nodes                  4
    gcloud.core.project                                  example-project-12345
    gcloud.project.environProjectID                      FLEET_PROJECT_ID
    gcloud.project.environProjectNumber                  1234567890123
    gcloud.project.projectNumber                         9876543210987

    Pastikan nilai untuk penyetel berikut sudah benar:

    • anthos.servicemesh.rev
    • anthos.servicemesh.tag
    • anthos.servicemesh.trustDomainAliases
    • gcloud.compute.location
    • gcloud.container.cluster
    • gcloud.core.project
    • gcloud.project.environProjectNumber

    Anda dapat mengabaikan nilai untuk penyetel lainnya.

Istio CA

  1. Buat direktori baru untuk file konfigurasi resource paket Anthos Service Mesh. Sebaiknya gunakan nama cluster sebagai nama direktori.

  2. Ubah ke direktori tempat Anda ingin mendownload paket Anthos Service Mesh.

  3. Verifikasi versi kpt. Pastikan Anda menjalankan kpt versi sebelum 1.x:

    kpt version
    

    Outputnya akan mirip dengan berikut ini:

    0.39.2

    Jika Anda memiliki kpt versi 1.x atau yang lebih tinggi, download versi yang diperlukan:

    curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2
    chmod +x kpt_0_39_2
    alias kpt="$(readlink -f kpt_0_39_2)"
    
  4. Download paket:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.9-asm asm
    
  5. Tetapkan project ID untuk project tempat cluster dibuat:

    kpt cfg set asm gcloud.core.project ${PROJECT_ID}
    
  6. Tetapkan nomor project untuk project host fleet:

    kpt cfg set asm gcloud.project.environProjectNumber ${FLEET_PROJECT_NUMBER}
    
  7. Tetapkan nama cluster:

    kpt cfg set asm gcloud.container.cluster ${CLUSTER_NAME}
    
  8. Tetapkan zona atau region default:

    kpt cfg set asm gcloud.compute.location ${CLUSTER_LOCATION}
    
  9. Setel tag ke versi Anthos Service Mesh yang Anda instal:

    kpt cfg set asm anthos.servicemesh.tag 1.9.8-asm.6
    
  10. Tetapkan revisi di file konfigurasi resource paket Anthos Service Mesh:

    kpt cfg set asm anthos.servicemesh.rev asm-198-6
    
  11. Hasilkan nilai penyetel kpt:

    kpt cfg list-setters asm
    

    Output perintah ini akan mirip dengan berikut ini:

                              NAME                                                       VALUE
    anthos.servicemesh.canonicalServiceHub               gke.gcr.io/asm/canonical-service-controller:1.9.8-asm.6
    anthos.servicemesh.controlplane.monitoring.enabled   true
    anthos.servicemesh.hub                               gke.gcr.io/asm
    anthos.servicemesh.hubMembershipID                   MEMBERSHIP_ID
    anthos.servicemesh.tag                               1.9.8-asm.6
    anthos.servicemesh.trustDomainAliases
    base-dir                                             base
    gcloud.compute.location                              us-central
    gcloud.compute.network                               default
    gcloud.compute.subnetwork                            default
    gcloud.container.cluster                             example-cluster-1
    gcloud.container.cluster.clusterSecondaryRange
    gcloud.container.cluster.releaseChannel              REGULAR
    gcloud.container.cluster.servicesSecondaryRange
    gcloud.container.nodepool.max-nodes                  4
    gcloud.core.project                                  example-project-12345
    gcloud.project.environProjectID                      FLEET_PROJECT_ID
    gcloud.project.environProjectNumber                  1234567890123
    gcloud.project.projectNumber                         9876543210987

    Pastikan nilai untuk penyetel berikut sudah benar:

    • anthos.servicemesh.rev
    • anthos.servicemesh.tag
    • gcloud.compute.location
    • gcloud.container.cluster
    • gcloud.core.project
    • gcloud.project.environProjectNumber

    Anda dapat mengabaikan nilai untuk penyetel lainnya.

Bermigrasi ke Anthos Service Mesh

Mesh CA

  1. Pastikan konteks kubeconfig saat ini mengarah ke cluster tempat Anda ingin menginstal Anthos Service Mesh:

    kubectl config current-context
    

    Outputnya akan dalam format berikut:

    gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME

    Konteks kubeconfig dan nilai penyetel kpt harus cocok. Jika perlu, jalankan perintah gcloud container clusters get-credentials untuk menetapkan konteks kubeconfig saat ini.

  2. Jika perlu, ubah ke direktori istio-1.9.8-asm.6. Klien istioctl bergantung pada versi. Pastikan Anda menggunakan versi ini di direktori istio-1.9.8-asm.6/bin.

  3. Jalankan perintah berikut untuk men-deploy bidang kontrol baru dengan profil asm-gcp-multiproject. Jika Anda ingin mengaktifkan fitur opsional yang didukung, sertakan -f dan nama file YAML pada command line berikut. Lihat Mengaktifkan fitur opsional untuk mengetahui informasi selengkapnya.

    bin/istioctl install \
      -f asm/istio/istio-operator.yaml \
      -f asm/istio/options/multiproject.yaml \
      -f asm/istio/options/multicluster.yaml \
      -f asm/istio/options/revisioned-istio-ingressgateway.yaml \
      --revision=asm-198-6
    

    Argumen --revision menambahkan label revisi dalam format istio.io/rev=asm-198-6 ke istiod. Label revisi digunakan oleh webhook injektor sidecar otomatis untuk mengaitkan sidecar yang dimasukkan dengan revisi istiod tertentu. Untuk mengaktifkan injeksi otomatis file bantuan untuk namespace, Anda harus melabelinya dengan revisi yang cocok dengan Deployment istiod.

    File berikut menggantikan setelan di file istio-operator.yaml:

    • File multiproject.yaml menetapkan profil asm-gcp-multiproject.

    • File multicluster.yaml mengonfigurasi setelan yang diperlukan Anthos Service Mesh untuk konfigurasi multi-cluster.

    • File revisioned-istio-ingressgateway.yaml mengonfigurasi Deployment yang direvisi untuk istio-ingressgateway.

  4. Pastikan pod bidang kontrol di istio-system sudah aktif:

    kubectl get pods -n istio-system
    

    Contoh output:

    NAME                                        READY   STATUS    RESTARTS   AGE
    istio-ingressgateway-c56675fcd-86zdn        1/1     Running   0          2m9s
    istio-ingressgateway-c56675fcd-vn4nv        1/1     Running   0          2m21s
    istiod-asm-198-6-6d5cfd4b89-xztlr           1/1     Running   0          3m44s
    istiod-fb7f746f4-wcntn                      1/1     Running   0          50m

    Anda memiliki dua bidang kontrol Deployment dan Layanan yang berjalan berdampingan.

  5. Deploy pengontrol Layanan Kanonis ke cluster Anda:

    kubectl apply -f asm/canonical-service/controller.yaml

    Pengontrol Layanan Kanonis mengelompokkan beban kerja yang termasuk dalam layanan logis yang sama. Untuk mengetahui informasi selengkapnya tentang Layanan Kanonis, lihat ringkasan Layanan Kanonis.

Istio CA

  1. Pastikan konteks kubeconfig saat ini mengarah ke cluster tempat Anda ingin menginstal Anthos Service Mesh:

    kubectl config current-context
    

    Outputnya akan dalam format berikut:

    gke_PROJECT_ID_CLUSTER_LOCATION_CLUSTER_NAME

    Konteks kubeconfig dan nilai penyetel kpt harus cocok. Jika perlu, jalankan perintah gcloud container clusters get-credentials untuk menetapkan konteks kubeconfig saat ini.

  2. Jika perlu, ubah ke direktori istio-1.9.8-asm.6. Klien istioctl bergantung pada versi. Pastikan Anda menggunakan versi ini di direktori istio-1.9.8-asm.6/bin.

  3. Jalankan perintah berikut untuk men-deploy bidang kontrol baru dengan profil asm-gcp-multiproject. Jika Anda ingin mengaktifkan fitur opsional yang didukung, sertakan -f dan nama file YAML pada command line berikut. Lihat Mengaktifkan fitur opsional untuk mengetahui informasi selengkapnya.

    bin/istioctl install \
      -f asm/istio/istio-operator.yaml \
      -f asm/istio/options/citadel-ca.yaml \
      -f asm/istio/options/multiproject.yaml \
      -f asm/istio/options/multicluster.yaml \
      -f asm/istio/options/revisioned-istio-ingressgateway.yaml \
      --revision=asm-198-6
    

    Argumen --revision menambahkan label revisi dalam format istio.io/rev=asm-198-6 ke istiod. Label revisi digunakan oleh webhook injektor sidecar otomatis untuk mengaitkan sidecar yang dimasukkan dengan revisi istiod tertentu. Untuk mengaktifkan injeksi otomatis file bantuan untuk namespace, Anda harus melabelinya dengan revisi yang cocok dengan Deployment istiod.

    File berikut menggantikan setelan di file istio-operator.yaml:

    • citadel-ca.yaml mengonfigurasi Istio CA sebagai certificate authority.

    • File multiproject.yaml menetapkan profil asm-gcp-multiproject.

    • File multicluster.yaml mengonfigurasi setelan yang diperlukan Anthos Service Mesh untuk konfigurasi multi-cluster.

    • File revisioned-istio-ingressgateway.yaml mengonfigurasi Deployment yang direvisi untuk istio-ingressgateway.

  4. Pastikan pod bidang kontrol di istio-system sudah aktif:

    kubectl get pods -n istio-system
    

    Contoh output:

    NAME                                        READY   STATUS    RESTARTS   AGE
    istio-ingressgateway-c56675fcd-86zdn        1/1     Running   0          2m9s
    istio-ingressgateway-c56675fcd-vn4nv        1/1     Running   0          2m21s
    istiod-asm-198-6-6d5cfd4b89-xztlr           1/1     Running   0          3m44s
    istiod-fb7f746f4-wcntn                      1/1     Running   0          50m

    Anda memiliki dua bidang kontrol Deployment dan Layanan yang berjalan berdampingan.

  5. Deploy pengontrol Layanan Kanonis ke cluster Anda:

    kubectl apply -f asm/canonical-service/controller.yaml

    Pengontrol Layanan Kanonis mengelompokkan beban kerja yang termasuk dalam layanan logis yang sama. Untuk mengetahui informasi selengkapnya tentang Layanan Kanonis, lihat ringkasan Layanan Kanonis.

Men-deploy dan men-deploy ulang workload

Penginstalan belum selesai sampai Anda mengaktifkan injeksi proxy sidecar otomatis (injeksi otomatis). Migrasi dari Istio dan upgrade OSS mengikuti proses upgrade berbasis revisi (disebut sebagai "upgrade canary" dalam dokumentasi Istio). Dengan upgrade berbasis revisi, versi baru bidang kontrol diinstal bersama bidang kontrol yang ada. Kemudian, Anda memindahkan beberapa beban kerja ke versi baru agar Anda dapat memantau efek upgrade dengan sebagian kecil beban kerja, sebelum memigrasikan semua traffic ke versi baru.

Saat menjalankan istioctl install, Anda menetapkan label revisi dalam format istio.io/rev=asm-198-6 pada istiod. Untuk mengaktifkan injeksi otomatis, tambahkan label revisi yang cocok ke namespace Anda. Label revisi digunakan oleh webhook injektor file bantuan untuk mengaitkan file bantuan yang dimasukkan dengan revisi istiod tertentu. Setelah menambahkan label, mulai ulang Pod di namespace untuk file bantuan yang akan dimasukkan.

Jika Anda menyertakan revisioned-istio-ingressgateway.yaml saat menjalankan istioctl install, Deployment yang telah direvisi akan dikonfigurasi untuk istio-ingressgateway. Tindakan ini memungkinkan Anda mengontrol kapan beralih ke versi baru.

  1. Dapatkan label revisi yang ada di istiod dan istio-ingressgateway.

    kubectl get pod -n istio-system -L istio.io/rev
    

    Output dari perintah serupa dengan berikut ini.

    NAME                                             READY   STATUS    RESTARTS   AGE   REV
    istio-ingressgateway-65d884685d-6hrdk            1/1     Running   0          67m
    istio-ingressgateway-65d884685d-94wgz            1/1     Running   0          67m
    istio-ingressgateway-asm-182-2-8b5fc8767-gk6hb   1/1     Running   0          5s    asm-198-6
    istio-ingressgateway-asm-182-2-8b5fc8767-hn4w2   1/1     Running   0          20s   asm-198-6
    istiod-asm-176-1-67998f4b55-lrzpz                1/1     Running   0          68m   asm-186-8
    istiod-asm-176-1-67998f4b55-r76kr                1/1     Running   0          68m   asm-186-8
    istiod-asm-182-2-5cd96f88f6-n7tj9                1/1     Running   0          27s   asm-198-6
    istiod-asm-182-2-5cd96f88f6-wm68b                1/1     Running   0          27s   asm-198-6
    1. Perhatikan apakah Anda memiliki istio-ingressgateway versi lama dan baru.

      • Jika Anda menyertakan opsi revisioned-istio-ingressgateway saat mengupgrade, upgrade canary istio-ingressgateway telah selesai. Dalam hal ini, output Anda akan menampilkan istio-ingressgateway versi lama dan baru.

      • Jika Anda tidak menyertakan revisioned-istio-ingressgateway saat mengupgrade, upgrade istio-ingressgateway yang sudah ada telah dilakukan. Dalam hal ini, output hanya menampilkan versi baru.

    2. Pada output, di kolom REV, catat nilai label revisi untuk versi baru. Dalam contoh ini, nilainya adalah asm-198-6.

    3. Perhatikan juga nilai dalam label revisi untuk versi istiod lama. Anda memerlukan tindakan ini untuk menghapus versi lama istiod saat selesai memindahkan beban kerja ke versi baru. Dalam contoh output, nilai label revisi untuk versi lama adalah asm-186-8.

  2. Jika Anda memiliki istio-ingressgateway versi lama dan baru, alihkan istio-ingressgateway ke revisi baru. Dalam perintah berikut, ubah REVISION ke nilai yang cocok dengan label revisi versi baru.

    kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "REVISION"}]'

    Output yang diharapkan: service/istio-ingressgateway patched

  3. Tambahkan label revisi ke namespace dan hapus label istio-injection (jika ada). Dalam perintah berikut, ubah REVISION ke nilai yang cocok dengan revisi baru istiod.

    kubectl label namespace NAMESPACE istio.io/rev=REVISION istio-injection- --overwrite

    Jika melihat "istio-injection not found" pada output, Anda dapat mengabaikannya. Artinya, namespace sebelumnya tidak memiliki label istio-injection. Karena injeksi otomatis gagal jika namespace memiliki istio-injection dan label revisi, semua perintah kubectl label dalam dokumentasi Anthos Service Mesh mencakup penghapusan label istio-injection.

  4. Mulai ulang Pod untuk memicu injeksi ulang.

    kubectl rollout restart deployment -n NAMESPACE
  5. Pastikan bahwa Pod Anda telah dikonfigurasi untuk mengarah ke versi baru istiod.

    kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
  6. Uji aplikasi Anda untuk memverifikasi bahwa beban kerja berfungsi dengan benar.

  7. Jika Anda memiliki beban kerja di namespace lain, ulangi langkah-langkah untuk memberi label pada namespace dan memulai ulang Pod.

  8. Jika Anda puas karena aplikasi Anda berfungsi seperti yang diharapkan, lanjutkan dengan langkah-langkah untuk bertransisi ke versi baru istiod. Jika aplikasi Anda mengalami masalah, ikuti langkah-langkah untuk melakukan rollback.

  9. Jalankan kembali perintah berikut untuk mengonfirmasi apakah Anda memiliki istio-ingressgateway versi lama dan baru atau hanya versi baru. Tindakan ini menentukan cara Anda menangani transisi ke versi baru istio-ingressgateway atau melakukan roll back ke versi lama.

    kubectl get pod -n istio-system -L istio.io/rev
    

    Selesaikan transisi

    Jika Anda puas karena aplikasi Anda berfungsi seperti yang diharapkan, hapus bidang kontrol lama untuk menyelesaikan transisi ke versi baru.

    1. Ubah ke direktori tempat file dari repositori GitHub anthos-service-mesh berada.

    2. Konfigurasikan webhook yang memvalidasi untuk menggunakan bidang kontrol baru.

      kubectl apply -f asm/istio/istiod-service.yaml
      
    3. Jika Anda memiliki istio-ingressgateway versi lama dan baru, hapus Deployment istio-ingressgateway lama. Perintah yang Anda jalankan bergantung pada apakah Anda bermigrasi dari Istio atau mengupgrade dari Anthos Service Mesh versi sebelumnya:

      Migrasi

      Jika Anda bermigrasi dari Istio, istio-ingressgateway lama tidak akan memiliki label revisi.

      kubectl delete deploy/istio-ingressgateway -n istio-system
      

      Upgrade

      Jika Anda melakukan upgrade dari versi Anthos Service Mesh sebelumnya, dalam perintah berikut, ganti OLD_REVISION dengan label revisi untuk istio-ingressgateway versi sebelumnya.

      kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=OLD_REVISION -n istio-system --ignore-not-found=true
      
    4. Hapus istiod versi lama. Perintah yang Anda gunakan bergantung pada apakah Anda bermigrasi dari Istio atau mengupgrade dari Anthos Service Mesh versi sebelumnya.

      Migrasi

      Jika Anda bermigrasi dari Istio, istiod lama tidak memiliki label revisi.

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod -n istio-system --ignore-not-found=true
      

      Upgrade

      Jika Anda melakukan upgrade dari versi Anthos Service Mesh sebelumnya, dalam perintah berikut, pastikan OLD_REVISION cocok dengan label revisi untuk istiod versi sebelumnya.

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-OLD_REVISION -n istio-system --ignore-not-found=true
      
    5. Hapus versi lama konfigurasi IstioOperator.

      kubectl delete IstioOperator installed-state-OLD_REVISION -n istio-system
      

      Output yang diharapkan mirip dengan berikut ini:

      istiooperator.install.istio.io "installed-state-OLD_REVISION" deleted

    Rollback

    Jika Anda mengalami masalah saat menguji aplikasi dengan versi baru istiod, ikuti langkah-langkah berikut untuk melakukan rollback ke versi sebelumnya:

    1. Beralih kembali ke istio-ingressgateway versi lama. Perintah yang digunakan bergantung pada apakah Anda memiliki istio-ingressgateway versi lama dan baru atau hanya versi baru.

      • Jika Anda memiliki istio-ingressgateway versi lama dan baru, jalankan perintah kubectl patch service dan ganti OLD_REVISION dengan revisi lama.

        kubectl patch service -n istio-system istio-ingressgateway --type='json' -p='[{"op": "replace", "path": "/spec/selector/service.istio.io~1canonical-revision", "value": "OLD_REVISION"}]'
        
      • Jika Anda hanya memiliki istio-ingressgateway versi baru, jalankan perintah kubectl rollout undo.

        kubectl -n istio-system rollout undo deploy istio-ingressgateway
        
    2. Beri label ulang namespace Anda untuk mengaktifkan injeksi otomatis dengan versi istiod sebelumnya. Perintah yang digunakan bergantung pada apakah Anda menggunakan label revisi atau istio-injection=enabled dengan versi sebelumnya.

      • Jika Anda menggunakan label revisi untuk injeksi otomatis:

        kubectl label namespace NAMESPACE istio.io/rev=OLD_REVISION --overwrite
        
      • Jika Anda menggunakan istio-injection=enabled:

        kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
        

      Output yang diharapkan:

      namespace/NAMESPACE labeled
    3. Pastikan label revisi pada namespace cocok dengan label revisi pada istiod versi sebelumnya:

      kubectl get ns NAMESPACE --show-labels
      
    4. Mulai ulang Pod untuk memicu injeksi ulang sehingga proxy memiliki versi sebelumnya:

      kubectl rollout restart deployment -n NAMESPACE
      
    5. Jika Anda memiliki istio-ingressgateway versi lama dan baru, hapus Deployment istio-ingressgateway baru. Pastikan nilai REVISION dalam perintah berikut sudah benar.

      kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=REVISION -n istio-system --ignore-not-found=true
      
    6. Hapus versi baru istiod. Pastikan nilai REVISION dalam perintah berikut sudah benar.

      kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-REVISION -n istio-system --ignore-not-found=true
      
    7. Hapus versi baru konfigurasi IstioOperator.

      kubectl delete IstioOperator installed-state-REVISION -n istio-system
      

      Output yang diharapkan mirip dengan berikut ini:

      istiooperator.install.istio.io "installed-state-REVISION" deleted
    8. Jika Anda tidak menyertakan flag --disable_canonical_service, skrip akan mengaktifkan pengontrol Layanan Kanonis. Sebaiknya Anda membiarkannya tetap aktif, tetapi jika Anda perlu menonaktifkannya, lihat Mengaktifkan dan menonaktifkan pengontrol Layanan Kanonis.

Langkah selanjutnya