Memigrasikan bidang kontrol dalam cluster ke bidang kontrol terkelola di cluster baru
Tutorial ini menunjukkan cara memigrasikan aplikasi dari cluster Google Kubernetes Engine (GKE) menggunakan Cloud Service Mesh dalam cluster ke cluster baru menggunakan Cloud Service Mesh terkelola — mesh layanan yang sepenuhnya terkelola dan kompatibel dengan Istio dari Google.
Dalam tutorial ini, Anda telah:
- Buat cluster Google Kubernetes Engine baru, lalu instal Cloud Service Mesh dalam cluster dan gateway ingress Cloud Service Mesh di cluster. Cluster ini akan bertindak sebagai cluster yang ada yang ingin Anda migrasikan.
- Deploy aplikasi contoh Online Boutique ke cluster dengan Cloud Service Mesh dalam cluster.
- Buat cluster Google Kubernetes Engine lain, di project Google Cloud yang sama.
- Sediakan Cloud Service Mesh terkelola di cluster kedua dan deploy gateway ingress Cloud Service Mesh.
- Deploy Online Boutique ke cluster dengan Cloud Service Mesh terkelola untuk mereplikasi deployment dari cluster dengan Cloud Service Mesh dalam cluster.
- Alihkan 50% traffic pengguna dari cluster dengan Cloud Service Mesh dalam cluster ke cluster dengan Cloud Service Mesh terkelola, dengan menggunakan kemampuan pemisahan traffic Istio di cluster dengan Cloud Service Mesh dalam cluster.
- Selesaikan migrasi dari Cloud Service Mesh dalam cluster ke Cloud Service Mesh terkelola dengan mengarahkan entri sistem nama domain (DNS) cluster dengan Cloud Service Mesh dalam cluster ke cluster dengan Cloud Service Mesh terkelola.
Deployment canary
"Deployment kenari" adalah teknik yang digunakan dalam pengembangan software untuk menguji versi baru software tertentu sebelum merilis versi baru tersebut kepada semua pengguna. Cara ini melibatkan peningkatan secara bertahap persentase traffic yang dikirim ke versi baru. Dalam tutorial ini, Anda akan menyiapkan cluster baru dengan Cloud Service Mesh terkelola dan secara bertahap mengalihkan traffic pengguna ke cluster tersebut. Anda akan memulai dengan mengarahkan 0% traffic pengguna ke cluster baru, lalu 50%, dan terakhir, 100%. Dalam produksi, Anda harus menggunakan kenaikan yang lebih kecil dan lebih banyak. Jika pada suatu saat Anda melihat bahwa cluster baru tidak dapat menangani persentase traffic, Anda dapat melakukan rollback dengan mengurangi persentase menjadi 0%.
Bidang kontrol canary versus cluster canary
Ada dua strategi yang umum digunakan untuk migrasi dari Cloud Service Mesh dalam cluster ke Cloud Service Mesh terkelola:
- Migrasi cluster Canary: Dalam strategi ini, Anda membuat cluster baru dan kemudian menyediakan Cloud Service Mesh terkelola di cluster tersebut.
- Migrasi bidang kontrol canary: Dalam strategi ini, Anda menyediakan Cloud Service Mesh terkelola di cluster yang sama tempat Cloud Service Mesh dalam cluster diinstal. Ini bukan jalur migrasi yang didukung dengan Cloud Service Mesh.
Dalam tutorial ini, Anda akan mempelajari strategi migrasi cluster canary.
Biaya
Tutorial ini menggunakan komponen Google Cloudyang dapat ditagih berikut:
Setelah menyelesaikan tutorial ini, Anda dapat menghindari biaya berkelanjutan dengan menghapus resource yang Anda buat. Untuk informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the required APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the required APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Meluncurkan Cloud Shell
Dalam tutorial ini, Anda akan menggunakan Cloud Shell, yang merupakan lingkungan shell yang dihosting di Google Cloud yang memungkinkan Anda mengelola resourceGoogle Cloud .
Cloud Shell telah diinstal dengan alat command line Google Cloud CLI, kubectl, dan istioctl. gcloud CLI menyediakan CLI utama untuk Google Cloud.
Buka sesi Cloud Shell dari pojok kanan atas halaman ini, klik terminal, lalu klik Acknowledge. Sesi Cloud Shell akan terbuka di dalam frame yang lebih rendah di halaman. Selesaikan perintah berikut dalam sesi Cloud Shell tersebut.
Mendownload kode contoh
Clone repositori git yang berisi resource Kubernetes dan Istio yang akan Anda gunakan:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
Menyiapkan cluster dengan Cloud Service Mesh dalam cluster
Buat cluster dan instal Cloud Service Mesh dalam cluster
Di bagian ini, Anda akan membuat cluster yang menggunakan Cloud Service Mesh dalam cluster. Dalam praktiknya, ini adalah cluster yang sudah Anda gunakan.
Ganti
PROJECT_IDdengan project ID Anda dan buat cluster baru:gcloud container clusters create cluster-with-in-cluster-asm \ --project=PROJECT_ID \ --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool=PROJECT_ID.svc.id.googGanti nama konteks cluster agar cluster lebih mudah digunakan:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-in-cluster-asm \ cluster-with-in-cluster-asmPeriksa apakah konteks cluster telah diganti namanya:
kubectl config get-contexts --output="name"Download versi yang menginstal Cloud Service Mesh 1.23.6 ke direktori kerja saat ini:
curl https://storage.googleapis.com/csm-artifacts/asm/asmcli_1.23 > asmcliAnda akan diminta untuk mengetik "y", lalu tekan Enter.
Outputnya mirip dengan:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 167k 100 167k 0 0 701k 0 --:--:-- --:--:-- --:--:-- 701kBuat agar skrip
asmclidapat dieksekusi:chmod +x asmcliInstal Cloud Service Mesh dalam cluster menggunakan
asmcli:./asmcli install \ --project_id PROJECT_ID \ --cluster_name cluster-with-in-cluster-asm \ --cluster_location us-central1-a \ --output_dir . \ --enable_all \ --ca mesh_caMungkin perlu waktu beberapa menit hingga alat
asmcliselesai. Alat ini menampilkan pesan informasi sehingga Anda dapat mengikuti progresnya.Jika berhasil, outputnya akan mirip dengan:
... asmcli: Successfully installed ASM.
Men-deploy gateway traffic masuk Cloud Service Mesh
Anda akan men-deploy gateway ingress Cloud Service Mesh ke namespace terpisah yang disebut
asm-ingress. Buat namespace:kubectl \ --context cluster-with-in-cluster-asm \ create namespace asm-ingressGunakan label
istio.io/rev=asm-1236-11untuk menambahkan namespaceasm-ingresske service mesh dan mengaktifkan injeksi proxy sidecar otomatis.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace asm-ingress istio.io/rev=asm-1236-11Outputnya mirip dengan:
namespace/asm-ingress labeledMen-deploy gateway masuk Cloud Service Mesh:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yamlOutputnya mirip dengan:
serviceaccount/asm-ingressgateway created service/asm-ingressgateway created deployment.apps/asm-ingressgateway created gateway.networking.istio.io/asm-ingressgateway created
Men-deploy Online Boutique
Anda akan men-deploy Online Boutique ke namespace terpisah yang disebut
onlineboutique. Buat namespace:kubectl \ --context cluster-with-in-cluster-asm \ create namespace onlineboutiqueGunakan label
istio.io/rev=asm-1236-11untuk menambahkan namespaceonlineboutiqueke service mesh dan mengaktifkan injeksi proxy sidecar otomatis.kubectl \ --context cluster-with-in-cluster-asm \ label --overwrite namespace onlineboutique istio.io/rev=asm-1236-11Outputnya mirip dengan:
namespace/onlineboutique labeledDeploy 12 layanan Online Boutique, termasuk generator beban yang meniru traffic pengguna:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-in-cluster-asm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yamlDapatkan alamat IP eksternal gateway ingress Cloud Service Mesh:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'Salin alamat IP eksternal gateway ingress, lalu akses melalui browser web Anda. Anda akan melihat aplikasi contoh Butik Online.
Siapkan cluster baru dengan Cloud Service Mesh terkelola
Buat cluster dan sediakan Cloud Service Mesh terkelola
Di bagian ini, Anda akan membuat cluster yang akan dimigrasikan. Anda akan menyediakan Cloud Service Mesh terkelola, dan men-deploy Online Boutique untuk mereplikasi deployment dari cluster yang menggunakan Cloud Service Mesh dalam cluster.
Membuat cluster baru:
gcloud container clusters create cluster-with-csm \ --project=PROJECT_ID --zone=us-central1-a \ --machine-type=e2-standard-4 --num-nodes=2 \ --workload-pool PROJECT_ID.svc.id.googGanti nama konteks cluster agar cluster lebih mudah digunakan:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-csm \ cluster-with-csmPeriksa apakah konteks cluster telah diganti namanya:
kubectl config get-contexts --output="name"Aktifkan Cloud Service Mesh di fleet project Anda. Fleet adalah pengelompokan logis cluster Kubernetes dan resource lain yang dapat dikelola bersama.
gcloud container fleet mesh enable --project PROJECT_IDOutputnya mirip dengan:
Waiting for Feature Service Mesh to be created...done.Daftarkan cluster ke fleet project:
gcloud container fleet memberships register cluster-with-csm-membership \ --gke-cluster=us-central1-a/cluster-with-csm \ --enable-workload-identity \ --project PROJECT_IDOutputnya mirip dengan:
Waiting for membership to be created...done. Finished registering to the Fleet.Aktifkan Cloud Service Mesh terkelola di cluster:
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-csm-membership \ --project PROJECT_IDOutputnya mirip dengan:
Waiting for Feature Service Mesh to be updated...done.Pastikan bahwa Cloud Service Mesh terkelola telah disediakan untuk cluster dan siap digunakan:
gcloud container fleet mesh describe --project PROJECT_IDMungkin perlu waktu sekitar 10 menit agar Cloud Service Mesh dapat melakukan penyediaan dan siap digunakan di cluster. Jika Anda melihat
controlPlaneManagement.state: DISABLEDataucontrolPlaneManagement.state: PROVISIONING, Anda harus menjalankan kembali perintah sebelumnya setiap beberapa menit hingga Anda melihatcontrolPlaneManagement.state: ACTIVE.Outputnya mirip dengan:
createTime: '2022-07-06T01:05:39.110120474Z' membershipSpecs: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/123456789123/locations/global/memberships/cluster-with-csm-membership: servicemesh: controlPlaneManagement: details: - code: REVISION_READY details: 'Ready: asm-managed' state: ACTIVE dataPlaneManagement: details: - code: OK details: Service is running. state: ACTIVE state: code: OK description: 'Revision(s) ready for use: asm-managed.' updateTime: '2022-07-06T01:19:24.243993678Z' name: projects/your-project-id/locations/global/features/servicemesh resourceState: state: ACTIVE spec: {} state: state: {} updateTime: '2022-07-06T01:19:27.475885687Z'
Men-deploy gateway traffic masuk Cloud Service Mesh
Anda akan men-deploy gateway ingress Cloud Service Mesh ke namespace terpisah yang disebut
asm-ingress. Buat namespace:kubectl \ --context cluster-with-csm \ create namespace asm-ingressGunakan label
istio.io/rev=asm-manageduntuk menambahkan namespaceasm-ingresske service mesh dan mengaktifkan injeksi proxy sidecar otomatis.kubectl \ --context cluster-with-csm \ label namespace asm-ingress 'istio.io/rev=asm-managed'Men-deploy gateway masuk Cloud Service Mesh:
kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/asm-gateway-deployment-svc.yaml kubectl \ --context cluster-with-csm \ --namespace=asm-ingress \ apply -f anthos-service-mesh-samples/docs/shared/asm-ingress-gateway/gateway.yamlOutputnya mirip dengan:
namespace/asm-ingress configured serviceaccount/asm-ingressgateway configured service/asm-ingressgateway configured deployment.apps/asm-ingressgateway configured gateway.networking.istio.io/asm-ingressgateway configured
Men-deploy Online Boutique
Anda akan men-deploy Online Boutique ke namespace terpisah yang disebut
onlineboutique. Buat namespace:kubectl \ --context cluster-with-csm \ create namespace onlineboutiqueGunakan label
istio.io/rev=asm-manageduntuk menambahkan namespaceonlineboutiqueke service mesh dan mengaktifkan injeksi proxy sidecar otomatis.kubectl \ --context cluster-with-csm \ label namespace onlineboutique 'istio.io/rev=asm-managed'Deploy 12 layanan Online Boutique, termasuk generator beban yang meniru traffic pengguna:
kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/kubernetes-manifests.yaml kubectl \ --context cluster-with-csm \ --namespace=onlineboutique \ apply -f anthos-service-mesh-samples/docs/shared/online-boutique/virtual-service.yamlDapatkan alamat IP eksternal gateway ingress Cloud Service Mesh:
kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'Salin alamat IP eksternal Layanan
asm-ingressgateway, lalu akses melalui browser web Anda. Anda akan melihat aplikasi contoh Online Boutique. Anda akan menggunakan alamat IP eksternal di bagian berikutnya, jadi salin ke dalam variabel lingkungan:export INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM=$( \ kubectl \ --context cluster-with-csm \ --namespace asm-ingress \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}' \ )
Menguji cluster dengan Cloud Service Mesh menggunakan deployment canary
Di bagian ini, Anda akan mengonfigurasi cluster dengan Cloud Service Mesh dalam cluster sehingga 50% traffic pengguna ke Online Boutique dialihkan ke instance Online Boutique di cluster dengan Cloud Service Mesh terkelola. Untuk melakukannya, Anda men-deploy dua resource Istio ke cluster dengan Cloud Service Mesh dalam cluster:
- ServiceEntry untuk memberi tahu Cloud Service Mesh dalam cluster tentang endpoint Online Boutique cluster Cloud Service Mesh terkelola
- VirtualService untuk memberi tahu gateway masuk Cloud Service Mesh dalam cluster agar membagi traffic 50-50.
Tetapkan alamat IP gateway ingress cluster Managed Cloud Service Mesh di dalam resource
ServiceEntry:sed -i "s/1.2.3.4/${INGRESS_IP_OF_CLUSTER_WITH_MANAGED_ASM}/" anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yamlDeploy
ServiceEntryke cluster dengan Cloud Service Mesh dalam cluster:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yamlDeploy
VirtualServiceke cluster dengan Cloud Service Mesh dalam cluster:kubectl \ --context cluster-with-in-cluster-asm \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service-in-cluster-asm.yamlBuka alamat IP gateway ingress cluster dengan Cloud Service Mesh dalam cluster, di browser web Anda:
kubectl \ --context cluster-with-in-cluster-asm \ --namespace asm-ingress \ get serviceMuat ulang halaman beranda Online Boutique beberapa kali, dan periksa footer halaman setiap kali. Perhatikan bahwa 50% permintaan ditangani oleh Pod di cluster dengan Cloud Service Mesh terkelola.
Bermigrasi ke cluster dengan Cloud Service Mesh terkelola
Bagian ini mengasumsikan bahwa Anda memiliki nama domain dan memiliki akses ke setelan DNS (Domain Name Server) domain tersebut.
Tambahkan data A ke setelan DNS untuk mengarahkan nama domain (seperti example.com) ke alamat IP gateway ingress yang berjalan di cluster dengan Cloud Service Mesh dalam cluster.
Akses Online Boutique dengan membuka nama domain di browser web Anda.
Minimalkan time to live (TTL) data DNS untuk memastikan Anda dapat dengan cepat mengembalikan entri DNS jika perlu melakukan rollback.
Tetapkan data A nama domain Anda ke alamat IP eksternal gateway ingress cluster dengan Cloud Service Mesh terkelola.
Jika migrasi berhasil, hapus cluster dengan Cloud Service Mesh dalam cluster:
gcloud container clusters delete cluster-with-in-cluster-asm \ --zone=us-central1-a \ --project=PROJECT_ID
Pembersihan
Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Hapus project
- Di Konsol Google Cloud , buka halaman Manage resources.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus resource
Menghapus cluster dengan Cloud Service Mesh terkelola:
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID
Langkah berikutnya
- Pelajari Managed Cloud Service Mesh.
- Pelajari praktik terbaik keamanan Cloud Service Mesh.