すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:アノテーションを使用した NLB の構成

最終更新日:Apr 29, 2026

Service の YAML ファイル内でアノテーションを使用して、Network Load Balancer (NLB) の追加の負荷分散機能(たとえば NLB のネットワークタイプの指定、変更保護の有効化、相互認証の構成など)を有効化できます。本トピックでは、これらのアノテーションを使用して NLB を構成する方法について説明します。構成は、次の 3 つのリソースタイプごとに整理されています:NLB インスタンス、リスナー、およびサーバーグループ。

目次

カテゴリ

機能カテゴリ

構成リンク

前提条件

NLB 操作

作成

インスタンス構成

リスナー操作

作成

リスナー構成

セキュリティ構成

サーバーグループ操作

サーバー構成

注意事項

  • クラスターがバージョン v1.24 以降であり、Cloud Controller Manager (CCM) アドオンがバージョン v2.5.0 以降であることを確認してください。クラスターをアップグレードするには、「Manually upgrade a cluster」をご参照ください。アドオンをアップグレードするには、「Manage add-ons」をご参照ください。

  • Service 定義で spec.loadBalancerClassalibabacloud.com/nlb に設定します。このパラメーターを指定しない場合、デフォルトで クラシックロードバランサー (CLB) が作成されます。

  • Service 作成後は、spec.loadBalancerClass フィールドを変更できません。ロードバランサーのタイプを CLB から NLB に、またはその逆に変換することはできません。

  • NLB インスタンスは ACK コンソールで管理できません。kubectl コマンドを使用してすべての管理操作を実行する必要があります。

NLB 操作

パブリック NLB の作成

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps

説明

サポートされる CCM バージョン

NLB のゾーン、vSwitch、プライベート IP アドレス、および EIP 情報を指定します。形式は次のとおりです:

{zone}:{vSwitchID}:{privateIPAddress}:{EIPInstanceID}。複数のエントリはカンマ (,) で区切ります。

  • ゾーンおよび vSwitch ID:必須。少なくとも 2 つ指定します。例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321

    NLB でサポートされるリージョンおよびゾーンの一覧については、NLB コンソールをご参照ください。

  • プライベート IP アドレス:任意。

  • EIP インスタンス ID:任意。

ゾーンおよび vSwitch ID:v2.5.0 以降

プライベート IP アドレスおよび EIP:v2.12.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
  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 の作成

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type

説明

サポートされる CCM バージョン

NLB のネットワークタイプを指定します。このアノテーションの値を変更することで、NLB をパブリックとプライベートの間で切り替えることができます。有効な値:

  • internet:パブリック NLB。

  • intranet:プライベート NLB。

デフォルト:internet

NLB コンソールにログインして、サポートされるリージョンおよびゾーンをご確認ください。少なくとも 2 つのゾーンが必要です。複数のゾーンはカンマで区切ります。例: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
    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

プライベート IP アドレスの指定

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps

説明

サポートされる CCM バージョン

NLB のゾーン、vSwitch、プライベート IP アドレス、および EIP 情報を指定します。形式は次のとおりです:

{zone}:{vSwitchID}:{privateIPAddress}:{EIPInstanceID}。複数のエントリはカンマ (,) で区切ります。

  • ゾーンおよび vSwitch ID:必須。少なくとも 2 組指定します。例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321

    NLB でサポートされるリージョンおよびゾーンの一覧については、NLB コンソールをご参照ください。

  • プライベート IP アドレス:任意。

  • EIP インスタンス ID:任意。

  • ゾーンおよび vSwitch ID:v2.5.0 以降

  • プライベート IP アドレスおよび EIP:v2.12.1 以降

apiVersion: v1
kind: Service
metadata:
  annotations:
    # 例:cn-hangzhou-k:vsw-i123456:10.1.0.1,cn-hangzhou-j:vsw-j654321:10.2.0.1
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A}:${private-ipv4-A},${zone-B}:${vsw-B}:${private-ipv4-B}"
  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

EIP インスタンス ID の指定

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps

説明

サポートされる CCM バージョン

NLB のゾーン、vSwitch、プライベート IP アドレス、および EIP 情報を指定します。形式は次のとおりです:

{zone}:{vSwitchID}:{privateIPAddress}:{EIPInstanceID}。複数のエントリはカンマ (,) で区切ります。

  • ゾーンおよび vSwitch ID:必須。少なくとも 2 組指定します。例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321

    NLB でサポートされるリージョンおよびゾーンの一覧については、NLB コンソールをご参照ください。

  • プライベート IP アドレス:任意。

  • EIP インスタンス ID:任意。

ゾーンおよび vSwitch ID:v2.5.0 以降

プライベート IP アドレスおよび EIP:v2.12.1 以降

apiVersion: v1
kind: Service
metadata:
  annotations:
    # プライベート IP アドレスが不要な場合は、プライベート IP アドレスフィールドを空のままにしてください。
    # 例:cn-hangzhou-k:vsw-i123456::eip-12345,cn-hangzhou-j:vsw-j654321::eip-54321
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A}::${eip-A},${zone-B}:${vsw-B}::${eip-B}"
  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

ロードバランサー名の指定

注釈: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-name

説明

サポートされる CCM バージョン

ロードバランサーインスタンスの名前を指定します。名前は 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

リソースグループの指定

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-resource-group-id

説明

サポートされる CCM バージョン

ロードバランサーのリソースグループを指定します。リソースグループ ID は設定後に変更できません。

Resource Management コンソールでリソースグループ 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 の作成

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ip-version

IPv6 バックエンドサーバーをアタッチするには、「IPv6 バックエンドサーバーのアタッチ」をご参照ください。

説明

サポートされる CCM バージョン

クラスターの kube-proxy モードは IPVS である必要があります。

NLB の IP プロトコルバージョンを指定します。IP プロトコルバージョンは作成後に変更できません。有効な値:

  • ipv4:IPv4。

  • DualStack:IPv4 と IPv6 の両方をサポート。

    • service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps で指定された 2 つの 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

追加タグの追加

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-resource-tags

説明

サポートされる CCM バージョン

追加のタグを追加できます。複数のタグはカンマ (,) で区切ります。例:k1=v1,k2=v2。バージョン 2.10.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-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

既存のロードバランサーの使用

重要

既存の LoadBalancer Service に対して再利用アノテーションを追加または変更しないでください。これにより、再利用が失敗したり、CCM によって作成されたロードバランサーが解放されなくなる可能性があります。

アノテーション: 次の表に示す複数のアノテーションを使用します。

アノテーション

説明

サポートされる CCM バージョン

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

既存のロードバランサーの ID を指定します。

v2.5.0 以降

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners

Service 構成に基づいて NLB リスナー構成を同期するかどうかを指定します。有効な値:

  • true:CCM は Service 構成に基づいて NLB リスナーを作成、更新、削除します。

  • false:CCM は NLB リスナーを処理しません。

デフォルト:false

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

共有帯域幅パッケージのバインド

アノテーション: 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

ゾーン間転送の構成

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cross-zone-enabled

説明

サポートされる CCM バージョン

ゾーン間転送を有効にするかどうかを指定します。有効な値:

  • on

  • off

デフォルト:on

v2.13.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-cross-zone-enabled: "off" 
  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

送信元 IP アドレス許可リストの構成

フィールド: .spec.loadBalancerRanges

説明

サポートされる CCM バージョン

この機能は、CCM によって作成および管理される NLB インスタンスにのみ適用されます。再利用されたインスタンスではサポートされていません。

このフィールドを構成すると、CCM は自動的にセキュリティグループを作成し、必要なアクセスルールを設定して、NLB インスタンスに関連付けます。このフィールドを構成しないか、空のままにした場合、セキュリティグループは関連付けられません。

デフォルト:空

重要
  • このフィールドを追加または変更すると、NLB 上の既存のセキュリティグループの関連付けが上書きされます。NLB に手動で他のセキュリティグループを関連付けている場合は、注意してください。

  • CCM によって作成されたセキュリティグループまたはそのタグを変更しないでください。そうしないと、関連付けが解除されたり、ルールが上書きされたりする可能性があります。

v2.14.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:
  # 許可された送信元 IP アドレス CIDR ブロックを指定します。
  loadBalancerSourceRanges:
    - 10.0.0.0/8
    - 172.16.0.0/16
  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 ネットワークタイプの指定

アノテーション: 次の表に示す複数のアノテーションを使用します。

アノテーション

説明

サポートされる CCM バージョン

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

クラスターの kube-proxy モードは IPVS である必要があります。このアノテーションは NLB の IP プロトコルバージョンを指定します。IP プロトコルバージョンは作成後に変更できません。有効な値:

  • 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。

デフォルト:intranet

説明

パブリック IPv6 アドレスを使用するには、NLB インスタンスがデプロイされている VPC に IPv6 ゲートウェイが存在している必要があります。詳細については、「IPv6 ゲートウェイの作成と管理」をご参照ください。

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.beta.kubernetes.io/alibaba-cloud-loadbalancer-security-group-ids

説明

サポートされる CCM バージョン

リスナーに関連付けるセキュリティグループの ID を指定します。複数の ID はカンマ (,) で区切ります。例: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" # 複数のセキュリティグループ 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

TCP および UDP リスナーの構成

説明

サポートされる CCM バージョン

この機能には Kubernetes v1.24 以降が必要です。クラスターのスペックアップに関する詳細については、「ACK Kubernetes クラスターのスペックアップ」をご参照ください。

該当なし

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 リスナーの作成

説明

UDP リスナーを作成する際にヘルスチェックを指定しない場合、サーバーグループに対してデフォルトで TCP ヘルスチェックが有効になります。UDP リスナーでは、アノテーションを使用して明示的に 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 リスナーの作成

アノテーション: 必要なアノテーションは次の表を参照してください。

アノテーション

説明

サポートされる 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 を取得するには、Certificate Management Service コンソールにログインし、証明書を作成して、SSL 証明書管理ページで ID を確認します。

次の図はその例です:

image

重要

現在、TCP/SSL リスナーは、クライアント IP アドレス永続化が有効になっているサーバーグループをサポートしていません。つまり、service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "tcpssl:${port}" および service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-client-ip: "on" アノテーションを同時に構成することはできません。NLB を介してクライアント IP アドレスを取得する必要がある場合は、「NLB を介してバックエンドサーバーで実際のクライアント IP アドレスを取得する」をご参照ください。

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"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

リスナーポート範囲の構成

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-listener-port-range

説明

サポートされる CCM バージョン

この機能には Terway ネットワークプラグインが必要です。

リスナーが指定されたポート範囲をリッスンするように構成できます。その後、NLB インスタンスはこのポート範囲からのトラフィックをバックエンドサーバーの同じポート範囲に転送します。たとえば、80~100 のポート範囲を構成した場合、NLB インスタンスのポート 80~100 へのトラフィックは、バックエンドサーバーのポート 80~100 に転送されます。

形式は port-range:service-port です。複数の値はカンマ (,) で区切ります。例:80-100:80,400-500:443。同じプロトコルのポートおよびポート範囲は重複してはいけません。

targetPort はサーバーグループのヘルスチェックポートを指定し、1~65535 の整数である必要があります。

v2.11.4 以降

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。
    # 80-100 および 400-500 のポート範囲のリスナーを構成します。
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-listener-port-range: "80-100:80,400-500:443"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    # このポート構成は 80-100 の範囲にマッピングされます。
    port: 80
    protocol: TCP
    # targetPort はバックエンドサーバーのヘルスチェックポートを指定し、整数である必要があります。
    targetPort: 80
  - name: https
    # このポート構成は 400-500 の範囲にマッピングされます。
    port: 443
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

相互認証の有効化

アノテーション: 必要なアノテーションは次の表を参照してください。

アノテーション

説明

サポートされる 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 を取得するには、Certificate Management Service コンソールにログインし、証明書を作成して、SSL 証明書管理ページで ID を確認します。

次の図はその例です:

image

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

ID を取得するには、Certificate Management Service コンソールにログインし、PCA 証明書管理ページの証明書詳細で ID を確認します。

image

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

相互認証を有効にするかどうかを指定します。有効な値:

  • on:相互認証を有効にします。

  • off:相互認証を無効にします。

デフォルト値: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"   
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}" 
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert-id: "${your-cacert-id}" 
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cacert: "on"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

TLS セキュリティポリシーの設定

アノテーション: 必要なアノテーションは次の表を参照してください。

アノテーション

説明

サポートされる 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 を取得するには、Certificate Management Service コンソールにログインし、証明書を作成して、SSL 証明書管理ページで ID を確認します。

次の図はその例です:

image

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-tls-cipher-policy

TLS セキュリティポリシーの 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"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}" 
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-tls-cipher-policy: "tls_cipher_policy_1_0"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

Proxy Protocol の有効化

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-proxy-protocol

説明

サポートされる CCM バージョン

Proxy Protocol を使用してクライアント IP アドレスをバックエンドサーバーに渡すかどうかを指定します。有効な値:

  • on:機能を有効にします。

  • off:機能を無効にします。

デフォルト値:off

重要

Proxy Protocol を有効にする前に、バックエンドサービスが Proxy Protocol 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-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

Proxy Protocol による追加情報の送信

アノテーション: 必要なアノテーションは次の表を参照してください。

アノテーション

説明

サポートされる CCM バージョン

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

Proxy Protocol を使用してクライアント IP アドレスをバックエンドサーバーに渡すかどうかを指定します。有効な値:

  • on:機能を有効にします。

  • off:機能を無効にします。

デフォルト値:off

重要

Proxy Protocol を有効にする前に、バックエンドサービスが Proxy Protocol v2 をサポートしていることを確認してください。サポートしていない場合、接続は失敗します。このパラメーターは慎重に構成してください。

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

リスナー接続レート制限の設定

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cps

説明

サポートされる CCM バージョン

Network Load Balancer (NLB) インスタンスの秒間新規接続数の最大値です。値は 0~1,000,000 の整数である必要があります。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

リスナーのアイドルタイムアウトの設定

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idle-timeout

説明

サポートされる CCM バージョン

アイドル接続のタイムアウト時間(秒)。有効な値:10~900。

デフォルト値:900

v2.5.0 以降

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-zone-maps: "${zone-A}:${vsw-A},${zone-B}:${vsw-B}" # 例:cn-hangzhou-k:vsw-i123456,cn-hangzhou-j:vsw-j654321。
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-idle-timeout: "60"
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

ALPN ポリシーの設定

アノテーション: 必要なアノテーションは次の表を参照してください。

アノテーション

説明

サポートされる 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 を取得するには、Certificate Management Service コンソールにログインし、証明書を作成して、SSL 証明書管理ページで ID を確認します。

次の図はその例です:

image

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

アプリケーション層プロトコルネゴシエーション (ALPN) を有効にするかどうかを指定します。有効な値:

  • on:ALPN を有効にします。

  • off:ALPN を無効にします。

デフォルト値:off

v2.10.0 以降

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

ALPN ポリシーです。有効な値:

  • HTTP1Only:HTTP/1.x プロトコルのみをネゴシエートします。優先順位:HTTP/1.1 > HTTP/1.0。

  • HTTP2Only:HTTP/2.0 プロトコルのみをネゴシエートします。

  • HTTP2Optional:HTTP/1.x プロトコルを優先しますが、HTTP/2.0 プロトコルも受け入れます。優先順位:HTTP/1.1 > HTTP/1.0 > HTTP/2.0。

  • HTTP2Preferred:HTTP/2 プロトコルを優先しますが、HTTP/1.x プロトコルも受け入れます。優先順位:HTTP/2.0 > HTTP/1.1 > HTTP/1.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"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}" 
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn: "on"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-alpn-policy: "HTTP1Only" 
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

追加証明書の構成

アノテーション

説明

サポートされる 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 を取得するには、Certificate Management Service コンソールにログインし、証明書を作成して、SSL 証明書管理ページで ID を確認します。

次の図はその例です:

image

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-cert-ids

追加証明書の ID です。複数の証明書 ID はカンマ (,) で区切ります。ID を取得するには、Certificate Management Service コンソールにログインし、証明書を作成して、SSL 証明書管理ページで ID を確認します。

次の図はその例です:

image

v2.13.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"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${CertIdentifier}" 
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-additional-cert-ids: "${CertIdentifier-1},${CertIdentifier-2}" # 複数の追加証明書 ID はカンマ (,) で区切ります。
  name: nginx
  namespace: default
spec:
  externalTrafficPolicy: Local
  ports:
  - name: tcp
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

サーバーグループの一般的な操作

スケジューリングアルゴリズム

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler

説明

サポートされる CCM バージョン

スケジューリングアルゴリズムです。有効な値:

  • wrr:重み付きラウンドロビン。重みの高いバックエンドサーバーほど多くのリクエストを受け取ります。

  • rr:ラウンドロビン。リクエストは順番にバックエンドサーバーに分散されます。

  • sch:送信元 IP ハッシュ。同じ送信元 IP アドレスからのリクエストは常に同じバックエンドサーバーにルーティングされます。

  • tch:4 タプルハッシュ。リクエストは 4 タプル(送信元 IP アドレス、宛先 IP アドレス、送信元ポート、宛先ポート)の一貫性のあるハッシュに基づいてルーティングされます。これにより、同じフローからのトラフィックは常に同じバックエンドサーバーに送られます。

  • wlc:重み付き最小接続。リクエストは各バックエンドサーバーの重みと現在の負荷(アクティブ接続数)に基づいて分散されます。バックエンドサーバーの重みが同じ場合、アクティブ接続数が最も少ないサーバーが次のリクエストを受け取る可能性が高くなります。

デフォルト値:wrr

このアノテーションの値の詳細については、CreateServerGroup API リファレンスの Scheduler パラメーターをご参照ください。

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

接続ドレイン

アノテーション: 次の表に示す複数のアノテーションが利用可能です。

アノテーション

説明

サポートされる 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

接続ドレインのタイムアウト期間です。

  • 単位:秒。

  • 有効な値:0~900。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-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

クライアント IP 保持

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-preserve-client-ip

説明

サポートされる CCM バージョン

クライアント IP 保持を有効にするかどうかを指定します。有効な値:

  • on:機能を有効にします。

  • off:機能を無効にします。

デフォルト値:on

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 ヘルスチェック

アノテーション: 次の表に示す複数のアノテーションが利用可能です。TCP ヘルスチェックを構成するには、以下のすべてのアノテーションが必要です。デフォルトでは、TCP ポートに対してヘルスチェックが有効になっています。

アノテーション

説明

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

ヘルスチェックを有効にするかどうかを指定します。有効な値:

  • on:ヘルスチェックを有効にします。

  • off:ヘルスチェックを無効にします。

デフォルト値:on

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

ヘルスチェックプロトコルです。有効な値:

  • tcp

  • udp

  • http

デフォルト値:tcp

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

ヘルスチェックに使用するバックエンドサーバーのポートです。有効な値:065535。デフォルト値の 0 は、バックエンドサーバーのポートを使用することを示します。

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

ヘルスチェック応答を待つ最大時間です。単位:秒。有効な値:1300

デフォルト値:5

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold

バックエンドサーバーが正常と見なされるために必要な、連続する成功したヘルスチェックの回数です。有効な値:210

デフォルト値:2

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold

バックエンドサーバーが異常と見なされるために必要な、連続する失敗したヘルスチェックの回数です。有効な値:210

デフォルト値:2

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

連続するヘルスチェック間の間隔です。単位:秒。有効な値:150

デフォルト値:5

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

UDP ヘルスチェック

アノテーション: 複数のアノテーションが利用可能で、すべてが必須です。UDP ヘルスチェックを使用するには、Service で定義されたすべてのポートが UDP プロトコルを使用していることを確認してください。

アノテーション

説明

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

ヘルスチェックを有効にするかどうかを指定します。有効な値:

  • on:ヘルスチェックを有効にします。

  • off:ヘルスチェックを無効にします。

デフォルト値:on

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

ヘルスチェックプロトコルです。有効な値:

  • tcp

  • udp

  • http

デフォルト値:tcp

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

ヘルスチェックに使用するサーバーポートです。有効な値:[0, 65535]。デフォルト値は 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

この回数の連続するヘルスチェック失敗後に、バックエンドサーバーは異常と見なされます。有効な値:[2, 10]。デフォルト値:2

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

連続するヘルスチェック間の間隔です。単位:秒。値の範囲:[1, 300]。デフォルト値:5

この値は health-check-connect-timeout の値より大きくする必要があります。そうでないと、ヘルスチェックが正しく機能しない可能性があります。
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: "udp"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout: "3"
    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: udp
    port: 80
    protocol: UDP
    targetPort: 80
  selector:
    app: nginx
  loadBalancerClass: "alibabacloud.com/nlb"
  type: LoadBalancer

HTTP ヘルスチェック

アノテーション: 次の表に示す複数のアノテーションが利用可能です。HTTP ヘルスチェックを構成するには、以下のすべてのアノテーションが必要です。デフォルトでは、ヘルスチェックは 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

  • udp

  • 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

ヘルスチェックに使用するドメイン名です。有効な値:

  • $SERVER_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

ヘルスチェックに使用するバックエンドサーバーのポートです。有効な値:065535。デフォルト値の 0 は、バックエンドサーバーのポートを使用することを示します。

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

ヘルスチェック応答を待つ最大時間です。単位:秒。有効な値:1300

デフォルト値:5

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold

バックエンドサーバーが正常と見なされるために必要な、連続する成功したヘルスチェックの回数です。有効な値:210

デフォルト値:2

service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold

バックエンドサーバーが異常と見なされるために必要な、連続する失敗したヘルスチェックの回数です。有効な値:210

デフォルト値:2

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

連続するヘルスチェック間の間隔です。単位:秒。有効な値:150

デフォルト値:5

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"
    # ヘルスチェックメソッドを設定します。このアノテーションは任意です。
    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

サーバーグループタイプ

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-server-group-type

説明

サポートされる CCM バージョン

サーバーグループのタイプです。有効な値:

  • Ip:IP アドレス。IP アドレスを指定してバックエンドサーバーを追加できます。

  • Instance(デフォルト):ECS インスタンスまたは Elastic Network Interface (ENI) をバックエンドサーバーとして追加できます。

デフォルト値:Instance

NLB サーバーグループタイプの詳細については、「サーバーグループ」をご参照ください。

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

IPv6 バックエンドサーバー

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-ip-version

説明

サポートされる CCM バージョン

サーバーグループ内のバックエンドサーバーの IP バージョンです。

  • ipv4:サーバーグループには IPv4 バックエンドサーバーのみが含まれます。

  • ipv6:サーバーグループには IPv6 バックエンドサーバーのみが含まれます。

  • DualStack:サーバーグループには IPv4 および IPv6 の両方のバックエンドサーバーが含まれ、IP バージョンアフィニティが自動的に有効になります。

デフォルト値:ipv4

説明

サーバーグループに IPv4 および IPv6 の両方のバックエンドサーバーを追加すると、Pod クォータの使用量が 2 倍になります。

  • ipv6:v2.9.1 以降

  • DualStack:v2.14.0 以降

サーバーグループの再利用

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-vgroup-port

このアノテーションを使用すると、既存のサーバーグループを再利用できます。これは、既存の NLB インスタンスを再利用する場合にのみ有効です。例については、「ロードバランサーを再利用して複数のクラスターにサービスをデプロイする」をご参照ください。

サービスのトラフィック重み

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight

複数の Service が同じ NLB インスタンスを再利用するシナリオでは、このアノテーションを使用して現在の Service のトラフィック重みを設定できます。このアノテーションは、既存のサーバーグループを再利用する場合にのみ有効です。例については、「ロードバランサーを再利用して複数のクラスターにサービスをデプロイする」をご参照ください。

重み更新の無視

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-ignore-weight-update

説明

サポートされる CCM バージョン

on に設定すると、CCM は Service 同期中にサーバーグループ内のバックエンドサーバーの重みを更新しません。他のメカニズムでバックエンドサーバーの重みを管理している場合に役立ちます。

  • on

  • off

デフォルト値:off

v2.11.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-ignore-weight-update: "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

デフォルトのバックエンドサーバー重み

アノテーション: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-default-weight

説明

サポートされる CCM バージョン

サーバーグループ内のバックエンドサーバーのデフォルトの重みです。重みが大きいほど、サーバーが受信するトラフィックの割合が大きくなります。

量が増加します。

有効な値:0100。このアノテーションを構成しない場合、システムはネットワークタイプに基づいてデフォルトの重みを使用します。

この構成は、バックエンドインスタンスが ECS インスタンスで、Service の externalTrafficPolicyLocal に設定されている場合には有効になりません。

v2.14.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
    # サーバーグループ内のサーバーのデフォルト重みを 35 に設定します。
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-default-weight: "35"
  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