全部产品
Search
文档中心

Container Service for Kubernetes:Mengelola lalu lintas utara-selatan

更新时间:Jul 06, 2025

Gerbang multi-kluster Application Load Balancer (ALB) yang disediakan oleh Distributed Cloud Container Platform for Kubernetes (ACK One) merupakan mode multi-kluster dari Ingress ALB. Gerbang ini memungkinkan Anda menggunakan fitur seperti redundansi zona aktif, penyeimbangan beban lalu lintas, dan pengarahan lalu lintas berdasarkan header. Topik ini menjelaskan cara menggunakan gerbang multi-kluster ALB untuk mengelola lalu lintas utara-selatan.

Prasyarat

  • ALB telah diaktifkan.

  • Fitur Manajemen Fleet telah diaktifkan.

  • Instansi ACK One Fleet terhubung dengan dua kluster ACK yang ditempatkan dalam virtual private cloud (VPC) yang sama dengan instansi ACK One Fleet. Untuk informasi lebih lanjut, lihat Kelola Kluster Terkait.

Langkah 1: Buat gerbang multi-kluster ALB menggunakan kubectl pada instansi ACK One Fleet

Buat objek AlbConfig pada instansi ACK One Fleet untuk membuat gerbang multi-kluster ALB, dan tambahkan gerbang multi-kluster ALB ke kluster terkait.

  1. Dapatkan ID dari dua vSwitch dari VPC tempat instansi ACK One Fleet berada.

  2. Buat file bernama gateway.yaml dan salin konten berikut ke dalam file:

    Catatan
    • Ganti ${vsw-id1} dan ${vsw-id2} dengan ID vSwitch yang diperoleh dari langkah sebelumnya, dan ganti ${cluster1} dan ${cluster2} dengan ID kluster terkait yang ingin ditambahkan.

    • Untuk kluster terkait ${cluster1} dan ${cluster2}, Anda harus mengonfigurasi aturan arah masuk grup keamanannya untuk mengizinkan akses dari semua alamat IP dan port blok CIDR vSwitch.

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: ackone-gateway-demo
      annotations:
        # Tambahkan kluster terkait yang digunakan untuk menangani lalu lintas ke instansi 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

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Parameter

    Wajib

    Deskripsi

    metadata.name

    Ya

    Nama dari AlbConfig.

    metadata.annotations:

    alb.ingress.kubernetes.io/remote-clusters

    Ya

    Daftar kluster terkait yang akan ditambahkan ke gerbang multi-kluster ALB. ID kluster yang terdaftar di sini telah terhubung dengan instansi Fleet.

    spec.config.name

    Tidak

    Nama dari instansi ALB.

    spec.config.addressType

    Tidak

    Tipe jaringan dari instansi ALB. Nilai valid:

    • Internet (default): Jaringan publik. Instansi ALB menyediakan layanan ke Internet dan dapat diakses melalui Internet.

      Catatan

      Untuk mengizinkan instansi ALB menyediakan layanan berbasis Internet, instansi ALB perlu dikaitkan dengan alamat IP elastis (EIP). Jika Anda menggunakan instansi ALB berbasis Internet, Anda akan dikenakan biaya instansi dan biaya bandwidth atau transfer data untuk EIP terkait. Untuk informasi lebih lanjut, lihat Bayar sesuai pemakaian.

      Intranet: Jaringan pribadi. Instansi ALB menyediakan layanan dalam VPC dan tidak dapat diakses melalui Internet.

    spec.config.zoneMappings

    Ya

    ID vSwitch yang terkait dengan instansi ALB. Untuk informasi lebih lanjut tentang cara membuat vSwitch, lihat Buat dan kelola vSwitches.

    Catatan
    • vSwitch yang ditentukan harus ditempatkan di zona yang didukung oleh instansi ALB dan ditempatkan di VPC yang sama dengan kluster. Untuk informasi lebih lanjut tentang wilayah dan zona yang didukung oleh ALB, lihat Wilayah dan zona.

    • ALB mendukung penyebaran multi-zona. Jika wilayah saat ini mendukung dua zona atau lebih, pilih vSwitch di setidaknya dua zona untuk memastikan ketersediaan tinggi.

    spec.listeners

    Tidak

    Port dan protokol listener dari instansi ALB. Contoh yang diberikan dalam topik ini mengonfigurasi listener HTTP pada port 8001.

    Listener mendefinisikan bagaimana ALB menerima lalu lintas. Kami sarankan Anda mempertahankan konfigurasi listener. Jika tidak, Anda harus membuat listener sebelum dapat menggunakan Ingress ALB.

  3. Jalankan perintah berikut untuk menerapkan file gateway.yaml dan buat gerbang multi-kluster ALB dan IngressClass:

    kubectl apply -f gateway.yaml
  4. Jalankan perintah berikut untuk memeriksa apakah gerbang multi-kluster ALB dibuat dalam waktu 1 hingga 3 menit:

    kubectl get albconfig ackone-gateway-demo

    Keluaran yang diharapkan:

    NAME      		      ALBID      DNSNAME                               PORT&PROTOCOL   CERTID   AGE
    ackone-gateway-demo           alb-xxxx   alb-xxxx.<regionid>.alb.aliyuncs.com                           4d9h
  5. Jalankan perintah berikut untuk memeriksa apakah kluster terkait terhubung ke gerbang:

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

    Keluaran yang diharapkan adalah daftar ID kluster.

Langkah 2: Jadwalkan lalu lintas dalam skenario berbeda menggunakan Ingress

Anda dapat mengatur IngressClass dari Ingress ke ALB Ingress untuk membuat ALB Ingress dan kemudian menggunakan kemampuan manajemen lalu lintas dengan anotasi berbeda. ALB Ingress mendukung anotasi umum Nginx-Ingress dan menyediakan fitur yang ditingkatkan untuk instansi ALB. Untuk informasi lebih lanjut tentang konfigurasi ALB Ingress, lihat Konfigurasi ALB Ingress dengan Anotasi. Contoh-contoh berikut menjelaskan skenario penggunaan manajemen lalu lintas multi-kluster:

Contoh 1: Gunakan penyeimbangan beban untuk mendistribusikan lalu lintas ke semua pod backend secara default

Distribusikan lalu lintas ke kluster berbeda berdasarkan jumlah replika.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: |
     [{"HTTP": 8001}]
  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: Distribusikan lalu lintas hanya ke kluster tertentu

Gunakan anotasi alb.ingress.kubernetes.io/cluster-weight.{clusterID} untuk menentukan kluster. Jika kluster yang ditentukan tidak ada, sistem akan melewati kluster tersebut.

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: Distribusikan lalu lintas yang cocok dengan header ke kluster tertentu

  • Gunakan anotasi aalb.ingress.kubernetes.io/cluster-weight.{clusterID} untuk menentukan kluster. Jika kluster yang ditentukan tidak ada, sistem akan melewati kluster tersebut.

  • Gunakan anotasi alb.ingress.kubernetes.io/condition.{backend.service.name} untuk mengonfigurasi parameter header permintaan. Anda dapat mengontrol pengarahan lalu lintas berdasarkan header permintaan.

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: Distribusikan lalu lintas berdasarkan bobot

Gunakan anotasi alb.ingress.kubernetes.io/cluster-weight untuk mendistribusikan lalu lintas ke beberapa layanan backend. Jumlah total bobot 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