Topik ini menjelaskan cara bermigrasi dari Nginx Ingress ke Gateway ASM.
Prasyarat
Anda telah membuat instance ASM Enterprise Edition atau Ultimate Edition versi terbaru. Untuk informasi lebih lanjut, lihat Buat instance ASM.
Anda telah menambahkan kluster ACK ke instance ASM. Untuk informasi lebih lanjut, lihat Tambahkan kluster ke instance ASM.
Solusi

Prosedur
Langkah 1: Konfigurasikan instance Classic Load Balancer (CLB) dari Nginx Ingress menjadi dapat digunakan kembali
1) Jalankan perintah berikut untuk mendapatkan ID instance CLB dari Nginx Ingress:
$ kubectl -n kube-system get svc nginx-ingress-lb -o yaml|grep service.k8s.alibaba/loadbalancer-id
service.k8s.alibaba/loadbalancer-id: lb-bp1gts52ced2vgaw1ni782) Buka konsol Server Load Balancer. Kemudian lakukan operasi berikut pada instance CLB:
Nonaktifkan mode baca-saja konfigurasi.
Hapus tag berikut dari instance CLB:
kubernetes.do.not.deletedanack.aliyun.com.Ubah nama grup vServer. Untuk yang dimulai dengan k8s/, ubah menjadi dibagi dan "-" dan nomor port. Sebagai contoh, ubah k8s/80/nginx-ingress-lb/kube-system/c553a74e6ad13423aa839c8e5******** menjadi shared-80.
3) Modifikasi layanan Nginx Ingress. Tambahkan anotasi berikut:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${ID instance CLB}
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "false"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: Jika Anda memiliki beberapa kombinasi port dan grup vServer, pisahkan mereka dengan koma (,). Sebagai contoh, "${YOUR_VGROUP_ID_1}:80, ${YOUR_VGROUP_ID_2}:443". Catatan bahwa Anda perlu memberikan ID grup vServer, bukan nama sebelumnya seperti shared-80.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "100"
Langkah 2: Buat gateway ASM
Anda perlu membuat gateway ASM menggunakan YAML. Namun, Anda masih dapat menggunakan gateway ASM untuk membuat halaman untuk konfigurasi visual. Klik tombol pratinjau di bagian bawah halaman untuk langsung mendapatkan file YAML dasar. Setelah mendapatkan file tersebut, Anda perlu mengedit serviceAnnotations dalam YAML dan menambahkan anotasi layanan berikut untuk menggunakan kembali instance CLB dari Nginx Ingress.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${ID instance CLB}
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "false"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: Jika Anda memiliki beberapa kombinasi port dan grup vServer, pisahkan mereka dengan koma (,). Sebagai contoh, "${YOUR_VGROUP_ID_1}:80, ${YOUR_VGROUP_ID_2}:443". Catatan bahwa Anda perlu memberikan ID grup vServer, bukan nama sebelumnya seperti shared-80.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "0"
Contoh ServiceAnnotations:
serviceAnnotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "lb-xxxxx" // Ganti lb-xxxxx dengan ID instance CLB yang Anda buat di konsol CLB.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: 'false' // Ini harus secara eksplisit disetel ke false karena gateway Istio menimpa pendengar secara default.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port: "${YOUR_VGROUP_ID}:80" // Ganti ${YOUR_VGROUP_ID} dengan server virtual.
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "0" // Atur bobot lalu lintas layanan. Awalnya disetel ke 0 sehingga gateway ASM tidak menerima lalu lintas.Langkah 3: Secara manual ubah ingress menjadi VS, DR, dan konfigurasi Istio lainnya
Ubah Ingress menjadi konfigurasi VirtualService yang sesuai untuk Istio. Anda dapat merujuk pada konfigurasi Ingress berikut.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: helloworld
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- backend:
serviceName: helloworld
servicePort: 80
path: /helloworld(/|$)(.*)
host: example.comKeluaran yang diharapkan:
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: example-vs
spec:
gateways:
- istio-system/ingressgateway ## nama gateway Anda
hosts:
- example.com
http:
- name: route-helloworld
match:
- uri:
prefix: /helloworld/
- uri:
prefix: /helloworld
rewrite:
uri: /
route:
- destination:
host: helloworld
port:
number: 80VirtualService dan DestinationRule dapat ditempatkan di namespace yang sama, bersama dengan Deployment layanan. Jika tidak di namespace yang sama, bidang destination.host perlu diisi dalam format FQDN.
Langkah 4: Verifikasi lalu lintas
Setelah konfigurasi Ingress ke VirtualService, Anda perlu melakukan tes verifikasi untuk memastikan apakah konfigurasi efektif. Merujuk pada Solusi, Anda dapat secara manual membuat instance CLB baru dan mengirim permintaan lalu lintas uji ke CLB ini untuk pengujian. Anda juga dapat meminta layanan gateway ingress ASM langsung di dalam kluster untuk menentukan apakah konfigurasi benar berdasarkan hasil tes.
Langkah 5: Sesuaikan bobot instance backend di bawah CLB yang sesuai dengan Ingress untuk migrasi lalu lintas ke gateway ASM
Kami merekomendasikan Anda untuk menyetel bobot instance gateway ASM ke nilai kecil (seperti 1%) untuk mengamati apakah permintaan online memenuhi harapan. Anda dapat meningkatkannya secara bertahap hingga semua lalu lintas dialihkan ke gateway ASM.
Metode penyesuaian bobot adalah sebagai berikut:
Bobot instance gateway ASM dapat disesuaikan melalui ServiceAnnotations di bawah IstioGateway, yang sesuai dengan service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight: "60".
Bobot instance Nginx dapat disesuaikan melalui Anotasi di bawah Layanan terkait: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight. Jika Layanan tidak memiliki Anotasi terkait bobot yang dikonfigurasi, bobot distribusi instance Nginx Ingress dapat langsung dikonfigurasi melalui konsol CLB.