文档

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

更新时间:

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

索引

主要内容

跳转链接

注意事项

NLB的典型操作

创建公网类型的NLB

创建私网类型的NLB

指定负载均衡名称

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

创建双栈类型的NLB

为负载均衡添加额外标签

使用已有的负载均衡

监听的典型操作

设置监听安全组

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

创建TCP类型监听

创建UDP类型监听

创建TCPSSL类型监听

开启双向认证

设置TLS安全策略

设置ProxyProtocol

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

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

服务器组的典型操作

设置调度策略

设置连接优雅中断

设置客户端地址保持

设置TCP类型的健康检查

设置HTTP类型的健康检查

设置服务器组类型

注意事项

  • Kubernetes版本不低于v1.24且CCM(Cloud Controller Manager)版本不低于v2.5.0。

  • Service中spec.loadBalancerClass需要指定为alibabacloud.com/nlb, 如不指定则默认创建传统型负载均衡CLB(Classic Load Balancer)。

  • 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.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-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之前,请检查后端服务是否已开启proxyprotocolV2。如后端未开启proxyprotocolV2会导致访问不通,请谨慎配置。

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

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

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

服务器组的典型操作

设置调度策略

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

描述

默认值

支持的CCM版本

调度算法。取值:

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

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

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

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

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

健康检查的时间间隔。单位:秒。取值范围[5, 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

健康检查的时间间隔。单位:秒。取值范围[5, 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

  • 本页导读 (1)
文档反馈