全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan anotasi untuk mengonfigurasi instance ELB

更新时间:Jul 06, 2025

Anda dapat menambahkan anotasi ke file YAML dari sebuah Layanan untuk mengonfigurasi load balancing. Topik ini menjelaskan cara menggunakan anotasi untuk mengonfigurasi instance Edge Load Balancer (ELB), listener, grup server backend, dan alamat IP elastis edge (edge EIP).

Perhatian

  • Konten anotasi bersifat peka huruf besar-kecil. Gunakan huruf kecil.

  • Atur tipe Layanan menjadi type: LoadBalancer.

  • Untuk menggunakan instance ELB, atur jenis load balancer menjadi loadBalancerClass: alibabacloud.com/elb.

ELB

Penting

Untuk informasi lebih lanjut tentang jenis instance ELB dan metode penagihan, lihat CreateLoadBalancer. Anda tidak dapat memperbarui konfigurasi load balancer setelah load balancer dibuat.

Buat instance ELB yang dikelola oleh EdgeControllerManager (ECM)

  • Anda harus menentukan NodePoolSelector dalam salah satu cara berikut:

    • key1=val1,key2=val2: Instance ELB dibuat untuk pool node Edge Node Service (ENS) yang memenuhi kondisi key1=val1 dan key2=val2. Hubungan logis di antara beberapa label adalah DAN.

    • key in (val1,val2): Instance ELB dibuat untuk pool node ENS yang memenuhi kondisi key=val1 atau key=val2. Hubungan logis di antara beberapa nilai adalah ATAU.

  • openyurt.io/topologyKeys: openyurt.io/nodepool menentukan topologi Layanan dari sebuah pool node. Ini memastikan bahwa trafik hanya diteruskan ke pod aplikasi di pool node yang ditentukan.

    Konten YAML:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      namespace: default
      annotations:
        openyurt.io/topologyKeys: openyurt.io/nodepool           #Aktifkan fitur topologi Layanan.
        service.openyurt.io/nodepool-labelselector: key1=val1    #Pilih pool node ENS. 
    spec:
      ports:
      - name: nginx-80
        port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: LoadBalancer
      loadBalancerClass: alibabacloud.com/elb

Tentukan jenis instance ELB dan metode penagihan

Anotasi

Deskripsi

Nilai default

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec

Untuk informasi lebih lanjut tentang jenis instance ELB, lihat Jenis instance dan penagihan. Anda dapat mengatur parameter ini untuk menentukan jenis instance ELB.

elb.s2.small

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-pay-type

Metode penagihan instance ELB. Hanya metode penagihan bayar sesuai pemakaian (PostPaid) yang didukung. Untuk informasi lebih lanjut tentang aturan penagihan, lihat Harga.

PostPaid

Konten YAML:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool          
    service.openyurt.io/nodepool-labelselector: key1=val1   
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: elb.s1.small
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-pay-type: PostPaid    
spec:
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerClass: alibabacloud.com/elb

Tentukan mode ekspos Layanan

Anotasi

Deskripsi

Nilai default

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type

Mode di mana instance ELB mengekspos Layanan:

  • internet: Layanan diekspos ke Internet. Dalam mode ini, Anda perlu membeli instance ELB akses internal dan menetapkan EIP ke instance ELB.

  • intranet: Layanan diekspos ke jaringan pribadi. Dalam mode ini, Anda hanya perlu membeli instance ELB akses internal.

internet

Konten YAML:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool          
    service.openyurt.io/nodepool-labelselector: key1=val1
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet 
spec:
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerClass: alibabacloud.com/elb

Tentukan spesifikasi EIP saat Layanan diekspos ke Internet

Untuk mengekspos Layanan ke Internet, Anda perlu membeli instance ELB akses internal dan EIP.

Anotasi

Deskripsi

Nilai default

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-eip-bandwidth

Bandwidth Internet menunjukkan bandwidth maksimum EIP. Unit: Mbit/s.

10

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-eip-isp

Informasi ISP:

  • cmcc: China Mobile.

  • unicom: China Unicom.

  • elecom: China Telecom.

Tidak ada

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-eip-instance-charge-type

Metode penagihan EIP. Hanya metode penagihan bayar sesuai pemakaian (PostPaid) yang didukung.

PostPaid

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-eip-internet-charge-type

Metode penagihan bandwidth Internet. Hanya metode penagihan berdasarkan persentil ke-95 bulanan (95BandwidthByMonth) yang didukung.

95BandwidthByMonth

Konten YAML:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool           #Aktifkan fitur topologi Layanan.
    service.openyurt.io/nodepool-labelselector: key1=val1    #Pilih pool node ENS.
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet     
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-eip-bandwidth: "10"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-eip-isp: cmcc
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-eip-instance-charge-type: "PostPaid"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-eip-internet-charge-type: "95BandwidthByMonth"
spec:
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerClass: alibabacloud.com/elb

Grup server backend

  • Dalam mode lokal, kebijakan lalu lintas eksternal mendistribusikan trafik hanya ke node (server backend) yang menyimpan pod aplikasi. Jika beberapa Layanan berbagi satu instance ELB, Anda tidak dapat mengatur kebijakan lalu lintas eksternal ke mode lokal.

  • Anda harus mengatur kebijakan lalu lintas eksternal ke mode kluster. Dalam mode ini, kebijakan mendistribusikan trafik ke semua node ENS (server backend) dalam virtual private cloud (VPC).

Konten YAML:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool           #Aktifkan fitur topologi Layanan.
    service.openyurt.io/nodepool-labelselector: key1=val1    #Pilih pool node ENS.
spec:
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerClass: alibabacloud.com/elb
  externalTrafficPolicy: Local

Tambahkan node edge dengan label tertentu sebagai server backend

Anotasi

Deskripsi

Nilai default

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-label

Tentukan label node worker yang ingin Anda tambahkan sebagai server backend. Pisahkan beberapa label dengan koma (,), misalnya, k1=v1,k2=v2. Hubungan logis di antara beberapa label adalah DAN.

Tidak tersedia

Untuk mengecualikan node edge saat Anda menambahkan server backend, tambahkan label node.kubernetes.io/exclude-from-external-load-balancers=true ke node edge.

Konten YAML:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool
    service.openyurt.io/nodepool-labelselector: key1=val1
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-label: key2=val2
spec:
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerClass: alibabacloud.com/elb
  externalTrafficPolicy: Local

Konfigurasikan bobot server backend

Anotasi

Deskripsi

Nilai default

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-weight

Jika listener menggunakan metode weight round-robin (WRR), permintaan didistribusikan ke server backend berdasarkan bobot server backend. Anda harus memisahkan beberapa pasangan node dan bobot dengan koma (,).

Sebagai contoh, dalam base=50,node1=80,node2=90, base menunjukkan bobot yang diberikan ke semua server backend secara default. Node 1 dan Node 2 diberikan bobot tertentu.

base=100

Konten YAML:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool
    service.openyurt.io/nodepool-labelselector: key1=val1,key2=val2
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-weight: base=50,node1=80,node2=90
spec:
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerClass: alibabacloud.com/elb

Listener

ECM secara otomatis membuat listener berdasarkan Spec.ports dari sebuah Layanan. Port server backend yang didengarkan oleh listener dialokasikan oleh kluster. Untuk mendengarkan port server backend tertentu, tentukan nodePort: ${YOUR_SPEC_PORT}. Konten YAML:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool
    service.openyurt.io/nodepool-labelselector: key1=val1
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    nodePort: 30080
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerClass: alibabacloud.com/elb

Konfigurasikan algoritma penjadwalan untuk listener

Anotasi

Deskripsi

Nilai default

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler

Listener mendukung algoritma penjadwalan berikut:

  • wrr: Server backend dengan bobot lebih tinggi menerima lebih banyak permintaan.

  • rr: Permintaan didistribusikan secara merata ke semua server backend.

  • wlc: Permintaan didistribusikan berdasarkan bobot dan beban setiap server backend. Beban mengacu pada jumlah koneksi ke server backend.

  • sch: Penghashan konsisten berdasarkan alamat IP sumber. Permintaan dari alamat IP sumber yang sama didistribusikan ke server backend yang sama.

  • qch: Penghashan konsisten berdasarkan ID Quick UDP Internet Connection (QUIC). Permintaan yang berisi ID QUIC yang sama dijadwalkan ke server backend yang sama.

  • iqch: Penghashan konsisten berdasarkan tiga byte spesifik CID iQUIC. Permintaan dengan byte kedua, ketiga, dan keempat yang sama dijadwalkan ke server backend yang sama.

rr

Konten YAML:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool
    service.openyurt.io/nodepool-labelselector: key1=val1
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler: "wrr"
spec:
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    nodePort: 30080
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerClass: alibabacloud.com/elb

Konfigurasikan periode persistensi sesi untuk listener TCP

Anotasi

Deskripsi

Nilai default

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-persistence-timeout

Periode persistensi sesi. Anotasi ini hanya berlaku untuk listener TCP. Jika sebuah instance ELB memiliki beberapa listener TCP, konfigurasi berlaku untuk semua listener TCP secara default.

Unit: detik. Nilai valid: 0 hingga 3600. Nilai 0 menunjukkan bahwa persistensi sesi dinonaktifkan.

0

Konfigurasikan periode timeout koneksi untuk listener TCP

Anotasi

Deskripsi

Nilai default

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-established-timeout

Periode timeout koneksi. Unit: detik. Nilai valid: 10 hingga 900.

500

Konten YAML:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool
    service.openyurt.io/nodepool-labelselector: key1=val1,key2=val2
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-established-timeout: "900"
spec:
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    nodePort: 30080
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerClass: alibabacloud.com/elb

Konfigurasikan pemeriksaan kesehatan untuk listener

Anotasi

Deskripsi

Nilai default

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold

Jumlah kali server backend harus berhasil melewati pemeriksaan kesehatan berturut-turut sebelum statusnya dapat berubah dari gagal (tidak tersedia) menjadi sukses (tersedia). Nilai valid: 2 hingga 10.

3

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold

Jumlah kali server backend harus gagal melewati pemeriksaan kesehatan berturut-turut sebelum statusnya dapat berubah dari sukses (tersedia) menjadi gagal (tidak tersedia). Nilai valid: 2 hingga 10.

3

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-check-interval

Interval antara dua pemeriksaan kesehatan berturut-turut. Nilai valid: 2 hingga 10. Unit: detik.

2

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout

Periode timeout respons pemeriksaan kesehatan. Jika server backend tidak merespons dalam periode timeout yang ditentukan, server gagal melewati pemeriksaan kesehatan. Nilai valid: 1 hingga 300. Unit: detik.

5

Konten YAML:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  annotations:
   openyurt.io/topologyKeys: openyurt.io/nodepool
   service.openyurt.io/nodepool-labelselector: key1=val1,key2=val2
   service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold: "5"
   service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold: "5"
   service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval: "2"
   service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout: "5"
spec:
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    nodePort: 30080
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerClass: alibabacloud.com/elb

Konfigurasi lanjutan

Berikut ini adalah deskripsi konfigurasi lanjutan ELB.

  1. Buat Layanan dalam skenario berbeda.

    Tentukan instance ELB yang sudah ada

    Untuk menentukan instance ELB yang sudah ada, Anda harus menentukan ID jaringan dan ID instance ELB.

    • Buat Layanan berdasarkan konten YAML berikut:

      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
        namespace: default
        annotations:
          openyurt.io/topologyKeys: openyurt.io/nodepool           #Aktifkan fitur topologi Layanan.
          service.openyurt.io/nodepool-labelselector: key1=val1
          service.beta.kubernetes.io/alibaba-cloud-loadbalancer-managed-by-user: "true"
      spec:
        ports:
        - name: nginx-80
          port: 80
          protocol: TCP
          targetPort: 80
        selector:
          app: nginx
        type: LoadBalancer
        loadBalancerClass: alibabacloud.com/elb

    Buat beberapa Layanan yang berbagi satu instance ELB

    • Anda harus mengatur kebijakan lalu lintas eksternal ke mode kluster.

    • Anda harus menggunakan instance ELB yang dikelola sendiri dan menentukan instance ELB.

    • Untuk menggunakan EIP untuk mengaktifkan akses Internet, Anda harus membuat dan mengelola EIP secara manual.

    • Anda harus menimpa listener secara paksa dengan mengatur parameter terkait menjadi true.

    Konten YAML:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      namespace: default
      annotations:
        openyurt.io/topologyKeys: openyurt.io/nodepool           #Aktifkan fitur topologi Layanan.
        service.openyurt.io/nodepool-labelselector: key1=val1
        service.openyurt.io/elb-force-override-listeners: "true"
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-managed-by-user: "true"
    spec:
      ports:
      - name: nginx-80
        port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: LoadBalancer
      loadBalancerClass: alibabacloud.com/elb
  2. Temukan PoolService yang sesuai dengan pool node (ENS VPC) dan jalankan perintah berikut untuk mengonfigurasi load balancing:

    kubectl annotate ps {<SERVICENAME>-NodePoolID} service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id=<lb_ID>
    Catatan

    Ganti <SERVICENAME> dalam perintah di atas dengan nama PoolService dari pool node (ENS VPC).

    Ganti <lb_ID> dengan ID instance ELB.