All Products
Search
Document Center

Container Service for Kubernetes:Ekspos Layanan di Beberapa Wilayah Menggunakan ELB

Last Updated:Mar 27, 2026

Pada kluster ACK Edge, Anda dapat menghubungkan sumber daya komputasi di beberapa wilayah edge ke cloud dan mengeksposnya melalui satu layanan LoadBalancer. Topik ini menjelaskan cara menggunakan instans Edge Load Balancer (ELB) untuk mengekspos layanan yang dideploy di kelompok node Edge Node Service (ENS) di beberapa wilayah.

Cara kerja

Kelompok node pada kluster ACK Edge diklasifikasikan sebagai kelompok node cloud atau kelompok node edge. Instans ELB menangani load balancing untuk kelompok node edge, dengan setiap instans ELB terbatas pada satu wilayah saja.

Saat Anda membuat layanan LoadBalancer, edge-controller-manager (ECM) secara otomatis membuat PoolService untuk setiap kelompok node yang sesuai. Setiap PoolService mengelola siklus hidup instans ELB di wilayahnya. Akibatnya, satu layanan LoadBalancer dipetakan ke titik akhir di beberapa pusat data—satu instans ELB per wilayah.

Diagram berikut menggambarkan arsitektur ini. Kelompok node ENS dideploy di dua wilayah (Tiongkok (Hefei) dan Tiongkok (Chengdu)), dan layanan LoadBalancer mengekspos aplikasi di kedua wilayah tersebut melalui instans ELB terpisah.

image

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster ACK Edge dengan kelompok node ENS di wilayah target

  • Versi ECM 2.1.0 atau lebih baru

  • CLI kubectl yang telah dikonfigurasi untuk terhubung ke kluster Anda

  • (Untuk ELB yang dikelola sendiri) Instans ELB yang sudah ada di setiap wilayah target

Catatan penggunaan

  • ECM hanya mengonfigurasi instans ELB untuk layanan dengan type: LoadBalancer.

  • Instans ELB yang dikelola oleh ECM diberi nama dalam format k8s/${Service_Name}/${Service_Namespace}/${NodePool_Id}/${Cluster_Id}. Hindari nama duplikat untuk mencegah penghapusan tidak disengaja.

  • Alamat Elastic IP (EIP) yang dikelola oleh ECM mengikuti format penamaan yang sama. Hindari nama duplikat untuk mencegah penghapusan tidak disengaja.

  • Untuk berbagi satu instans ELB di beberapa layanan, gunakan EIP dan instans ELB yang dikelola sendiri, serta atur externalTrafficPolicy menjadi Cluster.

  • Untuk instans ENS tanpa elastic network interfaces (ENIs), buat jaringan edge dan gunakan instans ELB untuk mengeksposnya. Untuk mengaktifkan akses internet, tetapkan EIP ke instans ENS atau konfigurasikan NAT.

  • Untuk instans ENS dengan ENIs, tambahkan aturan routing ke jaringan host:

    # 10.0.0.3: internal network interface controller; 10.0.0.1: internal gateway address
    ip rule add from 10.0.0.3 lookup 4
    ip route add default via 10.0.0.1 table 4

Pilih pendekatan pengelolaan ELB

Tersedia dua pendekatan tergantung pada apakah Anda ingin ECM sepenuhnya mengelola siklus hidup ELB atau mempertahankan kendali atas instans ELB yang sudah ada.

Kriteria Auto Managed ELB ELB yang Dikelola Sendiri
Pengelolaan EIP Dibuat dan dihapus secara otomatis per wilayah Manual; EIP tidak dibuat atau dihapus secara otomatis
Kontrol instans ELB ECM membuat dan memberi nama instans secara otomatis Anda menentukan ID instans ELB yang sudah ada per kelompok node
Beberapa Layanan Berbagi Satu ELB Tidak didukung Didukung (memerlukan externalTrafficPolicy: Cluster)
Pembersihan saat layanan atau kelompok node dihapus Instans ELB dan EIP dihapus secara otomatis Instans ELB dan EIP dipertahankan; pembersihan manual diperlukan
Gunakan saat Anda menginginkan load balancing tanpa konfigurasi Anda memerlukan kendali tepat atas instans ELB atau berbagi satu ELB untuk beberapa layanan
Penting

Menghapus layanan ELB yang dikelola otomatis atau kelompok node terkait juga akan menghapus instans ELB dan EIP yang sesuai. Memperbarui selector kelompok node atau label kelompok node juga dapat memicu penghapusan instans ELB jika kelompok node tidak lagi sesuai dengan selector.

Langkah 1: Deploy aplikasi

Deploy DaemonSet bernama cube di semua node dalam kelompok node ENS.

  1. Buat file bernama cube.yaml dengan konten berikut:

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: cube
      labels:
        app: cube
    spec:
      selector:
        matchLabels:
          app: cube
      template:
        metadata:
          labels:
            app: cube
        spec:
          containers:
          - name: cube
            image: registry.cn-hangzhou.aliyuncs.com/acr-toolkit/ack-cube:1.0
            ports:
            - containerPort: 80
  2. Terapkan manifes:

    kubectl apply -f cube.yaml
  3. Verifikasi bahwa DaemonSet sedang berjalan:

    kubectl get ds cube

    Output yang diharapkan:

    NAME   DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    cube   4         4         4       4            4           <none>          3d1h

Langkah 2: Anotasi kelompok node

Tambahkan anotasi jaringan dan label layanan ke setiap kelompok node ENS. Ulangi untuk setiap wilayah—dalam contoh ini, kelompok node Tiongkok (Hefei) dan Tiongkok (Chengdu).

  1. Dapatkan nama kelompok node:

    kubectl get nodepool
  2. Tambahkan anotasi ID jaringan:

    kubectl annotate nodepool np-xxx alibabacloud.com/ens-network-id=n-xxx
  3. Tambahkan anotasi ID wilayah:

    kubectl annotate nodepool np-xxx alibabacloud.com/ens-region-id=cn-xxx-xxx
  4. Tambahkan anotasi ID vSwitch:

    kubectl annotate nodepool np-xxx alibabacloud.com/ens-vswitch-id=vsw-xxx,vsw-xxx
  5. Tambahkan label layanan agar layanan LoadBalancer dapat memilih kelompok node ini:

    kubectl label nodepool np-xxx k8s-svc=cube

Langkah 3: Ekspos aplikasi dengan layanan ELB multi-wilayah

Tersedia dua opsi. Jika Anda tidak memiliki instans ELB yang sudah ada, gunakan Opsi A. Jika Anda memiliki instans ELB yang sudah ada dan perlu mempertahankan kendali atasnya, gunakan Opsi B.

Opsi A: ELB yang Dikelola Otomatis

ECM secara otomatis membuat dan mengelola instans ELB dan EIP di setiap wilayah yang sesuai.

  1. Buat file bernama cube-svc.yaml dengan konten berikut:

    apiVersion: v1
    kind: Service
    metadata:
      name: cube-svc
      labels:
        app: cube
      annotations:
        openyurt.io/topologyKeys: openyurt.io/nodepool           # Aktifkan topologi layanan
        service.openyurt.io/nodepool-labelselector: k8s-svc=cube # Pilih kelompok node ENS
    spec:
      selector:
        app: cube
      type: LoadBalancer
      loadBalancerClass: alibabacloud.com/elb
      externalTrafficPolicy: Local
      ports:
      - name: cube
        port: 80
        protocol: TCP
        targetPort: 80
  2. Terapkan manifes:

    kubectl apply -f cube-svc.yaml
  3. Verifikasi bahwa layanan telah dibuat dan memiliki IP eksternal yang ditetapkan:

    kubectl get svc cube-svc

    Output yang diharapkan:

    NAME       TYPE           CLUSTER-IP        EXTERNAL-IP                    PORT(S)        AGE
    cube-svc   LoadBalancer   192.168.xxx.xxx   39.106.XX.XX,144.121.XX.XX     80:30081/TCP   5m

    Bidang EXTERNAL-IP mencantumkan satu alamat IP per wilayah, dipisahkan koma.

  4. Verifikasi akses ke aplikasi:

    curl http://<EXTERNAL-IP>:80

    Ganti <EXTERNAL-IP> dengan salah satu alamat IP dari langkah sebelumnya.

Opsi B: ELB yang Dikelola Sendiri

Tentukan instans ELB Anda sendiri per kelompok node. ECM membuat PoolService secara otomatis tetapi tidak mengelola siklus hidup instans ELB.

  1. Buat file bernama cube-svc.yaml dengan konten berikut:

    apiVersion: v1
    kind: Service
    metadata:
      name: cube-svc
      labels:
        app: cube
      annotations:
        openyurt.io/topologyKeys: openyurt.io/nodepool                                    # Aktifkan topologi layanan
        service.openyurt.io/nodepool-labelselector: k8s-svc=cube                          # Pilih kelompok node ENS
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-managed-by-user: "true"     # Gunakan ELB yang dikelola sendiri
    spec:
      selector:
        app: cube
      type: LoadBalancer
      loadBalancerClass: alibabacloud.com/elb
      externalTrafficPolicy: Local
      ports:
      - name: cube
        port: 80
        protocol: TCP
        targetPort: 80
  2. Terapkan manifes:

    kubectl apply -f cube-svc.yaml
  3. Verifikasi bahwa PoolService telah dibuat untuk setiap kelompok node:

    kubectl get ps

    Output yang diharapkan:

    NAME                    AGE
    cube-svc-np-heifei      32s
    cube-svc-np-chengdu     32s

    Setiap PoolService berkorespondensi dengan satu kelompok node. Pada tahap ini, belum ada instans ELB yang disambungkan.

  4. Ikatan instans ELB yang sudah ada ke setiap PoolService:

    • Kelompok node Tiongkok (Hefei):

      kubectl annotate ps cube-svc-np-heifei service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id=lb-xxx
    • Kelompok node Tiongkok (Chengdu):

      kubectl annotate ps cube-svc-np-chengdu service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id=lb-xxx
  5. Verifikasi bahwa layanan memiliki IP eksternal yang ditetapkan:

    kubectl get svc cube-svc

    Output yang diharapkan:

    NAME       TYPE           CLUSTER-IP        EXTERNAL-IP                    PORT(S)        AGE
    cube-svc   LoadBalancer   192.168.xxx.xxx   39.106.XX.XX,144.121.XX.XX     80:30081/TCP   5m
  6. Verifikasi akses ke aplikasi:

    curl http://<EXTERNAL-IP>:80

    Ganti <EXTERNAL-IP> dengan salah satu alamat IP dari langkah sebelumnya.

Kebijakan pembaruan ELB

Tabel berikut menjelaskan cara sumber daya ELB dikelola berdasarkan apakah Anda menggunakan instans ELB yang dikelola otomatis atau dikelola sendiri.

Resource ELB yang Dikelola Sendiri Auto-Managed ELB
Atribut ELB Buat: tentukan selector kelompok node dan ID instans ELB menggunakan service.openyurt.io/nodepool-labelselector dan service.beta.kubernetes.io/alibaba-cloud-loadbalancer-managed-by-user. Perbarui: atribut tidak dapat diperbarui. Hapus: instans ELB tidak dilepas secara otomatis. Buat: tentukan selector kelompok node menggunakan service.openyurt.io/nodepool-labelselector. Perbarui: atribut tidak dapat diperbarui. Hapus: instans ELB tidak dihapus secara otomatis.
Kelompok server backend Buat: diperbarui berdasarkan status layanan dan pod. Perbarui: server backend ditambahkan atau dihapus secara dinamis (mode lokal). Hapus: kelompok server backend tidak dihapus secara otomatis; penghapusan manual diperlukan. Buat: diperbarui berdasarkan status layanan dan pod. Perbarui: server backend ditambahkan atau dihapus secara dinamis (mode lokal). Hapus: semua kelompok server backend dihapus secara otomatis.
Pendengar Buat: ditambahkan secara otomatis berdasarkan spec.ports. Perbarui: ditambahkan, diperbarui, dan dihapus secara otomatis berdasarkan perubahan port. Hapus: pendengar tidak dihapus secara otomatis; penghapusan manual diperlukan. Buat: ditambahkan secara otomatis berdasarkan spec.ports. Perbarui: ditambahkan, diperbarui, dan dihapus secara otomatis berdasarkan perubahan port. Hapus: semua pendengar dihapus secara otomatis.
Atribut EIP Buat: EIP tidak dibuat secara otomatis; pengelolaan manual diperlukan. Perbarui: atribut EIP tidak dapat diperbarui. Hapus: EIP tidak dihapus secara otomatis. Buat: EIP dibuat secara otomatis di setiap wilayah. Perbarui: bandwidth EIP dapat ditingkatkan atau dikurangi. Hapus: EIP dihapus secara otomatis.

Langkah selanjutnya