Gunakan anotasi dalam file YAML Service untuk mengonfigurasi instans Edge Load Balancer (ELB), listener, kelompok server backend, dan alamat IP elastis edge (edge EIP).
Semua kunci anotasi dalam topik ini menggunakan awalan service.beta.kubernetes.io/. Hanya sufiks yang ditampilkan dalam tabel.
Catatan penggunaan
-
Nilai anotasi bersifat case-sensitive. Gunakan huruf kecil.
-
Tetapkan
type: LoadBalancerpada Service. -
Tetapkan
loadBalancerClass: alibabacloud.com/elbuntuk menggunakan ELB.
Konfigurasi instans ELB tidak dapat diperbarui setelah instans dibuat. Untuk mengubah pengaturan tingkat instans apa pun, hapus Service tersebut dan buat ulang dengan nilai baru.
Konfigurasi Service dasar
Semua contoh dalam topik ini berdasarkan Service berikut. Service ini memilih kelompok node ENS berdasarkan label dan mengaktifkan topologi Service sehingga lalu lintas hanya diteruskan ke Pod di kelompok node yang ditentukan.
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
annotations:
openyurt.io/topologyKeys: openyurt.io/nodepool # Aktifkan topologi Service.
service.openyurt.io/nodepool-labelselector: key1=val1 # Pilih kelompok node ENS.
spec:
ports:
- name: nginx-80
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
loadBalancerClass: alibabacloud.com/elb
Anotasi nodepool-labelselector menerima dua sintaks:
| Sintaks | Logika | Contoh |
|---|---|---|
key1=val1,key2=val2 |
AND — kelompok node harus memenuhi semua label | env=prod,region=cn-north |
key in (val1,val2) |
OR — kelompok node memenuhi salah satu nilai | region in (cn-north,cn-south) |
Konfigurasi instans ELB
Tentukan tipe instans dan metode penagihan
Untuk detail tipe instans dan harga, lihat CreateLoadBalancer dan Tipe instans dan penagihan.
| Sufiks anotasi | Deskripsi | Default |
|---|---|---|
alibaba-cloud-loadbalancer-spec |
Tipe instans ELB, misalnya, elb.s1.small. |
elb.s2.small |
alibaba-cloud-loadbalancer-pay-type |
Metode penagihan. Hanya PostPaid (pay-as-you-go) yang didukung. |
PostPaid |
Contoh:
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
Tetapkan mode eksposur Service
| Sufiks anotasi | Deskripsi | Default |
|---|---|---|
alibaba-cloud-loadbalancer-address-type |
internet: mengekspos Service ke Internet (memerlukan instans ELB internal dan edge EIP). intranet: mengekspos Service ke jaringan pribadi (hanya memerlukan instans ELB internal). |
internet |
Contoh:
annotations:
openyurt.io/topologyKeys: openyurt.io/nodepool
service.openyurt.io/nodepool-labelselector: key1=val1
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet
Konfigurasikan spesifikasi edge EIP (hanya untuk mode internet)
Ketika address-type bernilai internet, diperlukan instans ELB internal dan edge EIP.
| Sufiks anotasi | Deskripsi | Default |
|---|---|---|
alibaba-cloud-loadbalancer-eip-bandwidth |
Bandwidth maksimum edge EIP. Satuan: Mbit/s. | 10 |
alibaba-cloud-loadbalancer-eip-isp |
ISP. Nilai: cmcc (China Mobile), unicom (China Unicom), elecom (China Telecom). |
Tidak ada |
alibaba-cloud-loadbalancer-eip-instance-charge-type |
Metode penagihan EIP. Hanya PostPaid (pay-as-you-go) yang didukung. |
PostPaid |
alibaba-cloud-loadbalancer-eip-internet-charge-type |
Metode penagihan bandwidth Internet. Hanya 95BandwidthByMonth (bayar berdasarkan persentil ke-95 bulanan) yang didukung. |
95BandwidthByMonth |
Contoh:
annotations:
openyurt.io/topologyKeys: openyurt.io/nodepool # Aktifkan topologi Service.
service.openyurt.io/nodepool-labelselector: key1=val1 # Pilih kelompok 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"
Kelompok server backend
Tetapkan kebijakan traffic eksternal
Kebijakan traffic eksternal mengontrol node ENS mana yang menerima traffic:
-
Mode lokal (
externalTrafficPolicy: Local): traffic hanya dialihkan ke node yang menjalankan Pod aplikasi. Tidak dapat digunakan ketika beberapa Service berbagi satu instans ELB. -
Mode kluster (default): traffic didistribusikan ke semua node ENS dalam virtual private cloud (VPC). Diperlukan ketika beberapa Service berbagi satu instans ELB.
Contoh (mode lokal):
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
annotations:
openyurt.io/topologyKeys: openyurt.io/nodepool # Aktifkan topologi Service.
service.openyurt.io/nodepool-labelselector: key1=val1 # Pilih kelompok 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 server backend berdasarkan label node
| Sufiks anotasi | Deskripsi | Default |
|---|---|---|
alibaba-cloud-loadbalancer-backend-label |
Label node yang akan ditambahkan sebagai server backend. Beberapa label menggunakan logika AND dan dipisahkan dengan koma, misalnya, k1=v1,k2=v2. |
T/A |
Untuk mengecualikan node edge tertentu dari pool server backend, tambahkan label node.kubernetes.io/exclude-from-external-load-balancers=true ke node tersebut.
Contoh:
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
Tetapkan bobot server backend
Ketika listener menggunakan algoritma weighted round-robin (WRR), permintaan didistribusikan berdasarkan bobot server backend.
| Sufiks anotasi | Deskripsi | Default |
|---|---|---|
alibaba-cloud-loadbalancer-backend-weight |
Penetapan bobot dalam format base=<weight>,<nodeName>=<weight>. base menetapkan bobot default untuk semua server backend. Penggantian per node dipisahkan dengan koma. |
base=100 |
Contoh — tetapkan bobot default menjadi 50 dan ganti node1 menjadi 80 serta node2 menjadi 90:
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
Listeners
EdgeControllerManager (ECM) secara otomatis membuat listener berdasarkan spec.ports. Port backend ditetapkan oleh kluster. Untuk menetapkan port backend tertentu, atur nodePort secara eksplisit:
spec:
ports:
- name: nginx-80
port: 80
protocol: TCP
nodePort: 30080
targetPort: 80
Tetapkan algoritma penjadwalan
| Sufiks anotasi | Deskripsi | Default |
|---|---|---|
alibaba-cloud-loadbalancer-scheduler |
Algoritma load balancing. | rr |
Algoritma yang didukung:
| Nilai | Algoritma | Perilaku |
|---|---|---|
rr |
Round robin | Mendistribusikan permintaan secara merata ke semua server backend. |
wrr |
Weighted round robin | Server backend dengan bobot lebih tinggi menerima lebih banyak permintaan. |
wlc |
Weighted least connections | Mendistribusikan permintaan berdasarkan bobot dan jumlah koneksi saat ini. |
sch |
Source IP consistent hashing | Mengarahkan permintaan dari IP sumber yang sama ke server backend yang sama. |
qch |
QUIC ID consistent hashing | Mengarahkan permintaan dengan QUIC ID yang sama ke server backend yang sama. |
iqch |
iQUIC CID consistent hashing | Mengarahkan permintaan dengan byte ke-2, ke-3, dan ke-4 CID iQUIC yang sama ke server backend yang sama. |
Contoh:
annotations:
openyurt.io/topologyKeys: openyurt.io/nodepool
service.openyurt.io/nodepool-labelselector: key1=val1
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler: wrr
Konfigurasikan persistensi sesi (listener TCP)
| Sufiks anotasi | Deskripsi | Default |
|---|---|---|
alibaba-cloud-loadbalancer-persistence-timeout |
Durasi persistensi sesi dalam detik. Rentang valid: 0–3600. Tetapkan ke 0 untuk menonaktifkan. Ketika instans ELB memiliki beberapa listener TCP, pengaturan ini berlaku untuk semuanya. |
0 |
Konfigurasikan timeout koneksi (listener TCP)
| Sufiks anotasi | Deskripsi | Default |
|---|---|---|
alibaba-cloud-loadbalancer-established-timeout |
Timeout koneksi TCP dalam detik. Rentang valid: 10–900. | 500 |
Contoh:
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"
Konfigurasikan pemeriksaan kesehatan
| Sufiks anotasi | Deskripsi | Default |
|---|---|---|
alibaba-cloud-loadbalancer-healthy-threshold |
Jumlah pemeriksaan kesehatan berturut-turut yang harus berhasil untuk menandai server backend sebagai sehat. Rentang valid: 2–10. | 3 |
alibaba-cloud-loadbalancer-unhealthy-threshold |
Jumlah kegagalan pemeriksaan kesehatan berturut-turut yang diperlukan untuk menandai server backend sebagai tidak sehat. Rentang valid: 2–10. | 3 |
alibaba-cloud-loadbalancer-check-interval |
Interval antar pemeriksaan kesehatan dalam detik. Rentang valid: 2–10. | 2 |
alibaba-cloud-loadbalancer-health-check-connect-timeout |
Timeout respons pemeriksaan kesehatan dalam detik. Jika server backend tidak merespons dalam periode ini, pemeriksaan ditandai sebagai gagal. Rentang valid: 1–300. | 5 |
Contoh:
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-check-interval: "2"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout: "5"
Konfigurasi lanjutan
Gunakan instans ELB yang sudah ada
Untuk menyambungkan instans ELB yang sudah ada ke Service, tentukan ID jaringan dan ID instans ELB.
-
Terapkan Service dengan anotasi
managed-by-user:apiVersion: v1 kind: Service metadata: name: nginx namespace: default annotations: openyurt.io/topologyKeys: openyurt.io/nodepool # Aktifkan 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 -
Temukan PoolService yang sesuai dengan kelompok node target (VPC ENS) dan anotasikan dengan ID instans ELB:
kubectl annotate ps {<SERVICENAME>-NodePoolID} service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id=<lb_ID>Ganti
<SERVICENAME>dengan nama PoolService dari kelompok node (VPC ENS), dan ganti<lb_ID>dengan ID instans ELB.
Berbagi satu instans ELB di beberapa Service
Ketika beberapa Service berbagi satu instans ELB, semua kondisi berikut harus dipenuhi:
-
Tetapkan
externalTrafficPolicyke mode kluster (default). -
Gunakan instans ELB yang dikelola sendiri dan tentukan dengan anotasi
managed-by-user. -
Jika diperlukan akses internet melalui EIP, buat dan kelola EIP secara manual.
-
Paksa timpa listener dengan menetapkan
service.openyurt.io/elb-force-override-listeners: "true".
Contoh:
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
annotations:
openyurt.io/topologyKeys: openyurt.io/nodepool # Aktifkan topologi Service.
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