Saat bermigrasi dari penerapan Istio yang dikelola sendiri ke Service Mesh (ASM), Anda perlu memindahkan traffic ingress. Panduan ini menjelaskan pendekatan pemindahan traffic berbasis bobot: gerbang masuk Istio yang ada dan gerbang masuk ASM yang baru berbagi instans Classic Load Balancer (CLB) yang sama, serta Anda mengontrol distribusi traffic dengan menyesuaikan bobot kelompok vServer.

Prasyarat
Instans ASM telah dibuat dan kluster Kubernetes target telah ditambahkan ke mesh.
Anda memiliki akses administrator ke kluster Kubernetes tempat gerbang masuk Istio yang dikelola sendiri berjalan.
Anda memiliki akses ke konsol CLB untuk mengelola label load balancer dan kelompok vServer.
Gerbang masuk Istio yang dikelola sendiri sedang berjalan dan menangani traffic secara normal.
Pilih strategi pemindahan traffic
Anda memiliki dua opsi untuk mengarahkan ulang traffic ke gerbang masuk ASM:
| Strategi | Kapan digunakan | Cara kerja |
|---|---|---|
| DNS-based switching | Anda dapat memodifikasi rekaman DNS secara langsung. | Perbarui rekaman Domain Name System (DNS) domain Anda agar mengarah ke alamat IP gerbang masuk ASM. |
| Weight-based shifting | Anda tidak dapat memodifikasi rekaman DNS atau memerlukan migrasi bertahap dan terkendali. | Kedua gerbang berbagi instans CLB; sesuaikan bobot kelompok vServer untuk memindahkan traffic secara bertahap. |
Panduan ini berfokus pada weight-based shifting. Jika Anda menggunakan DNS-based switching, lewati konfigurasi penggunaan ulang CLB dan perbarui rekaman DNS Anda setelah membuat gerbang masuk ASM.
Buat gerbang masuk ASM
Buat gerbang masuk ASM di kluster Kubernetes yang sama dengan gerbang masuk Istio yang dikelola sendiri. Untuk petunjuk lengkap, lihat Create an ingress gateway.
Saat membuat gerbang tersebut:
Gunakan nama yang berbeda. Nama gerbang masuk ASM harus berbeda dari nama gerbang masuk Istio yang sudah ada. Tambahkan
-asmuntuk membedakannya—misalnya,ingressgateway-asm.Deploy ke kluster yang sama. Pada Langkah 3 topik Create an ingress gateway, atur parameter Cluster ke kluster Kubernetes tempat gerbang masuk Istio sumber berada.
Verifikasi gerbang
Setelah membuat gerbang masuk ASM, pastikan Pod gerbang tersebut sedang berjalan:
kubectl get pods -n istio-system -l istio=ingressgateway-asmOutput yang diharapkan (nama Pod dan usia akan berbeda):
NAME READY STATUS RESTARTS AGE
ingressgateway-asm-5d8f7b9c4f-xxxxx 1/1 Running 0 1mMigrasikan konfigurasi Istio
Migrasikan konfigurasi routing Istio ke gerbang masuk ASM. Ikuti urutan make-before-break berikut untuk mencegah error 503 akibat propagasi konfigurasi yang bersifat eventually consistent.
1. Terapkan resource DestinationRule terlebih dahulu
Terapkan konfigurasi DestinationRule yang dibutuhkan oleh gerbang masuk ASM. Tunggu beberapa detik hingga konfigurasi tersebut tersebar ke sidecar Envoy sebelum melanjutkan.
2. Perbarui selector Gateway
Pada YAML Gateway Istio, perbarui selector.istio agar sesuai dengan nama gerbang masuk ASM Anda:
spec:
selector:
istio: ingressgateway-asm3. Terapkan konfigurasi VirtualService
Setelah pembaruan selector Gateway dan konfigurasi DestinationRule telah tersebar, terapkan konfigurasi VirtualService yang mereferensikan gerbang masuk ASM.
Selalu terapkan DestinationRule sebelum VirtualService saat menambahkan aturan routing baru. Jika VirtualService mereferensikan subset yang belum ada di DestinationRule, traffic ke subset tersebut akan menghasilkan error 503 hingga DestinationRule tersebar.
Verifikasi konfigurasi
Pastikan gerbang masuk ASM telah menerima konfigurasi routing yang diharapkan:
kubectl get gateway,virtualservice,destinationrule -n istio-systemPeriksa bahwa semua resource Gateway, VirtualService, dan DestinationRule tercantum dan mereferensikan nama gerbang yang benar.
Pindahkan traffic secara bertahap
Dengan konfigurasi yang telah siap, pindahkan traffic dari gerbang masuk Istio yang dikelola sendiri ke gerbang masuk ASM dengan menyesuaikan bobot CLB.
Atur bobot gerbang masuk ASM ke nilai kecil, seperti
10, untuk mengarahkan sebagian kecil traffic ke gerbang tersebut. Edit anotasiservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-weightpada Service gerbang masuk ASM.Verifikasi bahwa traffic mengalir dengan benar melalui gerbang masuk ASM. Periksa log aplikasi, kode respons, dan latensi:
kubectl logs -n istio-system -l istio=ingressgateway-asm --tail=50Tingkatkan bobot gerbang masuk ASM secara bertahap (misalnya, 10 → 30 → 60 → 100) sambil menurunkan bobot gerbang masuk Istio sumber secara proporsional.
Setelah seluruh traffic dialihkan ke gerbang masuk ASM, atur bobot gerbang masuk Istio sumber menjadi
0.
Cara menyesuaikan bobot
| Gateway | Aksi |
|---|---|
| Sumber gerbang masuk Istio | Edit anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight pada Service Kubernetes-nya |
| Gerbang masuk ASM | Edit anotasi service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight pada Service gerbang masuk ASM |
Rollback
Jika gerbang masuk ASM tidak berfungsi seperti yang diharapkan pada tahap apa pun selama migrasi:
Atur bobot gerbang masuk ASM menjadi
0untuk menghentikan pengiriman traffic ke gerbang tersebut.Atur kembali bobot gerbang masuk Istio sumber ke
100.Kembalikan konfigurasi Gateway, VirtualService, dan DestinationRule agar mengarah ke gerbang masuk Istio asli. Saat menghapus subset, perbarui VirtualService terlebih dahulu, tunggu beberapa detik, lalu perbarui DestinationRule.
FAQ: Gunakan ulang instans CLB yang dibuat otomatis oleh Service gerbang masuk Istio
Jika instans CLB dibuat otomatis saat Service dibuat untuk gerbang masuk Istio yang dikelola sendiri, lakukan langkah-langkah berikut sebelum menggunakannya ulang untuk gerbang masuk ASM:
Buka konsol CLB dan temukan instans CLB tersebut.
Hapus dua label berikut dari instans CLB:
kubernetes.do.not.deleteack.aliyun.com
Tambahkan anotasi berikut ke Service gerbang masuk Istio yang dikelola sendiri. Ganti placeholder berikut dengan nilai aktual Anda:
Placeholder Deskripsi Contoh <your-clb-instance-id>ID instans CLB lb-bp1abc2defg <your-vserver-group-id>ID kelompok vServer rsp-bp1abc3defg <port>Nomor port listener 80 service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "false" service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: <your-clb-instance-id> service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: <your-vserver-group-id>:<port> service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "100"