All Products
Search
Document Center

Container Service for Kubernetes:Mengelola lalu lintas utara-selatan

Last Updated:Mar 26, 2026

Gunakan gerbang multi-kluster ALB untuk mengelola lalu lintas utara-selatan di beberapa kluster ACK—dengan zona redundansi aktif, load balancing, dan routing berbasis Header HTTP—tanpa perlu mengelola ingress controller terpisah untuk setiap kluster.

Prasyarat

Sebelum memulai, pastikan Anda telah:

Cara kerja

Trafik mengalir dari Internet melalui instans ALB menuju Pod di kluster terkait Anda:

Internet → Instans ALB → Instans ACK One Fleet → Kluster terkait 1 (Pod)
                                                  → Kluster terkait 2 (Pod)

Instans Fleet bertindak sebagai lapisan kontrol. Objek AlbConfig pada instans Fleet menyediakan instans ALB. Aturan Ingress pada instans Fleet mengatur cara ALB merutekan trafik ke Pod di seluruh kluster terkait.

Langkah 1: Buat gerbang multi-kluster ALB

Buat objek AlbConfig pada instans Fleet untuk menyediakan instans ALB dan mendaftarkan kluster terkait sebagai target trafik.

  1. Dapatkan ID dua vSwitch dari VPC tempat instans Fleet berada.

  2. Buat file gateway.yaml dengan konten berikut. Ganti ${vsw-id1} dan ${vsw-id2} dengan ID vSwitch, serta ganti ${cluster1} dan ${cluster2} dengan ID kluster terkait.

    Untuk setiap kluster terkait (${cluster1} dan ${cluster2}), konfigurasikan aturan masuk grup keamanan mereka agar mengizinkan trafik dari semua alamat IP dan port dalam blok CIDR vSwitch.
    ParameterWajibDeskripsi
    metadata.nameYaNama AlbConfig.
    metadata.annotations: alb.ingress.kubernetes.io/remote-clustersYaDaftar ID kluster yang dipisahkan koma untuk ditambahkan ke gerbang multi-kluster ALB. Setiap ID kluster harus sudah dikaitkan dengan instans Fleet.
    spec.config.nameTidakNama instans ALB.
    spec.config.addressTypeTidakJenis jaringan instans ALB. Internet (default): menghadap publik, memerlukan alamat IP elastis (EIP), dikenai biaya instans dan bandwidth. Intranet: privat, hanya dapat diakses dalam VPC.
    spec.config.zoneMappingsYaID vSwitch untuk instans ALB. vSwitch harus berada di zona yang didukung oleh ALB dan dalam VPC yang sama dengan kluster. Untuk ketersediaan tinggi, gunakan vSwitch di minimal dua zona jika wilayah tersebut mendukungnya. Untuk daftar wilayah dan zona yang didukung, lihat Wilayah dan zona tempat ALB tersedia.
    spec.listenersTidakPort dan protokol pendengar. Contoh ini menggunakan HTTP pada port 8001. Pertahankan konfigurasi ini — tanpa pendengar, Anda tidak dapat menggunakan Ingress ALB.
    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: ackone-gateway-demo
      annotations:
        # Tambahkan kluster terkait yang digunakan untuk menangani trafik ke instans multi-kluster ALB.
        alb.ingress.kubernetes.io/remote-clusters: ${cluster1},${cluster2}
    spec:
      config:
        name: one-alb-demo
        addressType: Internet
        addressAllocatedMode: Fixed
        zoneMappings:
        - vSwitchId: ${vsw-id1}
        - vSwitchId: ${vsw-id2}
      listeners:
      - port: 8001
        protocol: HTTP
    ---
    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: ackone-gateway-demo
  3. Terapkan manifes untuk membuat gerbang multi-kluster ALB dan IngressClass:

    kubectl apply -f gateway.yaml
  4. Setelah 1 hingga 3 menit, verifikasi bahwa gerbang telah dibuat:

    kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'

    Output yang diharapkan:

    NAME                  ALBID      DNSNAME                                    PORT&PROTOCOL   CERTID   AGE
    ackone-gateway-demo   alb-xxxx   alb-xxxx.<regionid>.alb.aliyuncs.com                              4d9h
  5. Verifikasi bahwa kluster terkait telah terhubung ke gerbang:

    kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'

    Output berupa daftar ID kluster.

Langkah 2: Rutekan trafik dengan Ingress

Buat Ingress dengan ingressClassName: alb untuk menggunakan gerbang multi-kluster ALB. Ingress ALB mendukung anotasi Ingress Nginx yang umum digunakan dan menyediakan fitur tambahan untuk instans ALB. Untuk daftar lengkap anotasi yang didukung, lihat Konfigurasi Ingress ALB dengan anotasi.

Tabel berikut merangkum empat skenario routing yang dibahas dalam bagian ini:

SkenarioGunakan saatAnotasi utama
Load balancing defaultMendistribusikan trafik ke semua kluster berdasarkan jumlah replikaTidak diperlukan
Routing satu klusterMengirim seluruh trafik ke satu kluster (untuk isolasi atau pengujian)alb.ingress.kubernetes.io/cluster-weight.{clusterID}: "100"
Routing berbasis headerMerutekan permintaan dengan header tertentu ke kluster yang ditentukanalb.ingress.kubernetes.io/conditions.{service}
Routing berbasis bobotMembagi trafik antar kluster sesuai persentase yang ditentukanalb.ingress.kubernetes.io/cluster-weight.{clusterID} (multiple)

Contoh 1: Load balancing default

Distribusikan trafik ke semua Pod backend di kluster terkait, dengan pembobotan berdasarkan jumlah replika. Tidak diperlukan anotasi cluster-weight. Gunakan ini ketika Anda menginginkan distribusi beban otomatis yang sederhana tanpa menyesuaikan bobot per kluster.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: |
     [{"HTTP": 8001}]
    alb.ingress.kubernetes.io/cluster-weight.c6XXXXXXXXXXXXXXXXXXXXXXXXX: "60"
    alb.ingress.kubernetes.io/cluster-weight.cdXXXXXXXXXXXXXXXXXXXXXXXXX: "40"
  name: alb-ingress
  namespace: demo
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

Contoh 2: Routing satu kluster

Rutekan seluruh trafik ke kluster tertentu—misalnya, untuk mengisolasi kluster selama insiden atau mengarahkan trafik canary ke satu kluster. Tetapkan bobot kluster ke "100". Jika kluster yang ditentukan tidak ada, sistem akan melewatinya.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: |
     [{"HTTP": 8001}]
    alb.ingress.kubernetes.io/cluster-weight.c6XXXXXXXXXXXXXXXXXXXXXXXXX: "100"
  name: alb-ingress
  namespace: demo
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

Contoh 3: Routing berbasis header

Rutekan permintaan dengan nilai Header HTTP tertentu ke kluster yang ditentukan—misalnya, untuk mengirim permintaan dengan stage: gray ke kluster rilis abu-abu. Gunakan anotasi alb.ingress.kubernetes.io/conditions.{service} untuk menentukan aturan pencocokan header, dan alb.ingress.kubernetes.io/cluster-weight.{clusterID} untuk menentukan kluster target. Jika kluster yang ditentukan tidak ada, sistem akan melewatinya.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: |
     [{"HTTP": 8001}]
    alb.ingress.kubernetes.io/conditions.service1: |
     [{
       "type": "Header",
       "headerConfig": {
          "key":"stage",
           "values": [
              "gray"
           ]
       }
      }]
    alb.ingress.kubernetes.io/cluster-weight.c6XXXXXXXXXXXXXXXXXXXXXXXXX: "100"
  name: alb-ingress
  namespace: demo
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

Contoh 4: Routing berbasis bobot

Bagi trafik antar kluster sesuai persentase yang ditentukan—misalnya, untuk secara bertahap mengalihkan trafik dari satu kluster ke kluster lain selama migrasi. Jumlah total bobot semua kluster harus sama dengan 100.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: |
     [{"HTTP": 8001}]
    alb.ingress.kubernetes.io/cluster-weight.c6XXXXXXXXXXXXXXXXXXXXXXXXX: "60"
    alb.ingress.kubernetes.io/cluster-weight.cdXXXXXXXXXXXXXXXXXXXXXXXXX: "40"
  name: alb-ingress
  namespace: demo
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80

Pemecahan Masalah

Gateway tidak dibuat setelah 3 menit

Periksa status AlbConfig untuk detail error:

kubectl describe albconfig ackone-gateway-demo

Penyebab umum:

  • vSwitch tidak berada di zona yang didukung oleh ALB. Verifikasi menggunakan Wilayah dan zona tempat ALB tersedia.

  • Aturan masuk grup keamanan kluster terkait tidak mengizinkan trafik dari blok CIDR vSwitch.

Kluster terkait tidak muncul di subClusters

Verifikasi bahwa ID kluster dalam anotasi alb.ingress.kubernetes.io/remote-clusters sesuai dengan ID kluster yang dikaitkan dengan instans Fleet:

kubectl get albconfig ackone-gateway-demo -ojsonpath='{.status.loadBalancer.subClusters}'

Jika output kosong, pastikan ID kluster dalam gateway.yaml benar dan kluster tersebut telah dikaitkan dengan instans Fleet.

Langkah Selanjutnya