Bermigrasi dari Istio 1.11 atau yang lebih baru ke Cloud Service Mesh
Tutorial ini menampilkan cara memigrasikan aplikasi dari Cluster Google Kubernetes Engine (GKE) menggunakan Istio ke cluster baru menggunakan Cloud Service Mesh — Mesh layanan Google yang terkelola sepenuhnya dan sesuai dengan Istio.
Dalam tutorial ini, Anda telah:
- Membuat cluster Google Kubernetes Engine baru, lalu menginstal Istio dan Istio traffic masuk di cluster. Cluster ini akan berfungsi sebagai cluster cluster yang ingin Anda migrasikan.
- Men-deploy Butik Online aplikasi contoh ke cluster dengan Istio.
- Buat cluster Google Kubernetes Engine lain, di project Google Cloud yang sama.
- Aktifkan Cloud Service Mesh terkelola pada cluster kedua dan deploy Gateway masuk Cloud Service Mesh.
- Deploy Online Boutique ke cluster dengan Cloud Service Mesh untuk mereplikasi metode deployment dari cluster dengan Istio.
- Alihkan 50% traffic pengguna dari cluster dengan Istio ke cluster dengan Cloud Service Mesh, dengan menggunakan kemampuan pemisahan traffic Istio di cluster dengan Istio.
- Selesaikan migrasi dari Istio ke Cloud Service Mesh dengan mengarahkan domain entri sistem nama (DNS) cluster dengan Istio ke cluster dengan dan Cloud Service Mesh.
Deployment canary
"Deployment canary" adalah teknik yang digunakan dalam pengembangan perangkat lunak untuk menguji dari beberapa perangkat lunak sebelum merilis versi baru itu ke semua pengguna. Ini melibatkan peningkatan persentase traffic yang dikirim ke platform baru secara bertahap . Dalam tutorial ini, Anda akan menyiapkan cluster baru dengan Cloud Service Mesh dan secara bertahap mengalihkan traffic pengguna ke layanan tersebut. Anda akan memulainya dengan mengarahkan 0% traffic pengguna ke cluster baru, lalu 50%, dan terakhir, 100%. Dalam produksi, Anda harus menggunakan penambahan yang lebih kecil dan lebih banyak. Jika suatu saat Anda perhatikan bahwa cluster baru tidak mampu menangani sebagian traffic, Anda dapat melakukan rollback dengan mengurangi persentasenya menjadi 0%.
Bidang kontrol canary versus cluster canary
Ada dua strategi yang umum digunakan untuk migrasi dari Istio ke Cloud Service Mesh terkelola:
- Migrasi bidang kontrol canary: Dalam strategi ini, Anda menyediakan Cloud Service Mesh yang terkelola pada cluster yang sama Istio diinstal.
- Migrasi cluster canary: Dalam strategi ini, Anda akan membuat cluster baru dan kemudian menyediakan Cloud Service Mesh yang terkelola di dalamnya.
Dalam tutorial ini, Anda akan mempelajari strategi migrasi cluster canary.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih berikut:
Setelah menyelesaikan tutorial ini, Anda dapat menghindari biaya berkelanjutan dengan menghapus resource yang telah dibuat. Untuk informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API yang diperlukan.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API yang diperlukan.
Meluncurkan Cloud Shell
Dalam tutorial ini, Anda akan menggunakan Cloud Shell, yang merupakan shell yang dihosting di Google Cloud dan memungkinkan Anda mengelola akses terperinci ke resource Google Cloud tertentu.
Cloud Shell telah dilengkapi dengan Google Cloud CLI, kubectl, dan istioctl baris perintah. gcloud CLI menyediakan CLI utama untuk Google Cloud.
Buka sesi Cloud Shell dari pojok kanan atas halaman, klik terminal lalu klik Konfirmasi. Sesi Cloud Shell akan terbuka di dalam frame yang lebih rendah pada halaman. Selesaikan perintah berikut di Cloud Shell tersebut sesi.
Mendownload kode contoh
Buat clone repositori git yang berisi resource Kubernetes dan Istio yang akan menggunakan:
git clone https://github.com/GoogleCloudPlatform/anthos-service-mesh-samples.git
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
Menyiapkan cluster dengan Istio
Membuat cluster dan menginstal Istio
Di bagian ini, Anda akan membuat cluster yang menggunakan Istio. Dalam praktiknya, hal ini akan menjadi cluster yang sudah Anda gunakan.
Ganti
PROJECT_ID
dengan project ID, lalu buat cluster baru:gcloud container clusters create cluster-with-istio \ --project=PROJECT_ID \ --zone=us-central1-a \ --machine-type=e2-standard-2 --num-nodes=3
Ganti nama konteks cluster sehingga cluster lebih mudah digunakan:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-istio \ cluster-with-istio
Pastikan konteks cluster telah diganti namanya:
kubectl config get-contexts --output="name"
Instal Istio di cluster. Untuk penyederhanaan, Anda akan menginstal {i>default <i} profil Istio dan versi yang cocok dengan penginstalan
istioctl
Anda.istioctl install
Anda akan diminta untuk mengetik "y" dan kemudian tekan Enter.
Outputnya mirip dengan:
This will install the Istio X.Y.Z default profile with ["Istio core" "Istiod" "Ingress gateways"] components into the cluster. Proceed? (y/N) ✔ Istio core installed ✔ Istiod installed ✔ Ingress gateways installed ✔ Installation complete Making this installation the default for injection and validation.
Deploy Butik Online
Anda akan men-deploy Online Boutique ke dalam namespace terpisah yang disebut
onlineboutique
. Buat namespace:kubectl \ --context cluster-with-istio \ create namespace onlineboutique
Terapkan 12 layanan Boutique Online, yang mencakup generator beban yang meniru traffic pengguna:
kubectl \ --namespace=onlineboutique \ --context=cluster-with-istio \ apply -f microservices-demo/release/kubernetes-manifests.yaml
Langkah sebelumnya juga men-deploy layanan yang disebut
frontend-external
(dari jenisLoadBalancer
) yang mendapat alamat IP eksternal. Namun, Anda hanya ingin mengizinkan traffic masuk publik melalui gateway masuk Istio deployment. Hapus resource layananfrontend-external
:kubectl \ --namespace=onlineboutique \ --context=cluster-with-istio \ delete service frontend-external
Deploy resource Istio
Gateway
dan resource IstioVirtualService
bagi traffic publik untuk mengakses Boutique Online:kubectl \ --namespace=onlineboutique \ --context=cluster-with-istio \ apply -f microservices-demo/istio-manifests/frontend-gateway.yaml
Dapatkan alamat IP eksternal dari gateway masuk Istio:
kubectl \ --namespace istio-system \ --context=cluster-with-istio \ get service --output jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}'
Salin alamat IP eksternal layanan
istio-ingressgateway
, lalu mengaksesnya melalui {i>browser<i} web. Anda akan melihat contoh Online Boutique .
Menyiapkan cluster baru dengan Cloud Service Mesh terkelola
Membuat cluster dan menyediakan 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 Istio.
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.goog
Ganti nama konteks cluster sehingga cluster lebih mudah digunakan:
kubectl config rename-context \ gke_PROJECT_ID_us-central1-a_cluster-with-csm \ cluster-with-csm
Pastikan konteks cluster telah diganti namanya:
kubectl config get-contexts --output="name"
Aktifkan Cloud Service Mesh di fleet project Anda. J fleet adalah model pengelompokan cluster Kubernetes dan resource lain yang dapat dikelola secara bersamaan.
gcloud container fleet mesh enable --project PROJECT_ID
Outputnya 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_ID
Outputnya mirip dengan:
Waiting for membership to be created...done. Finished registering to the Fleet.
Aktifkan Cloud Service Mesh terkelola pada cluster:
gcloud container fleet mesh update \ --management automatic \ --memberships cluster-with-csm-membership \ --project PROJECT_ID
Outputnya mirip dengan:
Waiting for Feature Service Mesh to be updated...done.
Memverifikasi bahwa Cloud Service Mesh terkelola telah disediakan untuk cluster dan siap digunakan:
gcloud container fleet mesh describe --project PROJECT_ID
Butuh waktu sekitar 10 menit bagi Cloud Service Mesh untuk melakukan penyediaan dan siap digunakan di cluster. Jika Anda melihat
controlPlaneManagement.state: DISABLED
ataucontrolPlaneManagement.state: PROVISIONING
, Anda harus menjalankan ulang metode perintah sebelumnya setiap beberapa menit sampai 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 masuk Cloud Service Mesh
Anda akan men-deploy gateway masuk Cloud Service Mesh ke dalam namespace bernama
asm-ingress
. Buat namespace:kubectl \ --context cluster-with-csm \ create namespace asm-ingress
Gunakan label
istio.io/rev=asm-managed
untuk menambahkan namespaceasm-ingress
ke mesh layanan dan mengaktifkan injeksi proxy file bantuan otomatis.kubectl \ --context cluster-with-csm \ label namespace asm-ingress 'istio.io/rev=asm-managed'
Men-deploy Mesh Layanan Cloud gateway masuk:
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.yaml
Outputnya 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
Deploy Butik Online
Anda akan men-deploy Online Boutique ke dalam namespace terpisah yang disebut
onlineboutique
. Buat namespace:kubectl \ --context cluster-with-csm \ create namespace onlineboutique
Gunakan label
istio.io/rev=asm-managed
untuk menambahkanonlineboutique
namespace ke mesh layanan dan mengaktifkan injeksi proxy file bantuan otomatis.kubectl \ --context cluster-with-csm \ label namespace onlineboutique 'istio.io/rev=asm-managed'
Terapkan 12 layanan Boutique Online, 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.yaml
Dapatkan alamat IP eksternal gateway masuk 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
, dan akses melalui {i>browser<i} internet Anda. Anda akan melihat aplikasi contoh Butik Online. Anda akan menggunakan alamat IP eksternal di bagian berikutnya, jadi salin alamat tersebut ke variabel lingkungan (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 Istio sehingga 50% traffic pengguna ke Butik Online dialihkan ke instance Online Butik di cluster dengan Cloud Service Mesh terkelola. Untuk mencapai hal ini, Anda men-deploy dua resource Istio ke cluster dengan Istio:
- ServiceEntry untuk memberi tahu Istio tentang Mesh Layanan Cloud yang terkelola endpoint Butik Online cluster
- VirtualService untuk memberi tahu gateway masuk Istio untuk membagi traffic 50-50.
Menetapkan alamat IP gateway masuk cluster Cloud Service Mesh terkelola 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.yaml
Deploy
ServiceEntry
ke cluster dengan Istio:kubectl \ --context cluster-with-istio \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/service-entry.yaml
Deploy
VirtualService
ke cluster dengan Istio:kubectl \ --context cluster-with-istio \ --namespace onlineboutique \ apply -f anthos-service-mesh-samples/docs/migrate-to-managed-asm/virtual-service.yaml
Kunjungi alamat IP gateway masuk cluster dengan Istio, di browser web Anda:
kubectl \ --context cluster-with-istio \ --namespace istio-system \ get service
Segarkan beranda Butik Online beberapa kali, dan periksa {i>footer<i} halaman setiap saat. 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 DNS-nya (Server Nama Domain).
Tambahkan data A ke setelan DNS untuk mengarahkan nama domain (seperti example.com) ke alamat IP gateway masuk yang berjalan di cluster dengan Istio.
Akses Online Boutique dengan mengunjungi nama domain di browser web Anda.
Minimalkan waktu data DNS (TTL) untuk memastikan Anda dapat mengembalikan data entri DNS jika Anda perlu melakukan rollback.
Setel data A nama domain ke alamat IP eksternal gateway masuk cluster dengan Cloud Service Mesh terkelola.
Setelah migrasi berhasil, hapus cluster yang berisi Istio:
gcloud container clusters delete cluster-with-istio \ --zone=us-central1-a \ --project=PROJECT_ID
Pembersihan
Agar tidak menimbulkan biaya ke akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource, atau mempertahankan proyek dan menghapus sumber daya individu.
Hapus project
- Di konsol Google Cloud, buka halaman Manage resource.
- 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
Hapus cluster dengan Cloud Service Mesh terkelola:
gcloud container clusters delete cluster-with-managed-asm \
--zone=us-central1-a \
--project=PROJECT_ID
Langkah selanjutnya
- Pelajari tentang Mesh Layanan Cloud Terkelola.
- Pelajari tentang Praktik terbaik keamanan Cloud Service Mesh.