Sebuah alat migrasi otomatis mengonversi konfigurasi NGINX Ingress Anda ke format ALB Ingress, sehingga menghilangkan pekerjaan manual. Alihkan traffic secara bertahap melalui penyesuaian bobot berbasis DNS untuk mencapai zero downtime.
Proses migrasi
Arahkan satu nama domain ke NGINX Ingress dan ALB Ingress secara bersamaan, lalu sesuaikan bobot DNS secara bertahap untuk mengalihkan traffic secara mulus. Diagram berikut menggambarkan proses tersebut. Contoh migrasi di bawah ini menyediakan langkah-langkah terperinci.
Pengalihan traffic berbasis DNS adalah salah satu pendekatan untuk migrasi tanpa downtime. Proses ini hanya sebagai referensi.
Contoh migrasi
Contoh berikut menjelaskan proses migrasi dengan operasi spesifik.
Sebuah perusahaan menjalankan controller NGINX Ingress di klusternya. Layanan tipe LoadBalancer yang menghadap Internet dari controller tersebut secara otomatis menyediakan instans CLB yang menghadap Internet. DNS melakukan resolusi www.example.net ke CLB tersebut, yang kemudian meneruskan permintaan ke pod backend.
Langkah 1: Konfigurasikan ALB Ingress
NGINX Ingress tidak lagi memenuhi kebutuhan performa dan menimbulkan biaya O&M yang tinggi. Perusahaan menggunakan alat migrasi untuk mengonversi konfigurasi NGINX Ingress ke ALB Ingress dan menambahkan ALB Ingress ke DNS dengan bobot lebih rendah.
DNS tidak mengizinkan sebuah nama domain diselesaikan ke Rekaman A dan Rekaman CNAME secara bersamaan. Instans CLB menerima permintaan melalui alamat IP, sedangkan instans ALB mengekspos nama domain default (Apa itu Application Load Balancer?). Anda harus mengonfigurasi nama domain sementara untuk instans CLB agar dapat melakukan distribusi traffic berbasis bobot.
Langkah 2: Alihkan traffic secara bertahap ke ALB Ingress
Setelah memverifikasi bahwa ALB Ingress berfungsi sesuai harapan, tingkatkan bobot DNS untuk ALB Ingress agar lebih banyak traffic dialihkan kepadanya.
Langkah 3: Hapus resource NGINX Ingress
Setelah seluruh traffic berhasil dimigrasikan ke ALB Ingress, hapus entri DNS NGINX Ingress, hapus resource NGINX Ingress, dan uninstall add-on controller NGINX Ingress.
Prasyarat
Klien kubectl telah terhubung ke kluster ACK. Untuk informasi lebih lanjut, lihat Menghubungkan ke kluster ACK menggunakan kubectl.
Langkah 1: Konfigurasikan ALB Ingress
Masuk ke Konsol Container Service for Kubernetes (ACK) dan instal add-on controller ALB Ingress di kluster tempat Anda ingin melakukan migrasi.Masuk ke Konsol Container Compute Service dan instal add-on controller ALB Ingress di kluster tempat Anda ingin melakukan migrasi. Alat migrasi secara otomatis mengonversi resource
AlbConfig,IngressClass, danIngress. Oleh karena itu, saat menginstal add-on, pilih None untuk ALB Instance.PentingUntuk mengakses layanan melalui ALB Ingress di Cluster khusus ACK, berikan izin kepada controller ALB Ingress sebelum mendeploy layanan. Berikan izin kepada controller ALB Ingress di Cluster khusus ACK.
Buat file bernama ingress2albconfig.yaml dengan konten berikut.
apiVersion: batch/v1 kind: Job metadata: name: ingress2albconfig namespace: default spec: template: spec: containers: - name: ingress2albconfig image: registry-cn-hangzhou.ack.aliyuncs.com/acs/ingress2albconfig:0.0.2 command: ["/bin/ingress2albconfig", "print", "-A"] restartPolicy: Never serviceAccount: ingress2albconfig serviceAccountName: ingress2albconfig backoffLimit: 4 --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: system:ingress2albconfig rules: - apiGroups: - networking.k8s.io resources: - ingresses - ingressclasses verbs: - get - list - watch - update - create - patch --- apiVersion: v1 kind: ServiceAccount metadata: name: ingress2albconfig namespace: default --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: system:ingress2albconfig roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:ingress2albconfig subjects: - kind: ServiceAccount name: ingress2albconfig namespace: defaultJalankan perintah berikut untuk memulai Job. Job ini mengonversi konfigurasi NGINX Ingress yang ada menjadi resource
AlbConfig,IngressClass,Ingress, dan lainnya, lalu menampilkan hasilnya di log pod.kubectl apply -f ingress2albconfig.yamlOutput yang diharapkan:
job.batch/ingress2albconfig created clusterrole.rbac.authorization.k8s.io/system:ingress2albconfig created serviceaccount/ingress2albconfig created clusterrolebinding.rbac.authorization.k8s.io/system:ingress2albconfig createdLihat pod yang termasuk dalam Job tersebut.
kubectl get pod -l job-name=ingress2albconfigOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE ingress2albconfig-vw*** 0/1 Completed 0 16mLihat log pod tersebut.
kubectl logs ingress2albconfig-vw*** # Ganti ini dengan nama pod dari langkah sebelumnya.Output yang diharapkan. Deploy resource ini ke kluster untuk mengonfigurasi ALB Ingress.
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: from-nginx spec: config: accessLogConfig: {} edition: Standard name: from-nginx tags: - key: converted/ingress2albconfig value: "true" zoneMappings: - vSwitchId: vsw-xxx # Ganti ini dengan ID vSwitch di VPC Anda. - vSwitchId: vsw-xxx # Ganti ini dengan ID vSwitch di VPC Anda. listeners: - port: 80 protocol: HTTP --- apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: from-nginx spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: from-nginx --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80}]' name: from-ingress1 namespace: default spec: ingressClassName: from-nginx rules: - http: paths: - backend: service: name: nginx-svc-g1msr port: number: 80 path: / pathType: Prefix status: loadBalancer: {}
Anotasi yang dikonversi secara otomatis
Alat migrasi mengonversi anotasi NGINX Ingress berikut menjadi anotasi ALB Ingress.
Anotasi yang tidak tercantum dalam tabel ini akan diabaikan selama konversi. Verifikasi konfigurasi ALB Ingress setelah konversi.
Langkah 2: Alihkan traffic secara bertahap ke ALB Ingress
Sebelum mengalihkan traffic, bandingkan dan uji aturan pengalihan NGINX Ingress dan ALB Ingress untuk memastikan fungsionalitas identik.
Lakukan pengalihan traffic pada jam sepi.
Setelah mengonfigurasi ALB Ingress, arahkan sebagian kecil traffic kepadanya sebagai rilis canary. Verifikasi aturan pengalihan dan konfigurasi sebelum secara bertahap meningkatkan bobot.
Konfigurasikan domain sementara untuk instans CLB
DNS tidak mendukung resolusi nama domain ke Rekaman A dan Rekaman CNAME sekaligus. Karena instans ALB menggunakan nama domain default, Anda harus mengonfigurasi nama domain sementara untuk instans CLB.
Masuk ke Konsol Alibaba Cloud DNS.
Pada halaman Public Zone, temukan dan klik nama domain DNS
www.example.netyang mengarah ke instans CLB yang akan dimigrasikan.Pada halaman Settings, temukan Rekaman A yang mengarahkan
www.example.netke alamat IP instans CLB. Di kolom Actions, klik Edit.Pada panel Edit Record, ubah Hostname, lalu klik OK. Pada contoh ini, Hostname diubah menjadi web0. Biarkan parameter lainnya tetap sama.
Pada halaman Settings, klik Add Record. Pada panel Add Record, konfigurasikan parameter berikut dan klik OK.
Parameter
Deskripsi
Record Type
Pilih CNAME.
Hostname
Awalan nama domain. Pada contoh ini, masukkan
www.Query Source
Pilih Default.
Record Value
Masukkan nama domain sementara. Pada contoh ini, masukkan
web0.example.net.TTL
Biarkan nilai default.
CatatanRekaman CNAME kini melakukan resolusi
www.example.netkeweb0.example.net, dan Rekaman A melakukan resolusiweb0.example.netke alamat IP CLB.
Tambahkan Rekaman CNAME untuk instans ALB
Jalankan perintah berikut untuk menemukan nama domain instans ALB.
kubectl get albconfigOutput yang diharapkan.
alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.comadalah nama domain instans ALB.NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE from_nginx alb-a8mmh2tqbmrm11**** alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.com 20mPada halaman Settings, klik Add Record. Pada panel Add Record, konfigurasikan parameter berikut dan klik OK.
Parameter
Deskripsi
Record Type
Pilih CNAME.
Hostname
Awalan nama domain. Pada contoh ini, masukkan
www.Query Source
Pilih Default.
Record Value
Masukkan nama domain instans ALB.
TTL
Biarkan nilai default.
Atur bobot traffic
Pada halaman Settings, temukan Rekaman CNAME yang ditambahkan pada langkah sebelumnya. Di kolom Actions, klik panah di samping Edit dan pilih Edit Record Set.
Pada panel Edit Record, atur bobot CLB menjadi 100 dan bobot ALB menjadi 0. Klik OK.
Turunkan bobot CLB dan naikkan bobot ALB secara bertahap setelah memastikan tidak ada dampak pada bisnis.
Jalankan perintah
digbeberapa kali untuk memverifikasi efek pengalihan traffic.[root@xxx 2uvl6raykm3Z ~]# dig www.xxx.net ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.10 <<>> www.xxx.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31592 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.xxx.net. IN A ;; ANSWER SECTION: www.xxx.net. 5 IN CNAME web0.xxx.net. web0.xxx.net. 5 IN A 47.xxx.144 ;; Query time: 63 msec ;; SERVER: 100.xxx.136#53(100.xxx.136) ;; WHEN: Thu Jan 19 15:46:40 CST 2023 ;; MSG SIZE rcvd: 66[root@xxx ~]# dig www.xxx.net ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.10 <<>> www.xxx.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14224 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.xxx.net. IN A ;; ANSWER SECTION: www.xxx.net. 5 IN CNAME alb-a8mmh2xxxm74.cn-hangzhou.alb.aliyuncs.com. alb-a8mxxxm74.cn-hangzhou.alb.aliyuncs.com. 60 IN A 116.xxx.54 alb-a8mxxxm74.cn-hangzhou.alb.aliyuncs.com. 60 IN A 118.xxx.39 ;; Query time: 4 msec ;; SERVER: 100.xxx.136#53(100.xxx.136) ;; WHEN: Thu Jan 19 15:47:52 CST 2023 ;; MSG SIZE rcvd: 128Setelah verifikasi, atur bobot CLB menjadi 0 dan bobot ALB menjadi 100 secara bertahap.
Langkah 3: Hapus resource NGINX Ingress
Setelah semua koneksi persisten ke NGINX Ingress ditutup dan tidak ada traffic baru yang mengarah kepadanya, pantau sistem selama periode yang sesuai dengan bisnis Anda sebelum melepas resource yang tidak diperlukan.
Hapus entri DNS terkait NGINX Ingress dari Konsol Alibaba Cloud DNS.
Uninstall add-on controller NGINX Ingress.
Masuk ke Konsol ACK.
Pada halaman Clusters, klik nama kluster target. Di panel navigasi sebelah kiri, pilih .
Temukan NGINX Ingress. Di kolom Actions, pilih
> Delete. Di kotak dialog yang muncul, klik Confirm Deletion.Di panel navigasi sebelah kiri, pilih Add-ons. Klik tab Networking. Pada kartu NGINX Ingress controller, klik Uninstall.
Di kotak dialog yang muncul, klik OK.
Menguninstall add-on secara otomatis melepas instans CLB yang digunakan oleh controller NGINX Ingress, sehingga tidak lagi dikenai biaya.
Masuk ke Konsol Container Compute Service. Di panel navigasi sebelah kiri, klik Applications > Helm dan uninstall add-on controller NGINX Ingress.
