全部产品
Search
文档中心

Server Load Balancer:Praktik terbaik untuk migrasi dari NGINX Ingress yang dikelola sendiri ke ALB Ingress

更新时间:Dec 16, 2025

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.

Catatan

Alibaba Cloud DNS bukan satu-satunya solusi untuk migrasi transparan. Contoh migrasi dalam topik ini hanya sebagai referensi.

image

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.

image

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.

Penting

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.

image

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.

image

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.

image

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

  1. 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, dan Ingress.

    Penting

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

  2. 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: default
  3. Jalankan kode berikut untuk menjalankan Job. Job tersebut secara otomatis mengonversi konfigurasi controller NGINX Ingress menjadi konfigurasi AlbConfig, IngressClass, dan Ingress, lalu menampilkan konfigurasi tersebut. Anda dapat melihat konfigurasi tersebut di log.

    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 tempat Job tersebut berjalan.

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

Penting

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.

Anotasi

Nginx Ingress Annotation

ALB Ingress Annotation

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: Secara bertahap pindahkan traffic ke ALB Ingress

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

  1. Masuk ke Konsol Alibaba Cloud DNS.

  2. Pada halaman Authoritative DNS Resolution, temukan dan klik nama domain www.example.net. Nama domain ini mengarah ke alamat IP instans CLB.

  3. 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, www digunakan.

    DNS Request Source

    Pilih Default.

    Record Value

    Masukkan nama domain sementara. Pada contoh ini, web0.example.net digunakan.

    TTL

    Tentukan nilai time-to-live (TTL) untuk rekaman CNAME agar dapat di-cache di server DNS. Pada contoh ini, nilai default digunakan.

  4. Pada tab DNS Settings, temukan rekaman A yang memetakan nama domain www.example.net ke alamat IP instans CLB, lalu klik Modify di kolom Actions.

  5. Pada panel Modify DNS Record, ubah nilai parameter Hostname lalu klik OK. Pada contoh ini, parameter Hostname diatur ke web0. Parameter lain tidak diubah.

    Catatan

    Setelah konfigurasi selesai, nama domain www.example.net dipetakan ke web0.example.net, yang diresolusi ke alamat IP instans CLB melalui rekaman A.

Tambahkan rekaman CNAME untuk instans ALB

  1. Jalankan perintah berikut untuk menanyakan nama domain instans ALB:

    kubectl get albconfig

    Blok kode berikut menunjukkan 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 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, www digunakan.

    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

  1. Pada halaman Domain Name Resolution, klik Weight Settings di panel navigasi sebelah kiri.

  2. Pada halaman Weighted Round-robin, klik EnableWeight di kolom Actions, lalu klik Set Weight.

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

    域名权重设置

  4. Secara bertahap kurangi bobot rekaman DNS untuk instans CLB dan tingkatkan bobot rekaman DNS untuk instans ALB. Pastikan layanan Anda tidak terganggu.

  5. Masuk ke node pekerja tempat pod layanan dideploy dan jalankan perintah dig beberapa kali untuk memeriksa volume traffic.

    流量测试1流量测试2

  6. Secara bertahap kurangi bobot rekaman DNS CLB hingga 0 sambil meningkatkan bobot rekaman DNS ALB hingga 100.

Jika penyedia layanan DNS Anda tidak mendukung bobot untuk rekaman CNAME, klik untuk melihat solusi peralihan traffic.

临时流量切换方案

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.

  1. Masuk ke Konsol Alibaba Cloud DNS dan hapus semua rekaman DNS yang terkait dengan NGINX Ingress.

  2. Uninstal controller NGINX Ingress.

    1. Masuk ke Konsol ACK.

    2. Pada halaman Clusters, temukan kluster yang ingin Anda kelola, lalu klik nama kluster tersebut. Di panel navigasi sebelah kiri, pilih Network > Ingresses.

    3. Temukan NGINX Ingress, lalu pilih image > Delete di kolom Actions. Pada pesan yang muncul, klik Confirm Deletion.

    4. Di panel navigasi sebelah kiri, pilih Add-ons. Klik tab Networking, temukan kartu Nginx Ingress Controller, lalu klik Uninstall.

    5. Pada pesan yang muncul, klik OK.

      Catatan

      Instans 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