您通过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间使用英文半角逗号(,)分隔,例如 重要 在Service上添加该注解指定额外标签后,在控制台上对对应负载均衡实例标签进行的额外修改操作存在被覆盖的风险。 | 无 | 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时保留自动创建的负载均衡实例
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版本 |
网络型负载均衡实例每秒新建连接限速值。取值范围[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仅在复用已有服务器组场景下生效。具体的使用示例,请参见通过复用已有负载均衡实现跨集群部署服务。