全部產品
Search
文件中心

Server Load Balancer:通過Annotation配置網路型負載平衡NLB

更新時間:Jul 25, 2024

您通過Service YAML檔案中的Annotation(註解)實現豐富的負載平衡功能。網路型負載平衡NLB(Network Load Balancer)是阿里雲面向萬物互聯時代推出的新一代四層負載平衡,支援超高效能和自動彈效能力。本文從NLB、監聽和伺服器組三種資源維度介紹通過Annotation可以對NLB進行的常見配置操作。

索引

主要內容

跳轉連結

注意事項

NLB的典型操作

建立公網類型的NLB

建立私網類型的NLB

指定負載平衡名稱

指定負載平衡所屬的資源群組

建立雙棧類型的NLB

為負載平衡添加額外標籤

使用已有的負載平衡

綁定共用頻寬包

開啟刪除保護

開啟配置修改保護

指定IPv6公私網類型

監聽的典型操作

設定監聽安全性群組

為監聽同時配置TCP及UDP協議

建立TCP類型監聽

建立UDP類型監聽

建立TCPSSL類型監聽

開啟雙向認證

設定TLS安全性原則

設定ProxyProtocol

ProxyProtocol攜帶額外資訊

設定監聽每秒建立串連限速值

設定監聽串連空閑逾時時間

伺服器組的典型操作

設定調度策略

設定串連優雅中斷

設定用戶端地址保持

設定TCP類型的健全狀態檢查

設定HTTP類型的健全狀態檢查

設定伺服器群組類型

注意事項

  • 叢集版本為v1.24及以上且CCM(Cloud Controller Manager)版本不低於v2.5.0。如需升級叢集,請參見手動升級叢集;如需升級組件,請參見管理組件

  • Service中spec.loadBalancerClass需要指定為alibabacloud.com/nlb。如不指定,則預設建立什麼是傳統型負載平衡CLB

  • Service一旦建立後spec.loadBalancerClass不支援更改,CLB及NLB資源無法相互轉換。

  • 暫不支援通過Container Service控制台管理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-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

監聽的典型操作

設定監聽安全性群組

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版本

網路型Server Load Balancer執行個體每秒建立串連限速值。取值範圍[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

健全狀態檢查的時間間隔。單位:秒。取值範圍[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