All Products
Search
Document Center

Server Load Balancer:Migrasi NGINX Ingress ke ALB Ingress

Last Updated:Jul 08, 2026

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.

Penting

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

  1. 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, dan Ingress. Oleh karena itu, saat menginstal add-on, pilih None untuk ALB Instance.

    Penting

    Untuk 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.

  2. 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: default
  3. Jalankan 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.yaml

    Output yang diharapkan:

    job.batch/ingress2albconfig created
    clusterrole.rbac.authorization.k8s.io/system:ingress2albconfig created
    serviceaccount/ingress2albconfig created
    clusterrolebinding.rbac.authorization.k8s.io/system:ingress2albconfig created
  4. Lihat pod yang termasuk dalam Job tersebut.

    kubectl get pod -l job-name=ingress2albconfig

    Output yang diharapkan:

    NAME                READY   STATUS      RESTARTS   AGE
    ingress2albconfig-vw***   0/1     Completed   0          16m
  5. Lihat 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.

Penting

Anotasi yang tidak tercantum dalam tabel ini akan diabaikan selama konversi. Verifikasi konfigurasi ALB Ingress setelah konversi.

Daftar anotasi

Anotasi NGINX Ingress

Anotasi ALB Ingress

nginx.ingress.kubernetes.io/canary

alb.ingress.kubernetes.io/canary

nginx.ingress.kubernetes.io/canary-by-header

alb.ingress.kubernetes.io/canary-by-header

nginx.ingress.kubernetes.io/canary-by-header-value

alb.ingress.kubernetes.io/canary-by-header-value

nginx.ingress.kubernetes.io/canary-by-cookie

alb.ingress.kubernetes.io/canary-by-cookie

nginx.ingress.kubernetes.io/canary-weight

alb.ingress.kubernetes.io/canary-weight

nginx.ingress.kubernetes.io/use-regex

alb.ingress.kubernetes.io/use-regex

nginx.ingress.kubernetes.io/rewrite-target

alb.ingress.kubernetes.io/rewrite-target

nginx.ingress.kubernetes.io/ssl-redirect

alb.ingress.kubernetes.io/ssl-redirect

nginx.ingress.kubernetes.io/enable-cors

alb.ingress.kubernetes.io/enable-cors

nginx.ingress.kubernetes.io/cors-allow-origin

alb.ingress.kubernetes.io/cors-allow-origin

nginx.ingress.kubernetes.io/cors-allow-methods

alb.ingress.kubernetes.io/cors-allow-methods

nginx.ingress.kubernetes.io/cors-allow-headers

alb.ingress.kubernetes.io/cors-allow-headers

nginx.ingress.kubernetes.io/cors-expose-headers

alb.ingress.kubernetes.io/cors-expose-headers

nginx.ingress.kubernetes.io/cors-allow-credentials

alb.ingress.kubernetes.io/cors-allow-credentials

nginx.ingress.kubernetes.io/backend-protocol

alb.ingress.kubernetes.io/backend-protocol

nginx.ingress.kubernetes.io/load-balance

alb.ingress.kubernetes.io/backend-scheduler

nginx.ingress.kubernetes.io/upstream-hash-by

alb.ingress.kubernetes.io/backend-scheduler-uch-value

Langkah 2: Alihkan traffic secara bertahap ke ALB Ingress

Peringatan
  • 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.

  1. Masuk ke Konsol Alibaba Cloud DNS.

  2. Pada halaman Public Zone, temukan dan klik nama domain DNS www.example.net yang mengarah ke instans CLB yang akan dimigrasikan.

  3. Pada halaman Settings, temukan Rekaman A yang mengarahkan www.example.net ke alamat IP instans CLB. Di kolom Actions, klik Edit.

  4. Pada panel Edit Record, ubah Hostname, lalu klik OK. Pada contoh ini, Hostname diubah menjadi web0. Biarkan parameter lainnya tetap sama.

  5. 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.

    Catatan

    Rekaman CNAME kini melakukan resolusi www.example.net ke web0.example.net, dan Rekaman A melakukan resolusi web0.example.net ke alamat IP CLB.

Tambahkan Rekaman CNAME untuk instans ALB

  1. Jalankan perintah berikut untuk menemukan nama domain instans ALB.

    kubectl get albconfig

    Output yang diharapkan. alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.com adalah nama domain instans ALB.

    NAME         ALBID                    DNSNAME                                               PORT&PROTOCOL   CERTID   AGE
    from_nginx   alb-a8mmh2tqbmrm11****   alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.com                            20m
  2. 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 instans ALB.

    TTL

    Biarkan nilai default.

Atur bobot traffic

  1. Pada halaman Settings, temukan Rekaman CNAME yang ditambahkan pada langkah sebelumnya. Di kolom Actions, klik panah di samping Edit dan pilih Edit Record Set.

  2. Pada panel Edit Record, atur bobot CLB menjadi 100 dan bobot ALB menjadi 0. Klik OK.

  3. Turunkan bobot CLB dan naikkan bobot ALB secara bertahap setelah memastikan tidak ada dampak pada bisnis.

  4. Jalankan perintah dig beberapa 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: 128
  5. Setelah verifikasi, atur bobot CLB menjadi 0 dan bobot ALB menjadi 100 secara bertahap.

Jika penyedia layanan DNS Anda tidak mendukung konfigurasi bobot untuk Rekaman CNAME, klik di sini untuk melihat solusi alternatif pengalihan traffic.

Alternative traffic shifting solution

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.

  1. Hapus entri DNS terkait NGINX Ingress dari Konsol Alibaba Cloud DNS.

  2. Uninstall add-on controller NGINX Ingress.

    1. Masuk ke Konsol ACK.

    2. Pada halaman Clusters, klik nama kluster target. Di panel navigasi sebelah kiri, pilih Network > Ingresses.

    3. Temukan NGINX Ingress. Di kolom Actions, pilih image > Delete. Di kotak dialog yang muncul, klik Confirm Deletion.

    4. Di panel navigasi sebelah kiri, pilih Add-ons. Klik tab Networking. Pada kartu NGINX Ingress controller, klik Uninstall.

    5. 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.
  3. Masuk ke Konsol Container Compute Service. Di panel navigasi sebelah kiri, klik Applications > Helm dan uninstall add-on controller NGINX Ingress.

Dokumen terkait