通过Annotation配置网络型负载均衡NLB

您通过Service YAML文件中的Annotation(注解)实现丰富的负载均衡功能。网络型负载均衡NLB(Network Load Balancer)是阿里云面向万物互联时代推出的新一代四层负载均衡,支持超高性能和自动弹性能力。本文从NLB、监听和服务器组三种资源维度介绍通过Annotation可以对NLB进行的常见配置操作。

索引

主要内容

跳转链接

注意事项

NLB的典型操作

创建公网类型的NLB

创建私网类型的NLB

指定负载均衡名称

指定负载均衡所属的资源组

创建双栈类型的NLB

为负载均衡添加额外标签

使用已有的负载均衡

绑定共享带宽包

开启删除保护

开启配置修改保护

指定IPv6公私网类型

删除Service时保留自动创建的负载均衡实例

监听的典型操作

设置监听安全组

为监听同时配置TCP及UDP协议

创建TCP类型监听

创建UDP类型监听

创建TCPSSL类型监听

开启双向认证

设置TLS安全策略

设置ProxyProtocol

ProxyProtocol携带额外信息

设置监听每秒新建连接限速值

设置监听连接空闲超时时间

设置ALPN策略

服务器组的典型操作

设置调度策略

设置连接优雅中断

设置客户端地址保持

设置TCP类型的健康检查

设置HTTP类型的健康检查

设置服务器组类型

复用已有服务器组

设置Service接收流量的权重

注意事项

  • 集群版本为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

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps

描述

默认值

支持的CCM版本

指定NLB的可用区。

NLB支持的地域及可用区可以登录NLB控制台查看,至少需要两个可用区。多个可用区间用逗号分隔,例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321

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

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type

描述

默认值

支持的CCM版本

指定NLB为私网类型。可以更改此Annotation取值,实现NLB的公私网转变。取值:

  • internet:公网NLB。

  • intranet:私网NLB。

NLB支持的地域及可用区可以登录NLB控制台查看,至少需要两个可用区。多个可用区间用逗号分隔,例如cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321

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

指定负载均衡名称

Annotationservice.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

指定负载均衡所属的资源组

Annotationservice.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

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version

描述

默认值

支持的CCM版本

指定NLB的协议版本。创建后,IP类型不可更改。使用时,集群的kube-proxy代理模式需为IPVS。取值:

  • ipv4:IPv4类型。

  • DualStack:双栈类型,同时支持IPv4和IPv6。

    • service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps中指定的两个vSwitch均需开启IPv6。

    • 生成的IPv6地址仅可在支持IPv6的环境中访问。

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

为负载均衡添加额外标签

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags

描述

默认值

支持的CCM版本

支持额外添加Tag标签。多个Tag间使用英文半角逗号(,)分隔,例如k1=v1,k2=v2。v2.10.0及以上版本支持对已创建实例和复用实例的标签进行修改。

重要

在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监听配置。取值:

  • true:CCM会根据Service配置,创建、更新、删除NLB监听。

  • false:CCM不会对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

绑定共享带宽包

Annotationservice.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

开启删除保护

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-modification-protection

描述

默认值

支持的CCM版本

是否开启NLB删除保护。取值:

  • on

  • off

重要

对于LoadBalancer类型的Service创建的负载均衡,如果手动在NLB控制台开启了删除保护,仍可通过kubectl delete svc {your-svc-name}的方式删除Service关联的负载均衡。

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

开启配置修改保护

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-modification-protection

描述

默认值

支持的CCM版本

是否开启NLB配置修改保护。取值:

  • ConsoleProtection

  • NonProtection

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:IPv4类型。

  • DualStack:双栈类型,同时支持IPv4和IPv6。

    • service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps中指定的两个vSwitch均需开启IPv6。

    • 生成的IPv6地址仅可在支持IPv6的环境中访问。

ipv4

v2.5.0及以上版本

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ipv6-address-type

指定NLB的IPv6网络类型。取值:

  • intranet:私网IPv6

  • internet:公网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时保留自动创建的负载均衡实例

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-lb-on-delete

描述

默认值

支持的CCM版本

在删除LoadBalancer类型的Service时,保留通过Service创建的NLB实例,并将NLB实例和服务器组上的kubernetes.do.not.deleteack.aliyun.com标签删除。服务器组内的已有的服务器将得到保留。

该能力开启时,会在Service同步时产生类型为PreservedOnDelete的Warning事件。配置该Annotation后,推荐检查该事件是否存在,进一步确认能力已成功开启。

取值:

  • 不为空:启用保留能力。

  • 值为空或不设置:不启用保留能力。

重要

请通过删除Service而不是修改Service类型的方式进行该操作,否则可能会导致Service被错误地重新关联到该Service上。

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

监听的典型操作

设置监听安全组

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-security-group-ids

描述

默认值

支持的CCM版本

设置监听安全组。多个值之间使用英文半角逗号(,)分隔,例如sg-aaaaa,sg-bbbbb

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

设置监听的协议类型。多个值之间由逗号分隔,例如TCP:80,TCPSSL:443

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

设置监听的协议类型。多个值之间由逗号分隔,例如TCP:80,TCPSSL:443

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

是否启动双向认证。取值:

  • on:启动。

  • off:关闭。

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

设置监听的协议类型。多个值之间由逗号分隔,例如TCP:80,TCPSSL:443

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

  • tls_cipher_policy_1_1

  • tls_cipher_policy_1_2

  • tls_cipher_policy_1_2_strict

  • tls_cipher_policy_1_2_strict_with_1_3

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

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol

描述

默认值

支持的CCM版本

是否开启通过Proxy Protocol协议携带客户端源地址到服务器。取值:

  • on:开启。

  • off:关闭。

重要

启用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协议携带客户端源地址到服务器。取值:

  • on:开启。

  • off:关闭。

重要

启用ProxyProtocol之前,请检查后端服务是否已开启Proxy Protocol v2。如未开启,会导致访问不通,请谨慎配置。

off

v2.5.0及以上版本

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-vpc-id-enabled

是否开启通过 Proxy Protocol 协议携带 VpcId 到后端服务器。取值:

  • on:开启。

  • off:关闭。

off

v2.9.1及以上版本

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-ep-id-enabled

是否开启通过 Proxy Protocol 协议携带 PrivateLinkEpId 到后端服务器。取值:

  • on:开启。

  • off:关闭。

off

v2.9.1及以上版本

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ppv2-pvl-eps-id-enabled

是否开启通过 Proxy Protocol 协议携带 PrivateLinkEpsId 到后端服务器。取值:

  • on:开启。

  • off:关闭。

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

设置监听每秒新建连接限速值

Annotationservice.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

设置监听连接空闲超时时间

Annotationservice.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

设置监听的协议类型。多个值之间由逗号分隔,例如TCP:80,TCPSSL:443

v2.5.0及以上版本

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id

服务器证书ID。可以登录数字证书管理服务控制台创建并查看。

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn

是否启用ALPN。取值:

  • on:开启。

  • off:关闭。

off

v2.10.0及以上版本

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn-policy

ALPN策略。取值:

  • HTTP1Only:只协商使用 HTTP1.x 协议,优先级为 HTTP1.1>HTTP1.0。

  • HTTP2Only:只协商使用 HTTP2.0 协议。

  • HTTP2Optional:优先使用 HTTP1.x 协议,但也接受 HTTP2.0 协议,优先级为 HTTP1.1>HTTP1.0>HTTP2.0。

  • HTTP2Preferred:优先使用 HTTP2.0 协议,但也接受 HTTP1.x 协议,优先级为 HTTP2.0>HTTP1.1>HTTP1.0。

关于该选项可能的更多取值,请参见CreateListener - 创建监听API中的AlpnPolicy字段。

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: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

服务器组的典型操作

设置调度策略

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler

描述

默认值

支持的CCM版本

调度算法。取值:

  • wrr(默认值):加权轮询,权重值越高的服务器,被轮询到的概率也越高。

  • rr:轮询,按照访问顺序依次将外部请求分发到服务器。

  • sch:源IP哈希,相同的源地址会调度到相同的服务器。

  • tch:四元组哈希,基于四元组(源IP、目的IP、源端口和目的端口)的一致性哈希,相同的流会调度到相同的服务器。

  • wlc:加权最小连接数,除了根据每台后端服务器设定的权重值来进行轮询,同时还考虑后端服务器的实际负载(即连接数)。当权重值相同时,当前连接数越小的后端服务器被轮询到的概率也越高。

关于该选项可能的更多取值,请参见CreateServerGroup - 创建服务器组API中的Scheduler字段。

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

是否开启连接优雅中断。取值:

  • on:开启。

  • off:关闭。

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

设置客户端地址保持

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-client-ip

描述

默认值

支持的CCM版本

是否开启客户端地址保持功能。取值:

  • on:开启。

  • off:关闭。

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:开启。

  • off:关闭。

on

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type

健康检查协议。取值:

  • tcp

  • http

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:开启。

  • off:关闭。

on

v2.5.0及以上版本

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-type

健康检查协议。取值:

  • tcp

  • http

tcp

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-uri

健康检查路径。长度为1~80个字符,只能使用字母、数字、字符。 必须以正斜线(/)开头。详细信息请参见CreateServerGroup

说明

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-typeHTTP时,该参数生效。

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-domain

用于健康检查的域名。取值:

  • $_ip:使用服务器内网IP。

  • domain:指定特定域名。长度限制1~80个字符,只能使用小写字母、数字、短划线(-)、半角句号(.)。

说明

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-typeHTTP时,该参数生效。

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

健康检查方法。取值:

  • GET

  • HEAD

说明

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-typeHTTP时,该参数生效。

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

设置服务器组类型

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-server-group-type

描述

默认值

支持的CCM版本

设置服务器组类型。取值:

  • Ip:IP地址类型,支持直接添加IP地址类型的后端服务器。

  • Instance(默认值):服务器类型,支持添加ECS、ENI类型的实例。

关于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

复用已有服务器组

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port

支持复用已有虚拟服务器组,仅在复用已有NLB场景下生效。具体的使用示例,请参见通过复用已有负载均衡实现跨集群部署服务

设置Service接收流量的权重

Annotationservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight

在多个Service复用同一个NLB的场景下,支持通过此Annotation设置当前Service接收流量的权重。该Annotation仅在复用已有服务器组场景下生效。具体的使用示例,请参见通过复用已有负载均衡实现跨集群部署服务