您通過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資源無法相互轉換。暫不支持通過容器服務控制臺管理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間使用英文半角逗號(,)分隔,例如 | 無 | 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
監聽的典型操作
設置監聽安全組
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: 443
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: 443
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: 443
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版本 |
網絡型負載均衡實例每秒新建連接限速值。取值范圍[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
服務器組的典型操作
設置調度策略
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler
描述 | 默認值 | 支持的CCM版本 |
調度算法。取值:
| 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