Dibandingkan dengan NGINX Ingress, Application Load Balancer (ALB) Ingress sepenuhnya dikelola dan tidak memerlukan operasi & pemeliharaan (O&M) manual. Selain itu, ALB Ingress mendukung elastisitas yang lebih tinggi. Anda dapat menggunakan tool migrasi yang disediakan oleh Container Service for Kubernetes (ACK) untuk memindahkan traffic dari NGINX Ingress ke ALB Ingress. Tool migrasi ini secara otomatis mengonversi konfigurasi NGINX Ingress menjadi konfigurasi ALB Ingress sehingga Anda tidak perlu melakukan konfigurasi manual. Topik ini menjelaskan cara menggunakan Alibaba Cloud DNS untuk secara bertahap memindahkan traffic dari NGINX Ingress ke ALB Ingress setelah konfigurasi NGINX Ingress dikonversi menjadi konfigurasi ALB Ingress. Proses ini transparan bagi pengguna.
Proses migrasi
Resolusikan nama domain ke NGINX Ingress dan ALB Ingress, lalu sesuaikan bobot Ingress tersebut secara bertahap. Hal ini memastikan migrasi yang transparan bagi bisnis Anda. Gambar berikut menunjukkan prosedur migrasi traffic menggunakan Alibaba Cloud DNS. Untuk informasi lebih lanjut mengenai setiap langkah, lihat Contoh migrasi.
Alibaba Cloud DNS bukan satu-satunya solusi untuk migrasi transparan. Contoh migrasi dalam topik ini hanya sebagai referensi.
Contoh migrasi
Contoh ini menunjukkan proses migrasi.
Sebuah perusahaan menginstal controller NGINX Ingress di kluster ACK dan mengonfigurasi layanan LoadBalancer yang menghadap Internet untuk controller tersebut. Controller tersebut secara otomatis dikaitkan dengan instans Classic Load Balancer (CLB) yang menghadap Internet. Perusahaan tersebut mengonfigurasi rekaman DNS untuk memetakan nama domain www.example.net ke instans CLB. Permintaan yang ditujukan ke nama domain tersebut diresolusi ke instans CLB, yang kemudian meneruskan permintaan tersebut ke pod backend.
Langkah 1: Konfigurasikan ALB Ingress
Seiring perkembangan bisnis, performa NGINX Ingress tidak lagi memenuhi kebutuhan bisnis dan juga menimbulkan biaya O&M yang tinggi. Perusahaan tersebut ingin memindahkan network traffic dari NGINX Ingress ke ALB Ingress. Selama proses migrasi, perusahaan menggunakan tool migrasi yang disediakan oleh ACK untuk mengonversi konfigurasi NGINX Ingress menjadi konfigurasi ALB Ingress, serta menambahkan ALB Ingress ke konfigurasi resolusi DNS. Dalam konfigurasi resolusi DNS tersebut, ALB Ingress memiliki prioritas lebih rendah dibandingkan NGINX Ingress.
DNS tidak mengizinkan Anda menambahkan nama domain yang sama ke rekaman A dan rekaman CNAME secara bersamaan. Instans CLB menerima permintaan melalui alamat IP, sedangkan instans ALB menggunakan nama domain default. Untuk informasi lebih lanjut, lihat Apa itu ALB? Oleh karena itu, perusahaan perlu mengonfigurasi nama domain sementara untuk instans CLB agar permintaan dapat didistribusikan ke NGINX Ingress dan ALB Ingress berdasarkan bobot.
Langkah 2: Secara bertahap pindahkan traffic ke ALB Ingress
Setelah perusahaan menjalankan pengujian dan memverifikasi bahwa ALB Ingress dapat meneruskan traffic sesuai harapan, perusahaan meningkatkan bobot rekaman DNS untuk ALB Ingress agar lebih banyak traffic dialihkan ke ALB Ingress.
Langkah 3: Hapus sumber daya yang terkait dengan NGINX Ingress
Setelah seluruh traffic dipindahkan ke ALB Ingress, perusahaan menghapus konfigurasi DNS yang terkait dengan NGINX Ingress, melepaskan sumber daya yang terkait dengan NGINX Ingress, dan menguninstal controller NGINX Ingress. Setelah menyelesaikan Langkah 1 hingga Langkah 3, seluruh network traffic berhasil dipindahkan dari NGINX Ingress ke ALB Ingress. Proses migrasi ini transparan bagi pengguna.
Prasyarat
Klien kubectl telah terhubung ke kluster ACK. Untuk informasi lebih lanjut, lihat Dapatkan kubeconfig kluster dan hubungkan ke kluster menggunakan kubectl.
Langkah 1: Konfigurasikan ALB Ingress
Masuk ke Konsol ACK dan instal controller ALB Ingress di kluster yang ingin Anda migrasikan. Untuk informasi lebih lanjut, lihat Kelola controller ALB Ingress. Atur ALB Instance ke None karena tool migrasi secara otomatis mengonversi
AlbConfig,IngressClass, danIngress.PentingUntuk mengizinkan akses dari ALB Ingress ke cluster khusus ACK, berikan izin akses ke controller ALB Ingress sebelum Anda mendeploy layanan. Untuk informasi lebih lanjut, lihat Berikan akses cluster khusus ACK ke controller ALB Ingress.
Buat file YAML bernama ingress2albconfig.yaml dan salin konten berikut ke dalam file tersebut:
apiVersion: batch/v1 kind: Job metadata: name: ingress2albconfig namespace: default spec: template: spec: containers: - name: ingress2albconfig image: registry.cn-hangzhou.aliyuncs.com/acs/ingress2albconfig:latest command: ["/bin/ingress2albconfig", "print"] 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 kode berikut untuk menjalankan Job. Job tersebut secara otomatis mengonversi konfigurasi controller NGINX Ingress menjadi konfigurasi
AlbConfig,IngressClass, danIngress, lalu menampilkan konfigurasi tersebut. Anda dapat melihat konfigurasi tersebut di log.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 tempat Job tersebut berjalan.
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 dengan nama Pod yang diperoleh pada langkah sebelumnya.Kode berikut menunjukkan output yang diharapkan. Setelah Anda menggunakan kubectl untuk mendeploy sumber daya ke kluster, ALB Ingress telah dikonfigurasi.
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: creationTimestamp: null name: from_nginx spec: config: accessLogConfig: {} edition: Standard name: from_nginx tags: - key: converted/ingress2albconfig value: "true" zoneMappings: - vSwitchId: vsw-xxx # Ganti dengan ID vSwitch di VPC. - vSwitchId: vsw-xxx # Ganti dengan ID vSwitch di VPC. listeners: - port: 80 protocol: HTTP --- apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: creationTimestamp: null name: from_nginx spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: from_nginx scope: null --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80}]' creationTimestamp: null 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
Tool migrasi secara otomatis mengonversi anotasi NGINX Ingress dalam tabel berikut menjadi anotasi ALB Ingress.
Anotasi NGINX Ingress yang tidak tercantum dalam tabel berikut akan diabaikan. Kami menyarankan Anda memeriksa konfigurasi ALB Ingress setelah konversi untuk mencegah konfigurasi yang tidak valid.
Langkah 2: Secara bertahap pindahkan traffic ke ALB Ingress
Sebelum memulai proses migrasi, bandingkan aturan pengalihan antara NGINX Ingress dan ALB Ingress untuk memastikan aturan tersebut identik. Semua konfigurasi harus diuji untuk mengantisipasi masalah yang mungkin timbul.
Kami menyarankan Anda melakukan peralihan network traffic pada jam sepi.
Konfigurasikan nama domain sementara untuk instans CLB
DNS tidak mengizinkan Anda menambahkan nama domain yang sama ke rekaman A dan rekaman CNAME secara bersamaan. Selain itu, instans ALB menggunakan nama domain default untuk menyediakan layanan. Oleh karena itu, Anda harus mengonfigurasi nama domain sementara untuk instans CLB.
Masuk ke Konsol Alibaba Cloud DNS.
Pada halaman Authoritative DNS Resolution, temukan dan klik nama domain
www.example.net. Nama domain ini mengarah ke alamat IP instans CLB.Pada halaman DNS Settings, klik Add DNS Record. Pada panel Add DNS Record, konfigurasikan parameter berikut lalu klik OK.
Parameter
Deskripsi
Record Type
Pilih CNAME dari daftar drop-down.
Hostname
Masukkan awalan nama domain. Pada contoh ini,
wwwdigunakan.DNS Request Source
Pilih Default.
Record Value
Masukkan nama domain sementara. Pada contoh ini,
web0.example.netdigunakan.TTL
Tentukan nilai time-to-live (TTL) untuk rekaman CNAME agar dapat di-cache di server DNS. Pada contoh ini, nilai default digunakan.
Pada tab DNS Settings, temukan rekaman A yang memetakan nama domain
www.example.netke alamat IP instans CLB, lalu klik Modify di kolom Actions.Pada panel Modify DNS Record, ubah nilai parameter Hostname lalu klik OK. Pada contoh ini, parameter Hostname diatur ke web0. Parameter lain tidak diubah.
CatatanSetelah konfigurasi selesai, nama domain
www.example.netdipetakan keweb0.example.net, yang diresolusi ke alamat IP instans CLB melalui rekaman A.
Tambahkan rekaman CNAME untuk instans ALB
Jalankan perintah berikut untuk menanyakan nama domain instans ALB:
kubectl get albconfigBlok kode berikut menunjukkan output 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 DNS Settings, klik Add DNS Record. Pada panel Add DNS Record, konfigurasikan parameter berikut lalu klik OK.
Parameter
Deskripsi
Record Type
Pilih CNAME dari daftar drop-down.
Hostname
Masukkan awalan nama domain. Pada contoh ini,
wwwdigunakan.DNS Request Source
Pilih Default.
Record Value
Masukkan nama domain instans ALB.
TTL
Tentukan nilai TTL untuk rekaman CNAME agar dapat di-cache di server DNS. Pada contoh ini, nilai default digunakan.
Konfigurasikan bobot untuk rekaman CNAME
Pada halaman Domain Name Resolution, klik Weight Settings di panel navigasi sebelah kiri.
Pada halaman Weighted Round-robin, klik EnableWeight di kolom Actions, lalu klik Set Weight.
Pada panel Set Weight, konfigurasikan bobot untuk rekaman DNS instans CLB dan ALB. Atur bobot rekaman DNS untuk instans CLB ke 100 dan bobot rekaman DNS untuk instans NLB ke 0.

Secara bertahap kurangi bobot rekaman DNS untuk instans CLB dan tingkatkan bobot rekaman DNS untuk instans ALB. Pastikan layanan Anda tidak terganggu.
Masuk ke node pekerja tempat pod layanan dideploy dan jalankan perintah
digbeberapa kali untuk memeriksa volume traffic.

Secara bertahap kurangi bobot rekaman DNS CLB hingga 0 sambil meningkatkan bobot rekaman DNS ALB hingga 100.
Langkah 3: Hapus sumber daya yang terkait dengan NGINX Ingress
Setelah Anda menutup semua koneksi persisten pada NGINX Ingress dan tidak ada traffic yang diteruskan ke NGINX Ingress, Anda dapat melepaskan sumber daya yang tidak diperlukan setelah periode pengamatan.
Masuk ke Konsol Alibaba Cloud DNS dan hapus semua rekaman DNS yang terkait dengan NGINX Ingress.
Uninstal controller NGINX Ingress.
Masuk ke Konsol ACK.
Pada halaman Clusters, temukan kluster yang ingin Anda kelola, lalu klik nama kluster tersebut. Di panel navigasi sebelah kiri, pilih .
Temukan NGINX Ingress, lalu pilih
> Delete di kolom Actions. Pada pesan yang muncul, klik Confirm Deletion.Di panel navigasi sebelah kiri, pilih Add-ons. Klik tab Networking, temukan kartu Nginx Ingress Controller, lalu klik Uninstall.
Pada pesan yang muncul, klik OK.
CatatanInstans CLB yang dikaitkan dengan controller NGINX Ingress akan dilepaskan bersamaan dengan controller NGINX Ingress. Anda tidak lagi dikenai biaya untuk sumber daya yang telah dilepaskan tersebut.
Referensi
ALB mendukung berbagai metode konfigurasi. Untuk informasi lebih lanjut, lihat Konfigurasikan instans ALB menggunakan AlbConfig.
Untuk informasi lebih lanjut tentang cara mengaktifkan HTTPS untuk ALB Ingress, lihat Konfigurasikan sertifikat untuk komunikasi terenkripsi melalui HTTPS.
Untuk informasi lebih lanjut tentang anotasi yang didukung oleh ALB Ingress, lihat Kamus konfigurasi ALB Ingress.
