通過Annotation配置網(wǎng)絡(luò)型負(fù)載均衡NLB
您通過Service YAML文件中的Annotation(注解)實(shí)現(xiàn)豐富的負(fù)載均衡功能。網(wǎng)絡(luò)型負(fù)載均衡NLB(Network Load Balancer)是阿里云面向萬物互聯(lián)時(shí)代推出的新一代四層負(fù)載均衡,支持超高性能和自動(dòng)彈性能力。本文從NLB、監(jiān)聽和服務(wù)器組三種資源維度介紹通過Annotation可以對(duì)NLB進(jìn)行的常見配置操作。
索引
主要內(nèi)容 | 跳轉(zhuǎn)鏈接 |
注意事項(xiàng)
集群版本為v1.24及以上且CCM(Cloud Controller Manager)版本不低于v2.5.0。如需升級(jí)集群,請(qǐng)參見手動(dòng)升級(jí)集群;如需升級(jí)組件,請(qǐng)參見管理組件。
Service中
spec.loadBalancerClass
需要指定為alibabacloud.com/nlb
。如不指定,則默認(rèn)創(chuàng)建什么是傳統(tǒng)型負(fù)載均衡CLB。Service一旦創(chuàng)建后
spec.loadBalancerClass
不支持更改,CLB及NLB資源無法相互轉(zhuǎn)換。暫不支持通過容器服務(wù)控制臺(tái)管理NLB,請(qǐng)通過kubectl命令操作。
NLB的典型操作
創(chuàng)建公網(wǎng)類型的NLB
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps
描述 | 默認(rèn)值 | 支持的CCM版本 |
指定NLB的可用區(qū)。 NLB支持的地域及可用區(qū)可以登錄NLB控制臺(tái)查看,至少需要兩個(gè)可用區(qū)。多個(gè)可用區(qū)間用逗號(hào)分隔,例如 | 無 | 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
創(chuàng)建私網(wǎng)類型的NLB
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type
描述 | 默認(rèn)值 | 支持的CCM版本 |
指定NLB為私網(wǎng)類型。可以更改此Annotation取值,實(shí)現(xiàn)NLB的公私網(wǎng)轉(zhuǎn)變。取值:
NLB支持的地域及可用區(qū)可以登錄NLB控制臺(tái)查看,至少需要兩個(gè)可用區(qū)。多個(gè)可用區(qū)間用逗號(hào)分隔,例如 | 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
指定負(fù)載均衡名稱
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name
描述 | 默認(rèn)值 | 支持的CCM版本 |
指定均衡實(shí)例名稱。NLB名稱長度為2~128個(gè)英文或中文字符,必須以大小寫字母或中文開頭,可包含數(shù)字、點(diǎn)號(hào)(.)、下劃線(_)和短橫線(-)。 | 無 | 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
指定負(fù)載均衡所屬的資源組
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id
描述 | 默認(rèn)值 | 支持的CCM版本 |
指定負(fù)載均衡所屬的資源組,資源組ID指定后不可被修改。 可以登錄阿里云資源管理平臺(tái)查詢資源組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
創(chuàng)建雙棧類型的NLB
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version
描述 | 默認(rèn)值 | 支持的CCM版本 |
指定NLB的協(xié)議版本。創(chuàng)建后,IP類型不可更改。使用時(shí),集群的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
為負(fù)載均衡添加額外標(biāo)簽
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags
描述 | 默認(rèn)值 | 支持的CCM版本 |
支持額外添加Tag標(biāo)簽。多個(gè)Tag間使用英文半角逗號(hào)(,)分隔,例如 重要 在Service上添加該注解指定額外標(biāo)簽后,在控制臺(tái)上對(duì)對(duì)應(yīng)負(fù)載均衡實(shí)例標(biāo)簽進(jìn)行的額外修改操作存在被覆蓋的風(fēng)險(xiǎn)。 | 無 | 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
使用已有的負(fù)載均衡
Annotation:多個(gè),如下表所示。
Annotation | 描述 | 默認(rèn)值 | 支持的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id | 添加已有負(fù)載均衡的ID。 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners | 決定是否根據(jù)Service同步NLB監(jiān)聽配置。取值:
| 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
描述 | 默認(rèn)值 | 支持的CCM版本 |
綁定的共享帶寬包ID。 您可登錄VPC控制臺(tái)查詢共享帶寬包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
開啟刪除保護(hù)
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-modification-protection
描述 | 默認(rèn)值 | 支持的CCM版本 |
是否開啟NLB刪除保護(hù)。取值:
重要 對(duì)于LoadBalancer類型的Service創(chuàng)建的負(fù)載均衡,如果手動(dòng)在NLB控制臺(tái)開啟了刪除保護(hù),仍可通過 | 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
開啟配置修改保護(hù)
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-modification-protection
描述 | 默認(rèn)值 | 支持的CCM版本 |
是否開啟NLB配置修改保護(hù)。取值:
| 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公私網(wǎng)類型
Annotation:多個(gè),如下表所示。
Annotation | 描述 | 默認(rèn)值 | 支持的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version | 指定NLB的協(xié)議版本。創(chuàng)建后,IP類型不可更改。使用時(shí),集群的kube-proxy代理模式需為IPVS。取值:
| ipv4 | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ipv6-address-type | 指定NLB的IPv6網(wǎng)絡(luò)類型。取值:
說明 啟用IPv6公網(wǎng)時(shí),NLB實(shí)例所在的VPC下需要存在IPv6網(wǎng)關(guān)。詳情請(qǐng)見創(chuàng)建和管理IPv6網(wǎng)關(guān)。 | 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網(wǎng)絡(luò)類型為公網(wǎng)
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時(shí)保留自動(dòng)創(chuàng)建的負(fù)載均衡實(shí)例
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-lb-on-delete
描述 | 默認(rèn)值 | 支持的CCM版本 |
在刪除LoadBalancer類型的Service時(shí),保留通過Service創(chuàng)建的NLB實(shí)例,并將NLB實(shí)例和服務(wù)器組上的 該能力開啟時(shí),會(huì)在Service同步時(shí)產(chǎn)生類型為 取值:
重要 請(qǐng)通過刪除Service而不是修改Service類型的方式進(jìn)行該操作,否則可能會(huì)導(dǎo)致Service被錯(cuò)誤地重新關(guān)聯(lián)到先前保留的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
監(jiān)聽的典型操作
設(shè)置監(jiān)聽安全組
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-security-group-ids
描述 | 默認(rèn)值 | 支持的CCM版本 |
設(shè)置監(jiān)聽安全組。多個(gè)值之間使用英文半角逗號(hào)(,)分隔,例如 | 無 | 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" # 多個(gè)安全組使用逗號(hào)分隔。
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
為監(jiān)聽同時(shí)配置TCP及UDP協(xié)議
描述 | 默認(rèn)值 | 支持的CCM版本 |
該功能要求Kubernetes集群版本不低于v1.24。關(guān)于如何升級(jí)集群版本,請(qǐng)參見升級(jí)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
創(chuàng)建TCP類型監(jiān)聽
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
創(chuàng)建UDP類型監(jiān)聽
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
創(chuàng)建TCPSSL類型監(jiān)聽
Annotation:多個(gè),如下表所示。
Annotation | 描述 | 默認(rèn)值 | 支持的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port | 設(shè)置監(jiān)聽的協(xié)議類型。多個(gè)值之間由逗號(hào)分隔,例如 | 無 | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id | 服務(wù)器證書ID。可以登錄數(shù)字證書管理服務(wù)控制臺(tái)創(chuàng)建并查看。 | 無 |
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"
# 如證書為中國內(nèi)地Region時(shí),組合后的證書ID為${your-cert-id}-cn-hangzhou。
# 如證書為除中國內(nèi)地以外的其他Region時(shí),組合后的證書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
開啟雙向認(rèn)證
Annotation:多個(gè),如下表所示。
注解 | 描述 | 默認(rèn)值 | 支持的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port | 設(shè)置監(jiān)聽的協(xié)議類型。多個(gè)值之間由逗號(hào)分隔,例如 | 無 | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id | 服務(wù)器證書ID。可以登錄數(shù)字證書管理服務(wù)控制臺(tái)查看。 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert-id | CA證書ID,可以登錄數(shù)字證書管理服務(wù)控制臺(tái)查看。 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert | 是否啟動(dòng)雙向認(rèn)證。取值:
| 無 |
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"
# 如集群為中國內(nèi)地Region時(shí),組合后的證書ID為${your-cert-id}-cn-hangzhou。
# 如集群為除中國內(nèi)地以外的其他Region時(shí),組合后的證書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
設(shè)置TLS安全策略
Annotation:多個(gè),如下表所示。
注解 | 描述 | 默認(rèn)值 | 支持的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port | 設(shè)置監(jiān)聽的協(xié)議類型。多個(gè)值之間由逗號(hào)分隔,例如 | 無 | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id | 服務(wù)器證書ID。可以登錄數(shù)字證書管理服務(wù)控制臺(tái)查看。 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-tls-cipher-policy | 安全策略ID。支持系統(tǒng)安全策略和自定義安全策略。取值:
| 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"
# 如集群為中國內(nèi)地Region時(shí),組合后的證書ID為${your-cert-id}-cn-hangzhou。
# 如集群為除中國內(nèi)地以外的其他Region時(shí),組合后的證書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
設(shè)置ProxyProtocol
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol
描述 | 默認(rèn)值 | 支持的CCM版本 |
是否開啟通過Proxy Protocol協(xié)議攜帶客戶端源地址到服務(wù)器。取值:
重要 啟用ProxyProtocol之前,請(qǐng)檢查后端服務(wù)是否已開啟Proxy Protocol v2。如未開啟,會(huì)導(dǎo)致訪問不通,請(qǐng)謹(jǐn)慎配置。 | 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:多個(gè),如下表所示。
Annotation | 描述 | 默認(rèn)值 | 支持的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol | 是否開啟通過Proxy Protocol協(xié)議攜帶客戶端源地址到服務(wù)器。取值:
重要 啟用ProxyProtocol之前,請(qǐng)檢查后端服務(wù)是否已開啟Proxy Protocol v2。如未開啟,會(huì)導(dǎo)致訪問不通,請(qǐng)謹(jǐn)慎配置。 | off | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-vpc-id-enabled | 是否開啟通過 Proxy Protocol 協(xié)議攜帶 VpcId 到后端服務(wù)器。取值:
| off | v2.9.1及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-ep-id-enabled | 是否開啟通過 Proxy Protocol 協(xié)議攜帶 PrivateLinkEpId 到后端服務(wù)器。取值:
| off | v2.9.1及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-eps-id-enabled | 是否開啟通過 Proxy Protocol 協(xié)議攜帶 PrivateLinkEpsId 到后端服務(wù)器。取值:
| 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
設(shè)置監(jiān)聽每秒新建連接限速值
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cps
描述 | 默認(rèn)值 | 支持的CCM版本 |
網(wǎng)絡(luò)型負(fù)載均衡實(shí)例每秒新建連接限速值。取值范圍[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
設(shè)置監(jiān)聽連接空閑超時(shí)時(shí)間
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idle-timeout
描述 | 默認(rèn)值 | 支持的CCM版本 |
連接空閑超時(shí)時(shí)間。單位:秒。取值范圍[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
設(shè)置ALPN策略
Annotation:多個(gè),如下表所示。
注解 | 描述 | 默認(rèn)值 | 支持的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port | 設(shè)置監(jiān)聽的協(xié)議類型。多個(gè)值之間由逗號(hào)分隔,例如 | 無 | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id | 服務(wù)器證書ID。可以登錄數(shù)字證書管理服務(wù)控制臺(tái)創(chuàng)建并查看。 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn | 是否啟用ALPN。取值:
| off | v2.10.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn-policy | ALPN策略。取值:
關(guān)于該選項(xiàng)的更多取值,請(qǐng)參見CreateListener - 創(chuàng)建監(jiān)聽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"
# 如集群為中國內(nèi)地Region時(shí),組合后的證書ID為${your-cert-id}-cn-hangzhou。
# 如集群為除中國內(nèi)地以外的其他Region時(shí),組合后的證書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
服務(wù)器組的典型操作
設(shè)置調(diào)度策略
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler
描述 | 默認(rèn)值 | 支持的CCM版本 |
調(diào)度算法。取值:
關(guān)于該選項(xiàng)的更多取值,請(qǐng)參見CreateServerGroup - 創(chuàng)建服務(wù)器組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
設(shè)置連接優(yōu)雅中斷
Annotation:多個(gè),如下表所示。
注解 | 描述 | 默認(rèn)值 | 支持的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain | 是否開啟連接優(yōu)雅中斷。取值:
| off | v2.5.0及以上版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-connection-drain-timeout | 設(shè)置連接優(yōu)雅中斷超時(shí)時(shí)間。單位:秒。取值范圍[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
設(shè)置客戶端地址保持
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-client-ip
描述 | 默認(rèn)值 | 支持的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
設(shè)置TCP類型的健康檢查
Annotation:多個(gè),如下表所示。設(shè)置TCP類型的健康檢查,以下所有Annotation必選。TCP端口默認(rèn)開啟健康檢查。
注解 | 描述 | 默認(rèn)值 | 支持的CCM版本 |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-flag | 是否開啟健康檢查,取值:
| on | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type | 健康檢查協(xié)議。取值:
| tcp | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-port | 健康檢查的服務(wù)器端口。取值范圍[0, 65535]。默認(rèn)值:0,表示使用服務(wù)器的端口進(jìn)行健康檢查。 | 0 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout | 健康檢查響應(yīng)的最大超時(shí)時(shí)間。單位:秒。取值范圍[1, 300]。 | 5 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold | 健康檢查連續(xù)成功多少次后,將服務(wù)器的健康檢查狀態(tài)由失敗判定為成功。取值范圍[2, 10]。 | 2 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold | 健康檢查連續(xù)失敗多少次后,將服務(wù)器的健康檢查狀態(tài)由成功判定為失敗。取值范圍[2, 10]。 | 2 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval | 健康檢查的時(shí)間間隔。單位:秒。取值范圍[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
設(shè)置HTTP類型的健康檢查
Annotation:多個(gè),如下表所示。設(shè)置TCP類型的健康檢查,以下所有Annotation必選。TCP端口默認(rèn)開啟健康檢查。
注解 | 描述 | 默認(rèn)值 | 支持的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 | 健康檢查協(xié)議。取值:
| tcp | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-uri | 健康檢查路徑。長度為1~80個(gè)字符,只能使用字母、數(shù)字、字符。 必須以正斜線(/)開頭。詳細(xì)信息請(qǐng)參見CreateServerGroup。 說明 僅 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-domain | 用于健康檢查的域名。取值:
說明 僅 | 無 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-port | 健康檢查的服務(wù)器端口。取值范圍[0, 65535]。默認(rèn)值:0,表示使用服務(wù)器的端口進(jìn)行健康檢查。 | 0 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout | 健康檢查響應(yīng)的最大超時(shí)時(shí)間。單位:秒。取值范圍[1, 300]。 | 5 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold | 健康檢查連續(xù)成功多少次后,將服務(wù)器的健康檢查狀態(tài)由失敗判定為成功。取值范圍[2, 10]。 | 2 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold | 健康檢查連續(xù)失敗多少次后,將服務(wù)器的健康檢查狀態(tài)由成功判定為失敗。取值范圍[2, 10]。 | 2 | |
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-interval | 健康檢查的時(shí)間間隔。單位:秒。取值范圍[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"
# 設(shè)置健康檢查方法,該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
設(shè)置服務(wù)器組類型
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-server-group-type
描述 | 默認(rèn)值 | 支持的CCM版本 |
設(shè)置服務(wù)器組類型。取值:
關(guān)于NLB服務(wù)器組分類及說明,請(qǐng)參見NLB服務(wù)器組。 | 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
復(fù)用已有服務(wù)器組
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port
支持復(fù)用已有虛擬服務(wù)器組,僅在復(fù)用已有NLB場(chǎng)景下生效。具體的使用示例,請(qǐng)參見通過復(fù)用已有負(fù)載均衡實(shí)現(xiàn)跨集群部署服務(wù)。
設(shè)置Service接收流量的權(quán)重
Annotation:service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight
在多個(gè)Service復(fù)用同一個(gè)NLB的場(chǎng)景下,支持通過此Annotation設(shè)置當(dāng)前Service接收流量的權(quán)重。該Annotation僅在復(fù)用已有服務(wù)器組場(chǎng)景下生效。具體的使用示例,請(qǐng)參見通過復(fù)用已有負(fù)載均衡實(shí)現(xiàn)跨集群部署服務(wù)。