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
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 kondisikey1=val1dankey2=val2. Hubungan logis di antara beberapa label adalah DAN.key in (val1,val2): Instance ELB dibuat untuk pool node ENS yang memenuhi kondisikey=val1ataukey=val2. Hubungan logis di antara beberapa nilai adalah ATAU.
openyurt.io/topologyKeys: openyurt.io/nodepoolmenentukan 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/elbTentukan mode ekspos Layanan
Anotasi | Deskripsi | Nilai default |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type | Mode di mana instance ELB mengekspos Layanan:
| 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/elbTentukan 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:
| 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/elbGrup 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: LocalTambahkan 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, | 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: LocalKonfigurasikan 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=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/elbListener
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/elbKonfigurasikan algoritma penjadwalan untuk listener
Anotasi | Deskripsi | Nilai default |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler | Listener mendukung algoritma penjadwalan berikut:
| 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/elbKonfigurasikan 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/elbKonfigurasikan 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/elbKonfigurasi lanjutan
Berikut ini adalah deskripsi konfigurasi lanjutan ELB.
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/elbTemukan 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>CatatanGanti
<SERVICENAME>dalam perintah di atas dengan nama PoolService dari pool node (ENS VPC).Ganti
<lb_ID>dengan ID instance ELB.