您通过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