Bermigrasi dari Istio 1.7 atau yang lebih baru ke Anthos Service Mesh dan Mesh CA

Dokumen ini menjelaskan cara administrator Google Kubernetes Engine (GKE) dapat menginstal Anthos Service Mesh dan memigrasikan workload yang saat ini berjalan dengan mesh layanan Istio. Konfigurasi Anthos Service Mesh yang di-deploy mencakup Cloud Monitoring untuk telemetri dan certificate authority Anthos Service Mesh (Mesh CA) untuk pengelolaan sertifikat mesh ketersediaan tinggi dan terkelola. Gateway, layanan virtual, dan konfigurasi mesh lainnya yang menentukan topologi mesh Anda akan dipertahankan dalam migrasi.

Proses ini mencakup penginstalan cluster tunggal. Untuk penginstalan mesh multi-cluster, lihat Menyiapkan mesh multi-cluster di GKE, yang mencakup langkah-langkah cara menambahkan cluster ke Anthos Service Mesh setelah penginstalan.

Untuk menyelesaikan langkah-langkah dalam dokumen ini, Anda harus menggunakan Istio 1.7 atau yang lebih baru dengan cluster GKE. Anthos Service Mesh tidak mendukung Helm untuk penginstalan atau konfigurasi. Sebaiknya administrator mesh menggunakan IstioOperator API untuk konfigurasi mesh. Proses ini dapat menyebabkan periode nonaktif untuk aplikasi Anda saat beralih certificate authority. Jadi, sebaiknya lakukan proses ini selama masa pemeliharaan terjadwal.

Anthos Service Mesh menggunakan Istio dan Envoy API yang sama untuk mengonfigurasi mesh Anda, sehingga tidak perlu mengubah resource yang ada.

Beberapa perbedaan implementasi setelah migrasi adalah sebagai berikut:

  • Bidang kontrol Istio diganti dengan bidang kontrol Anthos Service Mesh.

  • Certificate authority Citadel dihapus, dan sertifikat dikelola oleh layanan Mesh CA Google Cloud.

  • Telemetry dikirim ke Cloud Logging dan Cloud Monitoring. Dasbor dan pengelolaan SLO tersedia di Google Cloud Console.

  • Jika Anda memiliki resource IstioOperator yang disesuaikan, skrip dapat menganggapnya sebagai input.

  • Penginstalan Istio open source Anda (versi 1.7 atau yang lebih baru) dimigrasikan ke Anthos Service Mesh versi 1.10 dengan Mesh CA. Jika Anda memiliki versi Istio yang berbeda atau memerlukan versi Anthos Service Mesh yang berbeda, atau ingin men-deploy Anthos Service Mesh dengan bidang kontrol yang dikelola Google, lihat Mempersiapkan migrasi dari Istio.

Prasyarat

Prasyarat berikut diperlukan untuk menyelesaikan panduan ini:

  • Anda telah menginstal cluster GKE yang menggunakan Istio versi 1.7 atau yang lebih baru. Jika Anda tidak memiliki cluster GKE, atau ingin menguji panduan ini pada cluster baru (pengujian) terlebih dahulu, ikuti langkah-langkah dalam Lampiran untuk membuat cluster GKE baru dengan Istio versi 1.7 atau yang lebih baru yang di-deploy dengan aplikasi pengujian.

  • Anda dapat menggunakan Cloud Shell untuk melakukan langkah-langkah dalam panduan ini, karena panduan ini diuji di Cloud Shell.

Tujuan

Dalam panduan ini, Anda dapat memilih jalur migrasi. Anda dapat memilih antara jalur dengan skrip satu langkah atau migrasi dengan skrip langkah demi langkah.

Untuk informasi selengkapnya, lihat Memilih jalur migrasi.

Untuk mendapatkan jawaban atas pertanyaan umum terkait migrasi ini, lihat Bermigrasi dari Istio 1.7 atau yang lebih baru ke FAQ Anthos Service Mesh dan Mesh CA.

Sebelum memulai

Untuk panduan ini, Anda memerlukan akses administratif ke cluster GKE dengan Istio terinstal. Untuk mengamati perilaku aplikasi Anda selama proses migrasi, sebaiknya lakukan proses ini terlebih dahulu dengan cluster dalam lingkungan pengembangan atau staging.

Anthos Service Mesh memiliki persyaratan berikut. Anda dapat melakukannya secara manual sendiri atau mengizinkan alat yang disediakan untuk mengaktifkan dependensi atas nama Anda selama proses pra-penginstalan.

  1. Aktifkan Google Cloud API berikut:

    • container.googleapis.com
    • meshca.googleapis.com
    • meshconfig.googleapis.com
    • gkehub.googleapis.com
    • stackdriver.googleapis.com
  2. Mengaktifkan Workload Identity dan Stackdriver untuk cluster GKE Anda.

  3. Beri label cluster Anda untuk mengaktifkan antarmuka pengguna Layanan.

  4. Mendapatkan hak admin cluster di cluster Kubernetes.

  5. Daftarkan cluster Anda ke fleet.

  6. Aktifkan fitur servicemesh di perangkat.

Menyiapkan lingkungan Anda

Untuk menyiapkan lingkungan Anda, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah halaman Google Cloud Console, sesi Cloud Shell dimulai dan menampilkan prompt command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Perlu waktu beberapa detik untuk memulai sesi.

  2. Buat variabel lingkungan yang digunakan dalam panduan ini:

    export PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    export PROJECT_NUM=$(gcloud projects describe ${PROJECT_ID} --format='value(projectNumber)')
    export CLUSTER_NAME=GKE_CLUSTER_NAME
    export CLUSTER_LOCATION=GKE_CLUSTER_REGION_OR_ZONE
    
  3. Buat folder WORKDIR:

    mkdir -p migrate-to-asm-working-dir && cd migrate-to-asm-working-dir && export WORKDIR=`pwd`
    
  4. Buat file KUBECONFIG untuk panduan ini:

    touch asm-kubeconfig && export KUBECONFIG=`pwd`/asm-kubeconfig
    
  5. Hubungkan ke cluster GKE Anda:

    Cluster zona

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
       --zone ${CLUSTER_LOCATION}
    

    Cluster regional

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
       --region ${CLUSTER_LOCATION}
    
  6. Download skrip migrasi:

    curl -LO https://storage.googleapis.com/csm-artifacts/asm/migrate-to-asm
    chmod +x ./migrate-to-asm
    

Memilih jalur migrasi

Anda dapat memilih salah satu dari dua jalur untuk bermigrasi ke Anthos Service Mesh. Pilih hanya salah satu dari dua strategi ini, lalu lanjutkan ke bagian tersebut:

  • Migrasi satu langkah ke Anthos Service Mesh. Seperti namanya, Anda dapat melakukan semua langkah yang diperlukan untuk bermigrasi ke Anthos Service Mesh menggunakan satu perintah. Hal ini mungkin bermanfaat jika Anda memiliki banyak cluster dan memerlukan cara yang cepat dan mudah untuk mengupgradenya ke Anthos Service Mesh. Namun, metode ini dapat menyebabkan periode nonaktif aplikasi.

  • Migrasi langkah demi langkah ke Anthos Service Mesh. Metode ini memberi Anda kontrol lebih atas setiap langkah dan membantu Anda memahami dengan tepat apa saja yang diperlukan untuk bermigrasi ke Anthos Service Mesh.

Migrasi satu langkah ke Anthos Service Mesh

Di bagian ini, Anda akan memigrasikan penginstalan Istio versi 1.7 (atau yang lebih baru) saat ini ke Anthos Service Mesh versi 1.10. Bagian ini memungkinkan Anda melakukan migrasi dengan menjalankan satu langkah. Jika Anda ingin melakukan migrasi dengan menjalankan serangkaian langkah, lihat bagian Migrasi langkah demi langkah ke Anthos Service Mesh.

Untuk bermigrasi ke Anthos Service Mesh, jalankan perintah berikut. Dengan perintah apa pun, Anda dapat menggunakan flag --dry-run untuk mencetak perintah, bukan menjalankannya, atau Anda dapat menggunakan flag --verbose untuk mencetak perintah saat skrip menjalankannya. Jika sebelumnya Anda telah mengonfigurasi dependensi, seperti yang disebutkan di bagian Sebelum memulai, Anda dapat menghilangkan flag --enable-dependencies.

Tidak ada resource kustom

Jangan gunakan resource IstioOperator kustom:

./migrate-to-asm migrate \
    --cluster_location $CLUSTER_LOCATION \
    --cluster-name $CLUSTER_NAME \
    --project-id $PROJECT_ID \
    --enable-dependencies \
    --verbose

Menggunakan resource kustom

Gunakan resource IstioOperator kustom:

export ISTIO_OPERATOR_FILEPATH=PATH_OF_ISTIO_OPERATOR_YAML_FILE

./migrate-to-asm migrate \
    --cluster_location $CLUSTER_LOCATION \
    --cluster-name $CLUSTER_NAME \
    --project-id $PROJECT_ID \
    --enable-dependencies \
    --custom_overlay ${ISTIO_OPERATOR_FILEPATH} \
    --verbose

Perintah ini akan melakukan langkah-langkah berikut:

  • Memastikan versi Istio adalah versi 1.7 atau yang lebih baru.
  • Mengaktifkan Workload Identity pada cluster. Workload Identity diperlukan untuk Mesh CA. Anda tidak perlu mengaktifkan Server Metadata GKE pada node pool yang ada.
  • Mengaktifkan API yang diperlukan untuk Anthos Service Mesh.
  • Mendaftarkan cluster ke fleet.
  • Memperbarui cluster dengan label yang diperlukan.
  • Mengevaluasi apakah bidang kontrol yang dikelola Google lebih baik untuk cluster yang ditentukan.
  • Men-deploy Anthos Service Mesh dengan konfigurasi bidang kontrol yang optimal.
  • Memberi label ulang semua namespace yang mengaktifkan Istio dengan label Anthos Service Mesh yang diperlukan.
  • Memulai ulang workload di semua namespace yang mengaktifkan Anthos Service Mesh agar beban kerja mendapatkan proxy Anthos Service Mesh baru.
  • Menghapus bidang kontrol Istio.

Migrasi langkah demi langkah ke Anthos Service Mesh

Di bagian ini, Anda akan memigrasikan penginstalan Istio versi 1.7 (atau yang lebih baru) ke Anthos Service Mesh versi 1.10. Bagian ini memungkinkan Anda melakukan migrasi dengan menjalankan serangkaian langkah. Jika Anda ingin melakukan migrasi dalam satu langkah, lihat bagian Migrasi satu langkah ke Anthos Service Mesh.

Langkah-langkah berikut diperlukan untuk bermigrasi ke Anthos Service Mesh:

  1. Lakukan langkah pra-migrasi untuk memvalidasi serta menyiapkan cluster dan lingkungan untuk migrasi ke Anthos Service Mesh.
  2. Instal Anthos Service Mesh sebagai bidang kontrol canary bersama bidang kontrol Istio yang sudah ada dan siapkan workload.
  3. Menguji workload di Anthos Service Mesh dan memberi label ulang namespace untuk injeksi sidecar Anthos Service Mesh.
  4. Mengakses dan memeriksa dasbor Anthos Service Mesh.
  5. Membersihkan artefak Istio atau melakukan roll back ke versi Istio yang sudah ada.

Lakukan langkah pra-migrasi

Langkah pra-migrasi akan melakukan tindakan berikut:

  • Fitur ini memvalidasi bahwa informasi project dan cluster sudah benar dan versi Istio yang diinstal kompatibel dengan migrasi.

  • Library ini mencadangkan konfigurasi untuk gateway default dan label untuk mesh layanan Istio saat ini.

  • Jika digunakan, flag --enable-dependencies akan mengaktifkan dependensi atas nama Anda; jika tidak, flag ini akan memverifikasi bahwa dependensi diaktifkan.

Skrip pra-migrasi membuat folder baru (atau menimpa folder yang sudah ada) bernama configuration_backup di direktori saat ini.

Untuk melakukan langkah pra-migrasi, jalankan perintah berikut:

Dependensi

Aktifkan dependensi:

./migrate-to-asm pre-migrate \
    --cluster_location $CLUSTER_LOCATION \
    --cluster-name $CLUSTER_NAME \
    --project-id $PROJECT_ID \
    --enable-dependencies

Tidak ada dependensi

Jangan aktifkan dependensi:

./migrate-to-asm pre-migrate \
    --cluster_location $CLUSTER_LOCATION \
    --cluster-name $CLUSTER_NAME \
    --project-id $PROJECT_ID

Outputnya mirip dengan hal berikut ini:

    migrate-to-asm: Checking installation tool dependencies...
    migrate-to-asm: Checking for $PROJECT_ID...
    migrate-to-asm: Confirming cluster information for $PROJECT_ID/$LOCATION/$CLUSTER_NAME...
    migrate-to-asm: Confirming node pool requirements for $PROJECT_ID/$LOCATION/$CLUSTER_NAME...
    migrate-to-asm: Checking existing Istio version(s)...
    migrate-to-asm:   1.9.5
    migrate-to-asm: No version issues found.
    migrate-to-asm: Enabling required APIs...
    migrate-to-asm:
    migrate-to-asm: APIs enabled.
    migrate-to-asm: Enabling the service mesh feature...
    migrate-to-asm:
    migrate-to-asm: The service mesh feature is already enabled.
    migrate-to-asm: Enabling Stackdriver on $LOCATION/$CLUSTER_NAME...
    Updating $CLUSTER_NAME...
    .........................done.
    Updated [https://container.googleapis.com/v1/projects/$PROJECT_ID/zones/$LOCATION/clusters/$CLUSTER_NAME].
    To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/$LOCATION/$CLUSTER_NAME?project=$PROJECT_ID
    migrate-to-asm:
    migrate-to-asm: Stackdriver enabled.
    migrate-to-asm: Querying for core/account...
    migrate-to-asm: Binding user@example.com to cluster admin role...
    migrate-to-asm:
    migrate-to-asm:
    migrate-to-asm: Successfully bound to cluster admin role.
    migrate-to-asm: Initializing meshconfig API...
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100     3    0     3    0     0      6      0 --:--:-- --:--:-- --:--:--     6
    migrate-to-asm:
    migrate-to-asm: Finished pre-migration!

Menginstal Anthos Service Mesh dan menyiapkan workload

Langkah ini akan melakukan hal-hal berikut:

  • Proses ini akan memeriksa keberadaan folder configuration_backup, dan jika folder tidak ada, folder akan dibatalkan untuk memastikan bahwa alat pra-migrasi berhasil berjalan.
  • Layanan ini menginstal dan mengonfigurasi bidang kontrol Anthos Service Mesh berdasarkan analisis konfigurasi cluster dan mesh.
  • Class ini menggunakan resource IstioOperator kustom jika tersedia. Jika Anda memiliki gateway kustom atau beberapa gateway yang telah dikonfigurasi dengan menggunakan resource IstioOperator, gunakan resource yang sama pada langkah ini.

Untuk melewati analisis dan memaksa alat untuk menginstal bidang kontrol tidak terkelola yang berjalan dengan resource cluster Anda, tambahkan flag --no-mcp ke perintah Anda.

Anda dapat memilih salah satu dari tiga jalur saat menginstal Anthos Service Mesh:

  • Opsi 1: Tanpa resource IstioOperator kustom. Anda dapat menginstal Anthos Service Mesh tanpa resource kustom. Menggunakan opsi ini akan menginstal konfigurasi default Istio dan mengupdate istio-ingressgateway default yang berlaku.

  • Opsi 2: Dengan opsi --no-gateways. Saat menginstal Anthos Service Mesh tanpa resource IstioOperator kustom, Anda juga dapat menggunakan opsi --no-gateways untuk tidak memperbarui istio-ingressgateway default yang diterapkan. Jika menggunakan opsi ini, Anda harus mengupgrade gateway secara manual setelah penginstalan.

  • Opsi 3: Dengan resource IstioOperator kustom. Anda dapat menginstal Anthos Service Mesh dengan resource IstioOperator kustom. Jika Anda men-deploy Istio menggunakan resource IstioOperator kustom, sebaiknya gunakan resource IstioOperator yang sama saat menginstal Anthos Service Mesh.

Untuk menginstal Anthos Service Mesh, jalankan salah satu perintah berikut:

Opsi 1

Upgrade istio-ingressgateway default yang sudah diterapkan:

 ./migrate-to-asm install-asm \
     --cluster_location $CLUSTER_LOCATION \
     --cluster-name $CLUSTER_NAME \
     --project-id $PROJECT_ID

Opsi 2

Jangan upgrade istio-ingressgateway default yang sudah diterapkan:

 ./migrate-to-asm install-asm \
     --cluster_location $CLUSTER_LOCATION \
     --cluster-name $CLUSTER_NAME \
     --project-id $PROJECT_ID \
     --no-gateways

Opsi 3

Mengupgrade gateway sudah diterapkan dengan resource IstioOperator kustom:

 export ISTIO_OPERATOR_FILEPATH=PATH_OF_ISTIO_OPERATOR_YAML_FILE

 ./migrate-to-asm install-asm \
     --cluster_location $CLUSTER_LOCATION \
     --cluster-name $CLUSTER_NAME \
     --project-id $PROJECT_ID \
     --custom-overlay ${ISTIO_OPERATOR_FILEPATH}

Outputnya mirip dengan hal berikut ini:

 migrate-to-asm: Checking installation tool dependencies...
 migrate-to-asm: Checking for $PROJECT_ID...
 migrate-to-asm: Fetching/writing Google Cloud credentials to kubeconfig file...
 Fetching cluster endpoint and auth data.
 kubeconfig entry generated for $CLUSTER_NAME.
 migrate-to-asm:
 migrate-to-asm: Verifying connectivity (20s)...
 migrate-to-asm: kubeconfig set to $PROJECT_ID/$LOCATION/$CLUSTER_NAME...
 migrate-to-asm: Configuring kpt package...
 asm/
 set 20 field(s) of setter "gcloud.container.cluster" to value "$CLUSTER_NAME"
 asm/
 set 28 field(s) of setter "gcloud.core.project" to value "$PROJECT_ID"
 asm/
 set 2 field(s) of setter "gcloud.project.projectNumber" to value "42"
 asm/
 set 5 field(s) of setter "gcloud.project.environProjectNumber" to value "42"
 asm/
 set 20 field(s) of setter "gcloud.compute.location" to value "$LOCATION"
 asm/
 set 1 field(s) of setter "gcloud.compute.network" to value "$PROJECT_ID-default"
 asm/
 set 6 field(s) of setter "anthos.servicemesh.rev" to value "asm-1102-2"
 asm/
 set 5 field(s) of setter "anthos.servicemesh.tag" to value "1.10.2-asm.2"
 asm/
 set 4 field(s) of setter "anthos.servicemesh.hubTrustDomain" to value "$PROJECT_ID.svc.id.goog"
 asm/
 set 2 field(s) of setter "anthos.servicemesh.hub-idp-url" to value "https://container.googleapis.com/v1/projects/$PROJECT_ID/locations/$LOCATION/clusters/$CLUSTER_NAME"
 asm/
 set 4 field(s) of setter "anthos.servicemesh.trustDomainAliases" to value "$PROJECT_ID.svc.id.goog"
 migrate-to-asm: Configured.
 migrate-to-asm: Installing Anthos Service Mesh control plane...
 migrate-to-asm:
 - Processing resources for Istio core.
 ✔ Istio core installed
 - Processing resources for Istiod.
 - Processing resources for Istiod. Waiting for Deployment/istio-system/istiod-asm-1102-2
 ✔ Istiod installed
 - Processing resources for CNI, Ingress gateways.
 - Processing resources for CNI, Ingress gateways. Waiting for Deployment/istio-system/istio-ingressgateway
 ✔ CNI installed
 - Processing resources for Ingress gateways. Waiting for Deployment/istio-system/istio-ingressgateway
 ✔ Ingress gateways installed
 - Pruning removed resources
 migrate-to-asm:
 migrate-to-asm:
 namespace/asm-system created
 customresourcedefinition.apiextensions.k8s.io/canonicalservices.anthos.cloud.google.com configured
 role.rbac.authorization.k8s.io/canonical-service-leader-election-role created
 clusterrole.rbac.authorization.k8s.io/canonical-service-manager-role configured
 clusterrole.rbac.authorization.k8s.io/canonical-service-metrics-reader unchanged
 serviceaccount/canonical-service-account created
 rolebinding.rbac.authorization.k8s.io/canonical-service-leader-election-rolebinding created
 clusterrolebinding.rbac.authorization.k8s.io/canonical-service-manager-rolebinding unchanged
 clusterrolebinding.rbac.authorization.k8s.io/canonical-service-proxy-rolebinding unchanged
 service/canonical-service-controller-manager-metrics-service created
 deployment.apps/canonical-service-controller-manager created
 deployment.apps/canonical-service-controller-manager condition met
 migrate-to-asm:
 migrate-to-asm:
 migrate-to-asm: *******
 migrate-to-asm: Control plane installation complete!

Memasukkan ulang workload dan memeriksa perilaku aplikasi

Bidang kontrol Anthos Service Mesh kini siap menangani workload, tetapi bidang kontrol Istio yang ada masih mengelola workload yang sudah ada. Untuk memigrasikan workload tersebut, Anda perlu melabeli ulang namespace Kubernetes yang saat ini diberi label untuk injeksi Istio dengan label revisi Anthos Service Mesh. Kemudian, Anda perlu memulai ulang beban kerja di namespace tersebut. Anda dapat melakukannya secara manual (lihat Catatan pada langkah 1) atau dengan satu langkah menggunakan alat tersebut.

Langkah pelabelan ulang akan melakukan hal berikut:

  • Fungsi ini menemukan semua namespace yang saat ini menggunakan label injeksi Istio.
  • Fungsi ini akan memberi label ulang namespace tersebut dengan istio.io/rev=asm-1102-2.
  • Memulai ulang beban kerja di namespace.

Untuk memasukkan ulang beban kerja, ikuti langkah-langkah berikut:

  1. Beri label ulang semua namespace yang mengaktifkan Istio dan mulai ulang workload dengan menjalankan perintah berikut:

     ./migrate-to-asm relabel \
         --cluster_location $CLUSTER_LOCATION \
         --cluster-name $CLUSTER_NAME \
         --project-id $PROJECT_ID
    

    Outputnya mirip dengan hal berikut ini:

    migrate-to-asm: Checking installation tool dependencies...
    migrate-to-asm: Checking for $PROJECT_ID...
    migrate-to-asm: Fetching/writing Google Cloud credentials to kubeconfig file...
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for $CLUSTER_NAME.
    migrate-to-asm:
    migrate-to-asm: Verifying connectivity (20s)...
    migrate-to-asm: kubeconfig set to $PROJECT_ID/$LOCATION/$CLUSTER_NAME...
    ******
    migrate-to-asm: Installation of Anthos Service Mesh has completed. Migration will continue
    migrate-to-asm: by relabeling and restarting workloads in the following namespaces:
    migrate-to-asm:     namespace/default
    migrate-to-asm:
    Continue with migration? (Y/n)Y
    migrate-to-asm: Relabeling namespace/default...
    namespace/default labeled
    migrate-to-asm: Restarting workloads in namespace/default and waiting for them to become available (max 5 min)...
    deployment.apps/frontend restarted
    deployment.apps/backend restarted
    deployment.apps/frontend condition met
    deployment.apps/backend condition met
    migrate-to-asm: *******
    migrate-to-asm: Finished restarting workloads!
    
  2. Tunggu hingga semua Deployment dimulai ulang, lalu periksa versi bidang data dengan menjalankan perintah berikut:

    istioctl version
    

    Outputnya mirip dengan hal berikut ini:

    client version: 1.8.0
    pilot version: 1.9.5
    istiod version: 1.10.2-asm.2
    data plane version: 1.10.2-asm.2 (14 proxies)
    
  3. Verifikasi bahwa aplikasi berfungsi dengan baik setelah dimulai ulang.

Mengakses dasbor Anthos Service Mesh

Di bagian ini, Anda akan membuka dasbor Anthos Service Mesh dan memastikan Anda menerima sinyal emas untuk semua Layanan. Anda juga akan dapat melihat topologi aplikasi.

  1. Di konsol Google Cloud, buka halaman Anthos Service Mesh.

    Buka Anthos Service Mesh

  2. Anda akan dapat melihat metrik dan topologi untuk Layanan Anda.

Untuk mempelajari dasbor Anthos Service Mesh lebih lanjut, lihat Menjelajahi Anthos Service Mesh di Konsol Google Cloud.

Menyelesaikan migrasi

Sebelum menyelesaikan migrasi, pastikan semua aplikasi Anda berfungsi dengan benar. Setelah menyelesaikan migrasi, Anda tidak dapat melakukan roll back ke versi Istio yang ada. Menyelesaikan migrasi akan melakukan langkah-langkah berikut:

  • Proses ini memvalidasi bahwa semua proxy yang berjalan di cluster menggunakan Anthos Service Mesh.
  • Metode ini menghapus komponen Istio yang tidak digunakan dari cluster. Langkah ini tidak dapat dibatalkan.

Untuk menyelesaikan migrasi ke Anthos Service Mesh, jalankan perintah berikut:

 ./migrate-to-asm finalize \
     --cluster_location $CLUSTER_LOCATION \
     --cluster-name $CLUSTER_NAME \
     --project-id $PROJECT_ID
Outputnya mirip dengan hal berikut ini:
migrate-to-asm: Checking installation tool dependencies...
migrate-to-asm: Checking for asm-scriptaro-oss...
migrate-to-asm: All proxies running Anthos Service Mesh!
Remove previous control plane resources? (Y/n)
migrate-to-asm: ****
migrate-to-asm: Previous Istio control plane has been removed.

Melakukan roll back ke versi Istio yang ada

Jalankan langkah rollback untuk melabeli ulang namespace dengan label injeksi Istio sebelumnya, memulai ulang workload, dan roll back perubahan gateway. Setelah itu, alat ini akan menghapus semua komponen Anthos Service Mesh yang di-deploy di cluster.

Anda harus mengembalikan dependensi yang diaktifkan oleh langkah pra-migrasi secara manual.

Untuk melakukan roll back ke Istio, jalankan perintah berikut:

 ./migrate-to-asm rollback \
     --cluster_location $CLUSTER_LOCATION \
     --cluster-name $CLUSTER_NAME \
     --project-id $PROJECT_ID
Outputnya mirip dengan hal berikut ini:
migrate-to-asm: Checking installation tool dependencies...
migrate-to-asm: Checking for $PROJECT_ID...
******
migrate-to-asm: Rolling back migration by relabeling and restarting workloads
migrate-to-asm: in the following namespaces:
migrate-to-asm:     namespace/default
migrate-to-asm:
Continue with rollback? (Y/n)
migrate-to-asm: Relabeling namespace/default...
namespace/default labeled
migrate-to-asm: Restarting workloads in namespace/default and waiting for them to become available (max 5 min)...
deployment.apps/frontend restarted
deployment.apps/backend restarted
deployment.apps/frontend condition met
deployment.apps/backend condition met
migrate-to-asm: *******
migrate-to-asm: Finished restarting workloads!
service/istio-ingressgateway configured
deployment.apps/istio-ingressgateway configured
There are still 14 proxies pointing to the control plane revision asm-1102-2
istio-ingressgateway-66c85975d-2gt8c.istio-system
istio-ingressgateway-66c85975d-jdd96.istio-system
...
frontend-685dcb78d6-9l45j.default
If you proceed with the uninstall, these proxies will become detached from any control plane and will not function correctly.

Removed HorizontalPodAutoscaler:istio-system:istio-ingressgateway.
Removed HorizontalPodAutoscaler:istio-system:istiod-asm-1102-2.
...
Removed ClusterRoleBinding::mdp-controller.
✔ Uninstall complete
namespace "asm-system" deleted
migrate-to-asm: ****
migrate-to-asm: Anthos Service Mesh has been uninstalled from the cluster.

Lampiran

Membuat cluster GKE dengan Istio terinstal

Di bagian ini, Anda akan men-deploy cluster GKE dengan Istio diaktifkan. Anda dapat menggunakan cluster GKE pribadi atau nonpribadi. Cluster GKE pribadi harus memiliki endpoint GKE publik. Anda juga memverifikasi penginstalan Istio.

Jika sudah memiliki cluster GKE, Anda dapat melewati langkah pembuatan dan memastikan bahwa Anda memiliki akses ke cluster yang menggunakan file KUBECONFIG. Konteks yang digunakan panduan ini ditentukan dalam variabel ${CLUSTER_1_CTX}. Anda dapat menetapkan konteks cluster ke variabel ini.

  1. Buat variabel lingkungan yang digunakan dalam panduan ini:

    # Enter your project ID
    export PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    export PROJECT_NUM=$(gcloud projects describe ${PROJECT_ID} --format='value(projectNumber)')
    export CLUSTER_NAME=GKE_CLUSTER_NAME
    export CLUSTER_LOCATION=GKE_CLUSTER_REGION_OR_ZONE
    export CLUSTER_CTX=gke_${PROJECT_ID}_${CLUSTER_LOCATION}_${CLUSTER_NAME}
    export ISTIO_VERSION=ISTIO_VERSION # Must be versions 1.7 through 1.10 and must be of the form major.minor.patch, for example 1.7.4 or 1.9.5
    
  2. Buat cluster GKE dengan Istio diaktifkan (ini adalah cluster pribadi). Anda juga dapat melakukan langkah-langkah ini dengan cluster GKE non-pribadi.

    Cluster zona

    gcloud container clusters create ${CLUSTER_NAME} \
        --project ${PROJECT_ID} \
        --zone ${CLUSTER_LOCATION} \
        --machine-type "e2-standard-4" \
        --num-nodes "4" --min-nodes "2" --max-nodes "5" \
        --enable-ip-alias --enable-autoscaling
    

    Cluster regional

    gcloud container clusters create ${CLUSTER_NAME} \
        --project ${PROJECT_ID} \
        --region ${CLUSTER_LOCATION} \
        --machine-type "e2-standard-4" \
        --num-nodes "4" --min-nodes "2" --max-nodes "5" \
        --enable-ip-alias --enable-autoscaling
    
  3. Konfirmasi bahwa cluster adalah RUNNING:

     gcloud container clusters list
    

    Outputnya mirip dengan hal berikut ini:

    NAME      LOCATION    MASTER_VERSION    MASTER_IP      MACHINE_TYPE   NODE_VERSION      NUM_NODES  STATUS
    gke-east  us-east1-b  1.19.10-gke.1600  34.73.171.206  e2-standard-4  1.19.10-gke.1600  4          RUNNING
    
  4. Hubungkan ke cluster:

    Cluster zona

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
        --zone ${CLUSTER_LOCATION}
    

    Cluster regional

    gcloud container clusters get-credentials ${CLUSTER_NAME} \
        --region ${CLUSTER_LOCATION}
    

Jangan lupa membatalkan penetapan variabel KUBECONFIG di bagian akhir.

Instal Istio

Di bagian ini, Anda akan men-deploy Istio versi 1.7 ke cluster GKE.

  1. Download Istio:

    curl -L https://istio.io/downloadIstio | ISTIO_VERSION=${ISTIO_VERSION} TARGET_ARCH=x86_64 sh -
    
  2. Instal Istio menggunakan alat command line istioctl. Pilih salah satu opsi dari salah satu opsi berikut:

    • Opsi 1: tanpa resource IstioOperator kustom
    • Opsi 2: dengan resource IstioOperator kustom

    Opsi 1

    Tanpa resource IstioOperator kustom:

    ./istio-${ISTIO_VERSION}/bin/istioctl install --set profile=default -y
    

    Outputnya mirip dengan hal berikut ini:

    ✔ Istio core installed
    ✔ Istiod installed
    ✔ Ingress gateways installed
    ✔ Installation complete
    

    Opsi 2

    Dengan resource IstioOperator kustom:

    cat <<EOF > istio-operator.yaml
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    metadata:
     name: istio-operator
    spec:
     components:
       base:
         enabled: true
       ingressGateways:
       - enabled: true
         k8s:
           env:
           - name: TERMINATION_DRAIN_DURATION_SECONDS
             value: "10"
           hpaSpec:
             maxReplicas: 10
             metrics:
             - resource:
                 name: cpu
                 targetAverageUtilization: 80
               type: Resource
             minReplicas: 2
           resources:
             limits:
               cpu: "4"
               memory: 8Gi
             requests:
               cpu: "2"
               memory: 4Gi
           service:
             ports:
             - name: status-port
               port: 15021
               targetPort: 15021
             - name: http2
               port: 80
               targetPort: 8080
             - name: https
               port: 443
               targetPort: 8443
             - name: tls
               port: 15443
               targetPort: 15443
         name: istio-ingressgateway
       - enabled: true
         k8s:
           env:
           - name: TERMINATION_DRAIN_DURATION_SECONDS
             value: "10"
           hpaSpec:
             maxReplicas: 10
             minReplicas: 2
           resources:
             limits:
               cpu: "4"
               memory: 8Gi
             requests:
               cpu: "2"
               memory: 4Gi
           service:
             ports:
             - name: status-port
               port: 15021
               targetPort: 15021
             - name: http2
               port: 80
               targetPort: 8080
             - name: https
               port: 443
               targetPort: 8443
             - name: tls
               port: 15443
               targetPort: 15443
         label:
           istio: istio-api-ingressgateway
         name: istio-api-ingressgateway
     meshConfig:
       defaultConfig:
         tracing:
           sampling: 1
           zipkin:
             address: jaeger-collector.observability.svc.cluster.local:9411
       enableTracing: true
    EOF
    
    ./istio-${ISTIO_VERSION}/bin/istioctl install -f istio-operator.yaml -y
    

    Outputnya mirip dengan hal berikut ini:

    ✔ Istio core installed
    ✔ Istiod installed
    ✔ Ingress gateways installed
    ✔ Installation complete
    
  3. Pastikan Layanan dan Pod Istio di-deploy dan berjalan:

    kubectl --context=${CLUSTER_CTX} -n istio-system get services,pods
    

    Outputnya mirip dengan hal berikut ini:

    Opsi 1

    Tanpa resource IstioOperator kustom:

    NAME                           TYPE           CLUSTER-IP     EXTERNAL-IP         PORT(S)                                                      AGE
    service/istio-ingressgateway   LoadBalancer   10.64.5.113    <pending>           15021:31285/TCP,80:31740/TCP,443:30753/TCP,15443:31246/TCP   33s
    service/istiod                 ClusterIP      10.64.15.184   <none>              15010/TCP,15012/TCP,443/TCP,15014/TCP,853/TCP                45s
    
    NAME                                        READY   STATUS    RESTARTS   AGE
    pod/istio-ingressgateway-6f44d6745b-22q9h   1/1     Running   0          34s
    pod/istiod-b89f5cc6-nhsrc                   1/1     Running   0          48s
    

    Opsi 2

    Dengan resource IstioOperator kustom:

    NAME                               TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                                                      AGE
    service/istio-api-ingressgateway   LoadBalancer   10.100.0.84    104.196.26.108   15021:32489/TCP,80:30083/TCP,443:30565/TCP,15443:30705/TCP   76s
    service/istio-ingressgateway       LoadBalancer   10.100.3.221   34.139.111.125   15021:30966/TCP,80:31557/TCP,443:31016/TCP,15443:31574/TCP   75s
    service/istiod                     ClusterIP      10.100.13.72   <none>           15010/TCP,15012/TCP,443/TCP,15014/TCP                        86s
    
    NAME                                            READY   STATUS    RESTARTS   AGE
    pod/istio-api-ingressgateway-79978ddc65-hslbv   1/1     Running   0          61s
    pod/istio-api-ingressgateway-79978ddc65-z92w8   1/1     Running   0          77s
    pod/istio-ingressgateway-fb47c4859-pkdn7        1/1     Running   0          60s
    pod/istio-ingressgateway-fb47c4859-t2pfq        1/1     Running   0          77s
    pod/istiod-9445656d7-fxk9j                      1/1     Running   0          89s
    

Terapkan Butik Online

Di bagian ini, Anda akan men-deploy contoh aplikasi berbasis microservice yang disebut Online Boutique ke cluster GKE. Butik Online diterapkan di namespace yang mendukung Istio. Anda memverifikasi bahwa aplikasi berfungsi dan bahwa Istio memasukkan proxy file bantuan ke setiap Pod.

Jika sudah memiliki cluster yang dilengkapi aplikasi, Anda dapat melewati proses pembuatan namespace baru dan men-deploy Butik Online. Anda dapat mengikuti proses yang sama untuk semua namespace di bagian Menginstal Anthos Service Mesh dan menyiapkan workload.

  1. Men-deploy Butik Online ke cluster GKE:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/microservices-demo.git/release \
    online-boutique
    
    kubectl --context=${CLUSTER_CTX} create namespace online-boutique
    kubectl --context=${CLUSTER_CTX} label namespace online-boutique istio-injection=enabled
    
    kubectl --context=${CLUSTER_CTX} -n online-boutique apply -f online-boutique
    
  2. Tunggu hingga semua Deployment siap:

    kubectl --context=${CLUSTER_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment adservice
    kubectl --context=${CLUSTER_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment checkoutservice
    kubectl --context=${CLUSTER_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment currencyservice
    kubectl --context=${CLUSTER_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment emailservice
    kubectl --context=${CLUSTER_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment frontend
    kubectl --context=${CLUSTER_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment paymentservice
    kubectl --context=${CLUSTER_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment productcatalogservice
    kubectl --context=${CLUSTER_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment shippingservice
    kubectl --context=${CLUSTER_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment cartservice
    kubectl --context=${CLUSTER_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment loadgenerator
    kubectl --context=${CLUSTER_CTX} -n online-boutique wait --for=condition=available --timeout=5m deployment recommendationservice
    
  3. Pastikan ada dua container per Pod—container aplikasi dan proxy sidecar Istio yang dimasukkan secara otomatis oleh Istio ke dalam Pod:

    kubectl --context=${CLUSTER_CTX} -n online-boutique get pods
    

    Outputnya mirip dengan hal berikut ini:

    NAME                                     READY   STATUS    RESTARTS   AGE
    adservice-7cbc9bd9-t92k4                 2/2     Running   0          3m21s
    cartservice-d7db78c66-5qfmt              2/2     Running   1          3m23s
    checkoutservice-784bfc794f-j8rl5         2/2     Running   0          3m26s
    currencyservice-5898885559-lkwg4         2/2     Running   0          3m23s
    emailservice-6bd8b47657-llvgv            2/2     Running   0          3m27s
    frontend-764c5c755f-9wf97                2/2     Running   0          3m25s
    loadgenerator-84cbcd768c-5pdbr           2/2     Running   3          3m23s
    paymentservice-6c676df669-s779c          2/2     Running   0          3m25s
    productcatalogservice-7fcf4f8cc-hvf5x    2/2     Running   0          3m24s
    recommendationservice-79f5f4bbf5-6st24   2/2     Running   0          3m26s
    redis-cart-74594bd569-pfhkz              2/2     Running   0          3m22s
    shippingservice-b5879cdbf-5z7m5          2/2     Running   0          3m22s
    
  4. Anda juga dapat memeriksa versi proxy Envoy file bantuan dari salah satu Pod untuk memastikan bahwa Anda telah men-deploy proxy Istio versi 1.4 Envoy:

    export FRONTEND_POD=$(kubectl get pod -n online-boutique -l app=frontend --context=${CLUSTER_CTX} -o jsonpath='{.items[0].metadata.name}')
    kubectl --context=${CLUSTER_CTX} get pods ${FRONTEND_POD} -n online-boutique -o json | jq '.status.containerStatuses[].image'
    

    Outputnya mirip dengan hal berikut ini:

    "docker.io/istio/proxyv2:1.7.4"
    "gcr.io/google-samples/microservices-demo/frontend:v0.3.4"
    
  5. Akses aplikasi dengan membuka alamat IP alamat IP Layanan istio-ingressgateway:

    kubectl --context=${CLUSTER_CTX} -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
    

Langkah selanjutnya