您通過Service YAML檔案中的Annotation(註解)實現豐富的負載平衡功能。網路型負載平衡NLB(Network Load Balancer)是阿里雲面向萬物互聯時代推出的新一代四層負載平衡,支援超高效能和自動彈效能力。本文從NLB、監聽和伺服器組三種資源維度介紹通過Annotation可以對NLB進行的常見配置操作。
索引
主要內容 | 跳轉連結 |
注意事項
叢集版本為v1.24及以上且CCM(Cloud Controller Manager)版本不低於v2.5.0。如需升級叢集,請參見手動升級叢集;如需升級組件,請參見管理組件。
Service中
spec.loadBalancerClass
需要指定為alibabacloud.com/nlb
。如不指定,則預設建立什麼是傳統型負載平衡CLB。Service一旦建立後
spec.loadBalancerClass
不支援更改,CLB及NLB資源無法相互轉換。暫不支援通過Container Service控制台管理NLB,請通過kubectl命令操作。
NLB的典型操作
建立公網類型的NLB
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps
描述 | 預設值 | 支援的CCM版本 |
指定NLB的可用性區域。 NLB支援的地區及可用性區域可以登入NLB控制台查看,至少需要兩個可用性區域。多個可用性區域間用逗號分隔,例如 | 無 | v2.5.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
建立私網類型的NLB
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type
描述 | 預設值 | 支援的CCM版本 |
指定NLB為私網類型。可以更改此Annotation取值,實現NLB的公私網轉變。取值:
NLB支援的地區及可用性區域可以登入NLB控制台查看,至少需要兩個可用性區域。多個可用性區域間用逗號分隔,例如 | internet | v2.5.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
指定負載平衡名稱
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name
描述 | 預設值 | 支援的CCM版本 |
指定均衡執行個體名稱。NLB名稱長度為2~128個英文或中文字元,必須以大小寫字母或中文開頭,可包含數字、點號(.)、底線(_)和虛線(-)。 | 無 | v2.5.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name: "${your-nlb-name}" # NLB名稱。
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
指定負載平衡所屬的資源群組
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id
描述 | 預設值 | 支援的CCM版本 |
指定負載平衡所屬的資源群組,資源群組ID指定後不可被修改。 可以登入阿里雲資源管理平台查詢資源群組ID。 | 無 | v2.5.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id: "${your-resource-group-id}" # 資源群組ID。
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
建立雙棧類型的NLB
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version
描述 | 預設值 | 支援的CCM版本 |
指定NLB的協議版本。建立後,IP類型不可更改。使用時,叢集的kube-proxy代理模式需為IPVS。取值:
| ipv4 | v2.5.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: "DualStack"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
為負載平衡添加額外標籤
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags
描述 | 預設值 | 支援的CCM版本 |
支援額外添加Tag標籤。多個Tag間使用英文半形逗號(,)分隔,例如 重要 在Service上添加該註解指定額外標籤後,在控制台上對對應Server Load Balancer執行個體標籤進行的額外修改操作存在被覆蓋的風險。 | 無 | v2.5.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags: "Key1=Value1,Key2=Value2"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
使用已有的負載平衡
Annotation:多個,如下表所示。
Annotation | 描述 | 預設值 | 支援的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id | 添加已有負載平衡的ID。 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners | 決定是否根據Service同步NLB監聽配置。取值:
| false | v2.5.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: "${your-nlb-id}" # NLB的ID。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
綁定共用頻寬包
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth-package-id
描述 | 預設值 | 支援的CCM版本 |
綁定的共用頻寬包ID。 您可登入VPC控制台查詢共用頻寬包ID。 | 無 | v2.9.1及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth-package-id: "cbwp-xxxxxxxxxx"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
開啟刪除保護
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-modification-protection
描述 | 預設值 | 支援的CCM版本 |
是否開啟NLB刪除保護。取值:
重要 對於LoadBalancer類型的Service建立的負載平衡,如果手動在NLB控制台開啟了刪除保護,仍可通過 | on | v2.9.1及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-delete-protection: "on"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
開啟配置修改保護
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-modification-protection
描述 | 預設值 | 支援的CCM版本 |
是否開啟NLB配置修改保護。取值:
| ConsoleProtection | v2.9.1及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-modification-protection: "ConsoleProtection"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
指定IPv6公私網類型
Annotation:多個,如下表所示。
Annotation | 描述 | 預設值 | 支援的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version | 指定NLB的協議版本。建立後,IP類型不可更改。使用時,叢集的kube-proxy代理模式需為IPVS。取值:
| ipv4 | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ipv6-address-type | 指定NLB的IPv6網路類型。取值:
說明 啟用IPv6公網時,NLB執行個體所在的VPC下需要存在IPv6網關。詳情請見建立和管理IPv6網關。 | intranet | v2.9.1及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version: "DualStack"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ipv6-address-type: internet # 指定IPv6網路類型為公網
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
刪除Service時保留自動建立的Server Load Balancer執行個體
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-lb-on-delete
描述 | 預設值 | 支援的CCM版本 |
在刪除LoadBalancer類型的Service時,保留通過Service建立的NLB執行個體,並將NLB執行個體和伺服器組上的 該能力開啟時,會在Service同步時產生類型為 取值:
重要 請通過刪除Service而不是修改Service類型的方式進行該操作,否則可能會導致Service被錯誤地重新關聯到先前保留的NLB上。 | 無 | v2.10.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-lb-on-delete: "true"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
監聽的典型操作
設定監聽安全性群組
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-security-group-ids
描述 | 預設值 | 支援的CCM版本 |
設定監聽安全性群組。多個值之間使用英文半形逗號(,)分隔,例如 | 無 | v2.6.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-security-group-ids: "sg-aaaaa,sg-bbbbb" # 多個安全性群組使用逗號分隔。
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
為監聽同時配置TCP及UDP協議
描述 | 預設值 | 支援的CCM版本 |
該功能要求Kubernetes叢集版本不低於v1.24。關於如何升級叢集版本,請參見升級ACK叢集K8s版本。 | 無 | 不涉及 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: udp
port: 80
protocol: UDP
targetPort: 81
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
建立TCP類型監聽
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
建立UDP類型監聽
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: udp
port: 80
protocol: UDP
targetPort: 80
selector:
app: nginx
sessionAffinity: None
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
建立TCPSSL類型監聽
Annotation:多個,如下表所示。
Annotation | 描述 | 預設值 | 支援的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port | 設定監聽的協議類型。多個值之間由逗號分隔,例如 | 無 | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id | 伺服器憑證ID。可以登入數位憑證管理服務控制台建立並查看。 | 無 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:443"
# 如認證為中國內地Region時,組合後的認證ID為${your-cert-id}-cn-hangzhou。
# 如認證為除中國內地以外的其他Region時,組合後的認證ID為${your-cert-id}-ap-southeast-1。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${組合後的認證ID}"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 80
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
開啟雙向認證
Annotation:多個,如下表所示。
註解 | 描述 | 預設值 | 支援的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port | 設定監聽的協議類型。多個值之間由逗號分隔,例如 | 無 | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id | 伺服器憑證ID。可以登入數位憑證管理服務控制台查看。 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert-id | CA認證ID,可以登入數位憑證管理服務控制台查看。 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert | 是否啟動雙向認證。取值:
| 無 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:443"
# 如叢集為中國內地Region時,組合後的認證ID為${your-cert-id}-cn-hangzhou。
# 如叢集為除中國內地以外的其他Region時,組合後的認證ID為${your-cert-id}-ap-southeast-1。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${組合後的認證ID}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert-id: "${your-cacert-id}" # CA認證ID。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert: "on"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 80
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
設定TLS安全性原則
Annotation:多個,如下表所示。
註解 | 描述 | 預設值 | 支援的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port | 設定監聽的協議類型。多個值之間由逗號分隔,例如 | 無 | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id | 伺服器憑證ID。可以登入數位憑證管理服務控制台查看。 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-tls-cipher-policy | 安全性原則ID。支援系統安全性原則和自訂安全性原則。取值:
| tls_cipher_policy_1_0 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:443"
# 如叢集為中國內地Region時,組合後的認證ID為${your-cert-id}-cn-hangzhou。
# 如叢集為除中國內地以外的其他Region時,組合後的認證ID為${your-cert-id}-ap-southeast-1。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${組合後的認證ID}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-tls-cipher-policy: "tls_cipher_policy_1_0"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 80
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
設定ProxyProtocol
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol
描述 | 預設值 | 支援的CCM版本 |
是否開啟通過Proxy Protocol協議攜帶用戶端源地址到伺服器。取值:
重要 啟用ProxyProtocol之前,請檢查後端服務是否已開啟Proxy Protocol v2。如未開啟,會導致訪問不通,請謹慎配置。 | off | v2.5.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol: "on"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
ProxyProtocol攜帶額外資訊
Annotation:多個,如下表所示。
Annotation | 描述 | 預設值 | 支援的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol | 是否開啟通過Proxy Protocol協議攜帶用戶端源地址到伺服器。取值:
重要 啟用ProxyProtocol之前,請檢查後端服務是否已開啟Proxy Protocol v2。如未開啟,會導致訪問不通,請謹慎配置。 | off | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-vpc-id-enabled | 是否開啟通過 Proxy Protocol 協議攜帶 VpcId 到後端伺服器。取值:
| off | v2.9.1及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-ep-id-enabled | 是否開啟通過 Proxy Protocol 協議攜帶 PrivateLinkEpId 到後端伺服器。取值:
| off | v2.9.1及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-eps-id-enabled | 是否開啟通過 Proxy Protocol 協議攜帶 PrivateLinkEpsId 到後端伺服器。取值:
| off | v2.9.1及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-ep-id-enabled: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-eps-id-enabled: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-vpc-id-enabled: "on"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
設定監聽每秒建立串連限速值
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cps
描述 | 預設值 | 支援的CCM版本 |
網路型Server Load Balancer執行個體每秒建立串連限速值。取值範圍[0, 1000000]。0表示不限速。 | 無 | v2.5.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cps: "100"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
設定監聽串連空閑逾時時間
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idle-timeout
描述 | 預設值 | 支援的CCM版本 |
串連空閑逾時時間。單位:秒。取值範圍[10, 900]。 | 900 | v2.5.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idle-timeout: "60"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
設定ALPN策略
Annotation:多個,如下表所示。
註解 | 描述 | 預設值 | 支援的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port | 設定監聽的協議類型。多個值之間由逗號分隔,例如 | 無 | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id | 伺服器憑證ID。可以登入數位憑證管理服務控制台建立並查看。 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn | 是否啟用ALPN。取值:
| off | v2.10.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn-policy | ALPN策略。取值:
關於該選項的更多取值,請參見CreateListener - 建立監聽API中的 | 無 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:443"
# 如叢集為中國內地Region時,組合後的認證ID為${your-cert-id}-cn-hangzhou。
# 如叢集為除中國內地以外的其他Region時,組合後的認證ID為${your-cert-id}-ap-southeast-1。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${組合後的認證ID}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn: "on"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn-policy: "HTTP1Only"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 80
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
伺服器組的典型操作
設定調度策略
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler
描述 | 預設值 | 支援的CCM版本 |
調度演算法。取值:
關於該選項的更多取值,請參見CreateServerGroup - 建立伺服器組API中的 | wrr | v2.5.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler: "sch"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
設定串連優雅中斷
Annotation:多個,如下表所示。
註解 | 描述 | 預設值 | 支援的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain | 是否開啟串連優雅中斷。取值:
| off | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout | 設定串連優雅中斷逾時時間。單位:秒。取值範圍[10, 900]。 | 無 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
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:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
設定用戶端地址保持
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-client-ip
描述 | 預設值 | 支援的CCM版本 |
是否開啟用戶端地址保持功能。取值:
| off | v2.5.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-client-ip: "on"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
設定TCP類型的健全狀態檢查
Annotation:多個,如下表所示。設定TCP類型的健全狀態檢查,以下所有Annotation必選。TCP連接埠預設開啟健全狀態檢查。
註解 | 描述 | 預設值 | 支援的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag | 是否開啟健全狀態檢查,取值:
| on | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type | 健全狀態檢查協議。取值:
| tcp | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-port | 健全狀態檢查的伺服器連接埠。取值範圍[0, 65535]。預設值:0,表示使用伺服器的連接埠進行健全狀態檢查。 | 0 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout | 健全狀態檢查響應的最大逾時時間。單位:秒。取值範圍[1, 300]。 | 5 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold | 健全狀態檢查連續成功多少次後,將伺服器的健全狀態檢查狀態由失敗判定為成功。取值範圍[2, 10]。 | 2 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold | 健全狀態檢查連續失敗多少次後,將伺服器的健全狀態檢查狀態由成功判定為失敗。取值範圍[2, 10]。 | 2 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval | 健全狀態檢查的時間間隔。單位:秒。取值範圍[1, 50]。 | 10 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag: "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: "5"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
設定HTTP類型的健全狀態檢查
Annotation:多個,如下表所示。設定TCP類型的健全狀態檢查,以下所有Annotation必選。TCP連接埠預設開啟健全狀態檢查。
註解 | 描述 | 預設值 | 支援的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag | 是否開啟健全狀態檢查,取值:
| on | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type | 健全狀態檢查協議。取值:
| tcp | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-uri | 健全狀態檢查路徑。長度為1~80個字元,只能使用字母、數字、字元。 必須以正斜線(/)開頭。詳細資料請參見CreateServerGroup。 說明 僅 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-domain | 用於健全狀態檢查的網域名稱。取值:
說明 僅 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-port | 健全狀態檢查的伺服器連接埠。取值範圍[0, 65535]。預設值:0,表示使用伺服器的連接埠進行健全狀態檢查。 | 0 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout | 健全狀態檢查響應的最大逾時時間。單位:秒。取值範圍[1, 300]。 | 5 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold | 健全狀態檢查連續成功多少次後,將伺服器的健全狀態檢查狀態由失敗判定為成功。取值範圍[2, 10]。 | 2 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold | 健全狀態檢查連續失敗多少次後,將伺服器的健全狀態檢查狀態由成功判定為失敗。取值範圍[2, 10]。 | 2 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval | 健全狀態檢查的時間間隔。單位:秒。取值範圍[1, 50]。 | 10 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-method | 健全狀態檢查方法。取值:
說明 僅 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
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-health-check-domain: "www.test.com"
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-connect-timeout: "10"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval: "5"
# 設定健全狀態檢查方法,該Annotation可選。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-method: "head"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
設定伺服器群組類型
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-server-group-type
描述 | 預設值 | 支援的CCM版本 |
設定伺服器群組類型。取值:
關於NLB伺服器組分類及說明,請參見NLB伺服器組。 | Instance | v2.8.0及以上版本 |
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-server-group-type: "Ip"
name: nginx
namespace: default
spec:
externalTrafficPolicy: Local
ports:
- name: tcp
port: 80
protocol: TCP
targetPort: 80
- name: https
port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
loadBalancerClass: "alibabacloud.com/nlb"
type: LoadBalancer
複用已有伺服器組
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port
支援複用已有虛擬伺服器組,僅在複用已有NLB情境下生效。具體的使用樣本,請參見通過複用已有負載平衡實現跨叢集部署服務。
設定Service接收流量的權重
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight
在多個Service複用同一個NLB的情境下,支援通過此Annotation設定當前Service接收流量的權重。該Annotation僅在複用已有伺服器組情境下生效。具體的使用樣本,請參見通過複用已有負載平衡實現跨叢集部署服務。