為實現豐富的負載平衡功能,您可以通過Service YAML檔案中的Annotation(註解)對CLB、監聽和後端伺服器組這三種資源維度進行配置操作。
索引
|
分類 |
功能分類 |
配置連結 |
|
建立負載平衡 |
||
|
指定已有執行個體 |
||
|
配置負載平衡 |
||
|
開啟執行個體保護 |
||
|
會話保持設定 |
||
|
連接埠和協議配置 |
||
|
進階配置 |
||
|
組態管理 |
||
註解使用說明
-
註解的內容區分大小寫。
-
使用註解前請先在本文中查看該功能支援的CCM組件版本。如需升級CCM組件,請參見管理組件。關於CCM的組件變更記錄,請參見Cloud Controller Manager。
-
自2019年09月11日起,
annotations欄位alicloud更新為alibaba-cloud。例如:
更新前:
service.beta.kubernetes.io/alicloud-loadbalancer-id更新後:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id系統將繼續相容
alicloud的寫法,您無需做任何修改。
CLB的典型操作
建立一個公網類型的負載平衡
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
建立一個私網類型的負載平衡
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type
|
描述 |
支援的CCM版本 |
|
指定負載平衡為私網類型。取值:
預設值: 建議參見為負載平衡指定虛擬交換器為CLB手動指定vSwitch。若不指定,系統將根據CCM組件版本自動選擇:
|
v1.9.3及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
指定負載平衡規格
Annotation:多個,如下表所示。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type |
執行個體計費方式。取值:
預設值: 重要
|
v2.4.0及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec |
Server Load Balancer執行個體的規格。通過該參數可以建立指定規格的CLB,或者更新已有CLB的規格。 取值:
預設值: 關於該選項的更多取值,請參見CreateLoadBalancer。 重要
如果您通過CLB控制台修改CLB規格(僅支援修改按規格計費的Server Load Balancer執行個體),可能會被CCM修改回原規格,請謹慎操作。 |
v1.9.3及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: "PayBySpec"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: "slb.s1.small"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
type: LoadBalancer
使用已有的負載平衡
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id
|
描述 |
支援的CCM版本 |
|
重要
Server Load Balancer執行個體的ID。通過此Annotation指定已有的CLB。
|
v1.9.3.81-gca19cd4-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "${YOUR_LOADBALANCER_ID}"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
type: LoadBalancer
使用已有的負載平衡,並強制覆蓋已有監聽
Annotation:多個,如下表所示。強制覆蓋已有監聽,如果監聽連接埠衝突,則會刪除已有監聽。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id |
重要
為避免叢集不可用或流量中斷等非預期行為,請勿複用 API Server CLB 或由 CCM 建立的 CLB。請通過傳統型負載平衡(CLB)控制台手動建立新執行個體。 Server Load Balancer執行個體的ID。通過此Annotation指定已有的CLB。
|
v1.9.3.81-gca19cd4-aliyun及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners |
綁定已有負載平衡時,決定是否根據Service同步CLB監聽配置。
預設值: 重要
複用已有CLB且設定 |
v1.9.3.81-gca19cd4-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "${YOUR_LOADBALANCER_ID}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
type: LoadBalancer
建立負載平衡時,指定主備可用性區域
Annotation:多個,如下表所示。一旦建立,主備可用性區域不支援修改。
某些地區的負載平衡不支援主備可用性區域,請以CLB建立頁面為準。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-master-zoneid |
主後端伺服器的可用性區域ID。 |
v1.9.3.10-gfb99107-aliyun及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-slave-zoneid |
備份後端伺服器的可用性區域ID。 |
v1.9.3.10-gfb99107-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-master-zoneid: "cn-hangzhou-k"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-slave-zoneid: "cn-hangzhou-j"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
建立按頻寬付費的負載平衡
Annotation:多個,如下表所示。以下兩項Annotation必選。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type |
Server Load Balancer執行個體的計費方式。取值:
預設值: |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth |
負載平衡的頻寬,為頻寬峰值,預設值:50。僅適用於公網類型的負載平衡。其他限制,請參見修改公網Server Load Balancer執行個體的計費方式。 |
v1.9.3.10-gfb99107-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type: "paybybandwidth"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth: "2"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
type: LoadBalancer
為負載平衡指定虛擬交換器
Annotation:多個,如下表所示。以下兩項Annotation必選。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type |
指定負載平衡為私網類型。取值:
預設值: |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id |
Server Load Balancer執行個體所屬的VSwitch ID,虛擬交換器必須與Kubernetes叢集屬於同一個VPC。 設定該參數時,需同時設定 可以登入專用網路管理主控台查詢交換器ID。 |
v1.9.3及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id: "${YOUR_VSWITCH_ID}"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
type: LoadBalancer
為私網負載平衡指定IP地址
Annotation:多個,如下表所示。以下三項Annotation必選。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type |
指定負載平衡為私網類型。取值:
預設值: |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id |
Server Load Balancer執行個體所屬的VSwitch ID,虛擬交換器必須與Kubernetes叢集屬於同一個VPC。 設定該參數時,需同時設定 可以登入專用網路管理主控台查詢交換器ID。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip |
私網Server Load Balancer執行個體的IP。
|
v2.7.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vswitch-id: "${YOUR_VSWITCH_ID}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip: "192.168.x.x"
name: nginx
namespace: default
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
name: http
selector:
app: nginx
為負載平衡添加額外標籤
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags
|
描述 |
支援的CCM版本 |
|
需要添加的Tag列表。多個標籤用英文半形逗號(,)分隔,例如 重要
在Service上添加該註解指定額外標籤後,在控制台上對對應Server Load Balancer執行個體標籤進行的額外修改操作存在被覆蓋的風險。 |
v1.9.3及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags: "Key1=Value1,Key2=Value2"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
建立IPv6類型的負載平衡
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version
|
描述 |
支援的CCM版本 |
|
Server Load Balancer執行個體的IP版本,建立後IP類型不可更改。使用時,叢集的kube-proxy代理模式需為IPVS。取值:
預設值: |
v1.9.3.220-g24b1885-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: "ipv6"
name: nginx
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
為負載平衡開啟刪除保護
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-delete-protection
|
描述 |
支援的CCM版本 |
|
負載平衡刪除保護。取值:
預設值: 重要
對於LoadBalancer類型的Service建立的負載平衡,如果手動在CLB控制台開啟了刪除保護,仍可通過 |
v1.9.3.313-g748f81e-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-delete-protection: "on"
name: nginx
spec:
externalTrafficPolicy: Local
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
為負載平衡開啟配置修改保護
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-modification-protection
|
描述 |
支援的CCM版本 |
|
負載平衡配置修改保護。取值:
預設值: |
v1.9.3.313-g748f81e-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-modification-protection: "ConsoleProtection"
name: nginx
spec:
externalTrafficPolicy: Local
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
指定負載平衡名稱
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name
|
描述 |
支援的CCM版本 |
|
Server Load Balancer執行個體名稱。長度為2~128個英文或中文字元,必須以大小寫字母或中文開頭,可包含數字、半形句號(.)、底線(_)和短劃線(-)。 |
v1.9.3.313-g748f81e-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name: "your-svc-name"
name: nginx
spec:
externalTrafficPolicy: Local
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
指定負載平衡所屬的資源群組
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id
|
描述 |
支援的CCM版本 |
|
負載平衡所屬資源群組ID,資源群組ID指定後不可被修改。可在阿里雲資源管理平台查詢資源群組ID。 |
v1.9.3.313-g748f81e-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id: "rg-xxxx"
name: nginx
spec:
externalTrafficPolicy: Local
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
為Service設定Hostname
Annotation:多個,如下表所示。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port |
多個值之間用英文半形逗號(,)分隔,例如 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-hostname |
為Service設定Hostname。Hostname需要符合DNS命名規則。 有如下注意事項:
|
v2.3.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-hostname: "${your_service_hostname}"
name: nginx-svc
namespace: default
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
預期輸出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-svc loadBalancer 47.100.XX.XX www.example.com 80:30248/TCP,443:32670/TCP 10s
建立一個按使用量計費的負載平衡
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type
|
描述 |
支援的CCM版本 |
|
執行個體計費方式。取值:
預設值: 重要
|
v2.4.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: "PayByCLCU"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
監聽的典型操作
為TCP類型的負載平衡配置會話保持時間
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-persistence-timeout
|
描述 |
支援的CCM版本 |
|
會話保持時間。僅針對TCP協議的監聽。如果Server Load Balancer執行個體配置了多個TCP協議的監聽連接埠,則預設將該配置應用到所有TCP協議的監聽連接埠。 單位:秒。取值[0, 3600]。預設值:0,即會話保持關閉。更多資訊,請參見CreateLoadBalancerTCPListener。 |
v1.9.3及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-persistence-timeout: "1800"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
type: LoadBalancer
為HTTP和HTTPS協議的監聽配置會話保持(insert cookie)
Annotation:多個,如下表所示。插入cookie時,以下四項Annotation必選。
-
僅支援HTTP及HTTPS協議的Server Load Balancer執行個體。
-
如果配置了多個HTTP或者HTTPS的監聽連接埠,該會話保持預設應用到所有HTTP和HTTPS監聽連接埠。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-sticky-session |
是否開啟會話保持。僅對HTTP和HTTPS協議的監聽生效。取值:
預設值: 更多資訊,請參見:CreateLoadBalancerHTTPListener和CreateLoadBalancerHTTPSListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-sticky-session-type |
cookie的處理方式。僅對HTTP和HTTPS協議的監聽生效。當
更多資訊,請參見CreateLoadBalancerHTTPListener和CreateLoadBalancerHTTPSListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cookie-timeout |
Cookie逾時時間。當 更多資訊,請參見:CreateLoadBalancerHTTPListener和CreateLoadBalancerHTTPSListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cookie |
伺服器上配置的Cookie名稱。 長度為1~200個字元,只能包含 ASCII 英文字母和數字字元,不能包含半形逗號(,)、半形分號(;)或空格,也不能以貨幣符號($)開頭。 當 更多資訊,請參見CreateLoadBalancerHTTPListener和CreateLoadBalancerHTTPSListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port |
多個值之間用英文半形逗號(,)分隔,例如 |
v1.9.3及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-sticky-session: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-sticky-session-type: "insert"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cookie-timeout: "1800"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
為負載平衡配置存取控制策略組
Annotation:多個,如下表所示。以下三項Annotation必選。
使用此Annotation建立帶有存取控制的負載平衡前,需先在傳統型負載平衡CLB控制台上建立一個負載平衡存取控制策略組,記錄該存取控制策略組ID(acl-id)。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-status |
是否開啟存取控制功能。取值:
預設值: |
v1.9.3.164-g2105d2e-aliyun及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-id |
監聽綁定的存取原則組ID。當 |
v1.9.3.164-g2105d2e-aliyun及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-type |
存取控制類型。取值:
|
v1.9.3.164-g2105d2e-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-status: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-id: "${YOUR_ACL_ID}" # 不支援配置多個策略組。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-type: "white"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
type: LoadBalancer
為負載平衡指定轉送連接埠
連接埠轉寄是指將HTTP連接埠的請求轉寄到HTTPS連接埠。
Annotation:多個,如下表所示。以下三項Annotation必選。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port |
多個值之間用英文半形逗號(,)分隔,例如 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id |
阿里雲上的認證ID。 請登入CLB控制台,在憑證管理頁面查看認證ID。 說明
如需建立認證,請參見選擇阿里雲簽發認證。 |
v1.9.3.164-g2105d2e-aliyun及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-forward-port |
將HTTP請求轉寄至HTTPS指定連接埠,例如 |
v1.9.3.164-g2105d2e-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443,http:80"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-forward-port: "80:443"
name: nginx
namespace: default
spec:
ports:
- name: https
port: 443
protocol: TCP
targetPort: 80
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
為負載平衡設定調度演算法
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler
|
描述 |
支援的CCM版本 |
|
調度演算法。取值:
預設值: 關於該選項的更多取值,請參見CLB建立對應類型監聽API(如建立TCP監聽)中的 |
v1.9.3及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler: "wrr"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
type: LoadBalancer
建立UDP類型的監聽
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: UDP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
建立HTTP類型的監聽
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port
-
健全狀態檢查:HTTP監聽的健全狀態檢查預設為關閉狀態。為確保後端服務的可用性,建議為監聽連接埠配置HTTP或TCP類型的健全狀態檢查。
-
叢集內訪問:在叢集內通過CLB IP訪問服務時,請求流量可能會在叢集內部被截斷,導致訪問異常。請參見為Service設定Hostname,通過添加Annotation來強制流量繞行CLB。詳見在叢集內訪問LoadBalancer Service的External IP的注意事項。
|
描述 |
支援的CCM版本 |
|
多個值之間用英文半形逗號(,)分隔,例如 |
v1.9.3及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
建立HTTPS類型的監聽
Annotation:多個,如下表所示。
HTTPS請求會在CLB層解密,然後以HTTP請求的形式發送給後端的Pod。
-
健全狀態檢查:HTTPS監聽的健全狀態檢查預設為關閉狀態。為確保後端服務的可用性,建議為監聽連接埠配置HTTP或TCP類型的健全狀態檢查。
-
叢集內訪問:在叢集內通過CLB IP訪問服務時,請求流量可能會在叢集內部被截斷,導致訪問異常。請參見為Service設定Hostname,通過添加Annotation來強制流量繞行CLB。詳見在叢集內訪問LoadBalancer Service的External IP的注意事項。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port |
多個值之間用英文半形逗號(,)分隔,例如 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id |
阿里雲上的認證ID。 請登入CLB控制台,在憑證管理頁面查看認證ID。 說明
如需建立認證,請參見選擇阿里雲簽發認證。 |
v1.9.3.164-g2105d2e-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
叢集內訪問CLB時出現SSL協議錯誤
問題現象
為Service建立HTTPS類型監聽後,在叢集外可正常訪問,但在叢集內的節點或Pod中,使用curl訪問Service關聯的CLB的HTTPS連接埠時,返回以下錯誤:
curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number問題原因
該問題由節點上的IPVS規則導致:
Service配置:由於CLB的 HTTPS 監聽僅支援 HTTP 協議作為後端服務,故Service只能將
port: 443的流量轉寄至targetPort: 80。ACK因此在節點上建立IPVS規則,將訪問443連接埠的流量直接轉寄到後端的80連接埠。四層轉寄:IPVS工作在TCP/IP協議棧的第四層,僅轉寄TCP資料包,不解析TLS/HTTPS等應用程式層協議。
協議不匹配:用戶端(curl)發起的HTTPS請求(TLS握手資料)被IPVS直接轉寄到Service後端服務HTTP
80連接埠。由於該連接埠未配置TLS,無法解析TLS請求,因此返回HTTP400錯誤,用戶端則報告SSL協議錯誤。
解決方案
為Service添加service.beta.kubernetes.io/alibaba-cloud-loadbalancer-hostname註解。該註解可以避免在節點上產生IPVS規則,強制叢集內流量通過CLB訪問,從而確保TLS在CLB上被正確處理。詳細操作步驟請參考。
為HTTPS類型監聽配置擴充網域名稱認證
Annotation:多個,如下表所示。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port |
多個值之間用英文半形逗號(,)分隔,例如 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id |
阿里雲上的認證ID。 請登入CLB控制台,在憑證管理頁面查看認證ID。 說明
如需建立認證,請參見選擇阿里雲簽發認證。 |
v1.9.3.164-g2105d2e-aliyun及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-domain-extensions |
指定擴充網域名稱和認證ID,格式為 請登入CLB控制台,在憑證管理頁面查看認證ID。 |
v2.13.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-domain-extensions: "${DOMAIN_1}:${CERT_ID_1},${DOMAIN_2}:${CERT_ID_2}"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
建立帶健全狀態檢查的監聽
設定TCP類型的健全狀態檢查
Annotation:多個,如下表所示。以下所有Annotation必選。
TCP連接埠預設開啟健全狀態檢查。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-switch |
TCP及UDP監聽是否開啟健全狀態檢查。取值:
預設值: |
v2.6.0及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type |
健全狀態檢查類型。取值:
預設值: |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout |
接收來自健全狀態檢查的響應需要等待的時間,適用於TCP模式。如果後端ECS在指定的時間內沒有正確響應,則判定為健全狀態檢查失敗。單位:秒。取值範圍為[1, 300]。 如果 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold |
健全狀態檢查連續成功多少次後,將後端伺服器的健全狀態檢查狀態由 取值範圍為[2, 10],預設值:3。更多資訊,請參見CreateLoadBalancerTCPListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold |
健全狀態檢查連續失敗多少次後,將後端伺服器的健全狀態檢查狀態由success判定為fail。取值範圍為[2, 10],預設值:3。更多資訊,請參見CreateLoadBalancerTCPListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval |
健全狀態檢查的時間間隔。單位:秒。取值範圍[1, 50],預設值:2。更多資訊,請參見CreateLoadBalancerTCPListener。 |
v1.9.3及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-switch: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type: "tcp"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout: "8"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold: "4"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold: "4"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval: "3"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
設定UDP類型的健全狀態檢查
Annotation:多個,如下表所示。以下所有Annotation必選。
UDP連接埠預設開啟健全狀態檢查。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-switch |
TCP及UDP監聽是否開啟健全狀態檢查。取值:
預設值: |
v2.6.0及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout |
接收來自健全狀態檢查的響應需要等待的時間,適用於TCP模式。如果後端ECS在指定的時間內沒有正確響應,則判定為健全狀態檢查失敗。單位:秒。取值範圍為[1, 300]。 如果 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold |
健全狀態檢查連續成功多少次後,將後端伺服器的健全狀態檢查狀態由fail判定為success。 取值範圍為[2, 10],預設值:3。更多資訊,請參見CreateLoadBalancerUDPListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold |
健全狀態檢查連續失敗多少次後,將後端伺服器的健全狀態檢查狀態由success判定為fail。取值範圍為[2, 10],預設值:3。更多資訊,請參見CreateLoadBalancerUDPListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval |
健全狀態檢查的時間間隔。單位:秒。取值範圍[1, 50],預設值:2。更多資訊,請參見CreateLoadBalancerUDPListener。 |
v1.9.3及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-switch: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval: "5"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout: "10"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold: "3"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold: "3"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: UDP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
為TCP和UDP監聽關閉健全狀態檢查
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-switch
|
描述 |
支援的CCM版本 |
|
TCP及UDP監聽是否開啟健全狀態檢查。取值:
預設值: |
v2.6.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-switch: "off" #關閉健全狀態檢查
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
type: LoadBalancer
設定HTTP類型的健全狀態檢查
Annotation:多個,如下表所示。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag |
取值:
預設值: |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type |
健全狀態檢查類型。取值:
預設值: 更多資訊,請參見CreateLoadBalancerHTTPListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-uri |
用於健全狀態檢查的URI。當健全狀態檢查類型為TCP模式時,無需配置此Annotation參數。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-httpcode |
健全狀態檢查正常的HTTP狀態代碼,多個狀態代碼用英文半形逗號分隔。取值:
預設值: 更多資訊,請參見CreateLoadBalancerHTTPListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-domain |
用於健全狀態檢查的網域名稱,取值:
更多資訊,請參見CreateLoadBalancerHTTPListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-timeout |
接收來自健全狀態檢查的響應需要等待的時間,適用於HTTP模式。如果後端ECS在指定的時間內沒有正確響應,則判定為健全狀態檢查失敗。 單位:秒。取值範圍[1, 300]。 如果 更多資訊,請參見CreateLoadBalancerHTTPListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold |
健全狀態檢查連續成功多少次後,將後端伺服器的健全狀態檢查狀態由fail判定為success。 取值範圍為[2, 10],預設值:3。更多資訊,請參見CreateLoadBalancerHTTPListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold |
健全狀態檢查連續失敗多少次後,將後端伺服器的健全狀態檢查狀態由success判定為fail。取值範圍為[2, 10],預設值:3。更多資訊,請參見CreateLoadBalancerHTTPListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval |
健全狀態檢查的時間間隔。單位:秒。取值範圍[1, 50],預設值:2。更多資訊,請參見CreateLoadBalancerHTTPListener。 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port |
多個值之間用英文半形逗號(,)分隔,例如 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-method |
監聽HTTP類型健全狀態檢查的健全狀態檢查方法。取值:
|
v2.3.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type: "http"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-uri: "/test/index.html"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold: "4"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold: "4"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-timeout: "10"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval: "3"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
# 設定健全狀態檢查HTTP狀態代碼,可選
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-httpcode: "http_4xx"
# 設定健全狀態檢查網域名稱,可選
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-domain: "www.aliyun.com"
# 設定健全狀態檢查方法,可選
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-method: "head"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
為監聽設定串連優雅中斷
Annotation:多個,如下表所示。以下所有Annotation必選。
僅支援TCP和UDP協議。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain |
是否開啟串連優雅中斷。取值:
|
v2.0.1及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout |
設定串連優雅中斷逾時時間。單位:秒。取值範圍為[10, 900]。 |
v2.0.1及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout: "30"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
為監聽配置額外要求標頭
Annotation:多個,如下表所示。
僅支援HTTP和HTTPS協議。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port |
多個值之間用英文半形逗號(,)分隔,例如 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-xforwardedfor-proto |
配置是否通過X-Forwarded-Proto頭欄位擷取CLB的監聽協議。取值:
預設值: |
v2.1.0及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-xforwardedfor-slbport |
配置是否通過XForwardedFor_SLBPORT頭欄位擷取Server Load Balancer執行個體的監聽連接埠。取值:
預設值: |
v2.9.1及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-xforwardedfor-clientsrcport |
配置是否通過XForwardedFor_ClientSrcPort頭欄位擷取訪問Server Load Balancer執行個體用戶端的連接埠。取值:
預設值: |
v2.9.1及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-xforwardedfor-proto: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-xforwardedfor-slbport: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-xforwardedfor-clientsrcport: "on"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
為監聽設定串連空閑逾時時間
Annotation:多個,如下表所示。
僅支援HTTP和HTTPS協議。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port |
多個值之間用英文半形逗號(,)分隔,例如 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idle-timeout |
為監聽設定串連空閑逾時時間。單位:秒。取值範圍[1, 60]。 預設值:15 |
v2.1.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idle-timeout: "30"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
關閉監聽的HTTP2特性
Annotation:多個,如下表所示。
僅支援HTTPS協議。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port |
多個值之間用英文半形逗號(,)分隔,例如 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id |
阿里雲上的認證ID。 請登入CLB控制台,在憑證管理頁面查看認證ID。 說明
如需建立認證,請參見選擇阿里雲簽發認證。 |
v1.9.3.164-g2105d2e-aliyun及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-http2-enabled |
是否開啟HTTP2特性。取值:
預設值: |
v2.1.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-http2-enabled: "off"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
為監聽配置指定請求逾時時間
Annotation:多個,如下表所示。
僅支援HTTP和HTTPS協議。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port |
多個值之間用英文半形逗號(,)分隔,例如 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-request-timeout |
指定請求逾時時間。單位:秒。取值範圍為[1, 180]。預設值:60 在逾時時間內,後端伺服器一直沒有響應,負載平衡將放棄等待,用戶端返回HTTP 504錯誤碼。 |
v2.3.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "http:80"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-request-timeout: "60"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
為監聽指定連結逾時時間
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-established-timeout
僅支援TCP協議。
|
描述 |
支援的CCM版本 |
|
連線逾時時間。單位:秒。取值範圍為[10, 900]。更多資訊,請參見CreateLoadBalancerTCPListener。 |
v2.3.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-established-timeout: "60"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
為監聽配置安全性原則
Annotation:多個,如下表所示。
僅支援HTTPS協議。
|
註解 |
描述 |
支援的CCM版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port |
多個值之間用英文半形逗號(,)分隔,例如 |
v1.9.3及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id |
阿里雲上的認證ID。 請登入CLB控制台,在憑證管理頁面查看認證ID。 說明
如需建立認證,請參見選擇阿里雲簽發認證。 |
v1.9.3.164-g2105d2e-aliyun及以上版本 |
|
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-tls-cipher-policy |
安全性原則包含HTTPS可選的TLS協議版本和配套的密碼編譯演算法套件。更多資訊,請參見CreateLoadBalancerHTTPSListener。取值:
預設值: |
v2.4.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443,http:80"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-tls-cipher-policy: "tls_cipher_policy_1_2"
name: nginx
namespace: default
spec:
ports:
- name: https
port: 443
protocol: TCP
targetPort: 443
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
為監聽同時配置TCP及UDP協議
該功能要求Kubernetes叢集版本不低於v1.24。關於如何升級叢集版本,請參見升級ACK叢集K8s版本。
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: default
spec:
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: udp
port: 80
protocol: UDP
targetPort: 81
selector:
app: nginx
sessionAffinity: None
type: LoadBalancer
為TCP和UDP類型的監聽配置Proxy Protocol協議
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol
在叢集內通過CLB IP訪問服務時,請求流量可能會在叢集內部被截斷,導致訪問異常。請參見為Service設定Hostname,通過添加Annotation來強制流量繞行CLB。詳見在叢集內訪問LoadBalancer Service的External IP的注意事項。
|
描述 |
支援的CCM版本 |
|
為TCP及UDP監聽配置ProxyProtocol協議。ProxyProtocol協議配置後,可通過ProxyProtocol協議攜帶用戶端源地址到後端伺服器。取值:
預設值: 重要
該功能不支援線上平滑遷移,切換ProxyProtocol需要業務停服升級,請謹慎配置。 |
v2.6.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol: "on"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
type: LoadBalancer
後端伺服器組的典型操作
使用指定Label的Worker節點作為後端伺服器
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-label
|
描述 |
支援的CCM版本 |
|
指定通過Label指定CLB後端掛載哪些Worker節點。多個Label以英文半形逗號(,)分隔,例如 |
v1.9.3及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-label: "failure-domain.beta.kubernetes.io/zone=ap-southeast-5a"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
type: LoadBalancer
使用Pod所在的節點作為後端伺服器
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler
預設externalTrafficPolicy為Cluster模式,會將叢集中所有節點掛載到後端伺服器。Local模式僅將Pod所在節點作為後端伺服器。
|
描述 |
支援的CCM版本 |
|
調度演算法。取值:
預設值: |
v1.9.3及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler: "wrr"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
移除CLB後端unschedulable狀態的節點
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-remove-unscheduled-backend
|
描述 |
支援的CCM版本 |
|
從CLB後端移除SchedulingDisabled節點。取值:
預設值: |
v1.9.3.164-g2105d2e-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-remove-unscheduled-backend: "on"
name: nginx
spec:
externalTrafficPolicy: Local
ports:
- name: http
port: 30080
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
直接將Pod ENI掛載到CLB後端
Annotation:service.beta.kubernetes.io/backend-type
|
描述 |
預設值 |
支援的CCM版本 |
|
CLB後端伺服器類型。取值:
|
|
v1.9.3.164-g2105d2e-aliyun及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/backend-type: "eni"
name: nginx
spec:
ports:
- name: http
port: 30080
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
複用已有虛擬伺服器組
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port
支援複用已有虛擬伺服器組,僅在複用已有CLB情境下生效。具體的使用樣本,請參見通過複用已有負載平衡實現跨叢集部署服務。
設定Service接收流量的權重
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight
在多個Service複用同一個CLB的情境下,支援通過此Annotation設定當前Service接收流量的權重。該Annotation僅在複用已有虛擬伺服器組情境下生效。具體的使用樣本,請參見通過複用已有負載平衡實現跨叢集部署服務。
忽略更新後端伺服器權重
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ignore-weight-update
|
描述 |
支援的CCM版本 |
|
在Service同步過程中,跳過虛擬伺服器組中後端伺服器權重的更新。此配置適用於需要通過CCM以外的機制手動管理後端伺服器權重的情境。取值:
預設值: |
v2.11.1及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ignore-weight-update: "on"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
type: LoadBalancer
設定後端伺服器的預設權重
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-default-weight
|
描述 |
支援的CCM版本 |
|
設定伺服器組內伺服器的預設權重。權重越高,該伺服器接收的請求流量越多。 取值範圍:[0, 100]。未配置時,系統將根據當前網路類型自動使用對應的預設權重。 當後端執行個體為ECS且Service的 |
v2.14.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
# 設定伺服器組中伺服器的預設權重為 35
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-default-weight: "35"
name: nginx
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
type: LoadBalancer