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

Container Service for Kubernetes:アノテーションを使用した ELB の一般的な構成

最終更新日:Mar 27, 2026

Service YAML ファイル内のアノテーションを使用して、Edge Load Balancer (ELB) インスタンス、リスナー、バックエンドサーバーグループ、およびエッジ Elastic IP アドレス (エッジ EIP) を構成します。

このトピックで使用されるすべてのアノテーションキーはプレフィックス service.beta.kubernetes.io/ を使用します。表にはサフィックスのみを示します。

注意事項

  • アノテーションの値は大文字と小文字を区別します。小文字を使用してください。

  • Service に type: LoadBalancer を設定します。

  • ELB を使用するには、loadBalancerClass: alibabacloud.com/elb を設定します。

重要

ELB インスタンスの構成は、インスタンス作成後に変更できません。インスタンスレベルの設定を変更する場合は、Service を削除して新しい値で再作成する必要があります。

ベースライン Service 構成

このトピックのすべての例は、以下の Service を基にしています。この Service はラベルによって ENS ノードプールを選択し、Service トポロジーを有効にして、指定されたノードプール内の Pod のみにトラフィックを転送します。

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool     # Service トポロジーを有効化。
    service.openyurt.io/nodepool-labelselector: key1=val1  # ENS ノードプールを選択。
spec:
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerClass: alibabacloud.com/elb

nodepool-labelselector アノテーションは、次の 2 つの構文を受け付けます。

構文 論理
key1=val1,key2=val2 AND — ノードプールはすべてのラベルを満たす必要があります。 env=prod,region=cn-north
key in (val1,val2) OR — ノードプールはいずれかの値を満たせばよいです。 region in (cn-north,cn-south)

ELB インスタンス構成

インスタンスタイプと課金方法の指定

インスタンスタイプの詳細および料金については、「CreateLoadBalancer」および「インスタンスタイプと課金」をご参照ください。

アノテーションサフィックス 説明 デフォルト
alibaba-cloud-loadbalancer-spec ELB インスタンスタイプ(例:elb.s1.small)。 elb.s2.small
alibaba-cloud-loadbalancer-pay-type 課金方法。PostPaid(従量課金)のみサポートされています。 PostPaid

例:

annotations:
  openyurt.io/topologyKeys: openyurt.io/nodepool
  service.openyurt.io/nodepool-labelselector: key1=val1
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: elb.s1.small
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-pay-type: PostPaid

Service 公開モードの設定

アノテーションサフィックス 説明 デフォルト
alibaba-cloud-loadbalancer-address-type internet:Service をインターネットに公開(内部 ELB インスタンスとエッジ EIP が必要)。intranet:Service をプライベートネットワークに公開(内部 ELB インスタンスのみ必要)。 internet

例:

annotations:
  openyurt.io/topologyKeys: openyurt.io/nodepool
  service.openyurt.io/nodepool-labelselector: key1=val1
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet

エッジ EIP 仕様の構成(インターネットモードのみ)

address-typeinternet の場合、内部 ELB インスタンスとエッジ EIP の両方が必要です。

アノテーションサフィックス 説明 デフォルト
alibaba-cloud-loadbalancer-eip-bandwidth エッジ EIP の最大帯域幅。単位:Mbit/s。 10
alibaba-cloud-loadbalancer-eip-isp ISP。cmcc(China Mobile)、unicom(China Unicom)、elecom(China Telecom)。 なし
alibaba-cloud-loadbalancer-eip-instance-charge-type EIP 課金方法。PostPaid(従量課金)のみサポートされています。 PostPaid
alibaba-cloud-loadbalancer-eip-internet-charge-type インターネット帯域幅の課金方法。95BandwidthByMonth(月次 95 パーセンタイル課金)のみサポートされています。 95BandwidthByMonth

例:

annotations:
  openyurt.io/topologyKeys: openyurt.io/nodepool        # Service トポロジーを有効化。
  service.openyurt.io/nodepool-labelselector: key1=val1 # ENS ノードプールを選択。
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-eip-bandwidth: "10"
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-eip-isp: cmcc
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-eip-instance-charge-type: "PostPaid"
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-eip-internet-charge-type: "95BandwidthByMonth"

バックエンドサーバーグループ

外部トラフィックポリシーの設定

外部トラフィックポリシーは、どの ENS ノードがトラフィックを受信するかを制御します。

  • ローカルモードexternalTrafficPolicy: Local):トラフィックはアプリケーション Pod をホストしているノードにのみ送信されます。複数の Service が 1 つの ELB インスタンスを共有する場合は使用できません。

  • クラスターモード(デフォルト):トラフィックは仮想プライベートクラウド(VPC)内のすべての ENS ノードに分散されます。複数の Service が 1 つの ELB インスタンスを共有する場合に必要です。

例(ローカルモード):

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool        # Service トポロジーを有効化。
    service.openyurt.io/nodepool-labelselector: key1=val1 # ENS ノードプールを選択。
spec:
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerClass: alibabacloud.com/elb
  externalTrafficPolicy: Local

ノードラベルによるバックエンドサーバーの追加

アノテーションサフィックス 説明 デフォルト
alibaba-cloud-loadbalancer-backend-label バックエンドサーバーとして追加するノードのラベル。複数のラベルは AND 論理で、カンマで区切ります(例:k1=v1,k2=v2)。 該当なし

特定のエッジノードをバックエンドサーバープールから除外するには、そのノードにラベル node.kubernetes.io/exclude-from-external-load-balancers=true を追加します。

例:

annotations:
  openyurt.io/topologyKeys: openyurt.io/nodepool
  service.openyurt.io/nodepool-labelselector: key1=val1
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-label: key2=val2

バックエンドサーバーの重み設定

リスナーが重み付きラウンドロビン(WRR)アルゴリズムを使用する場合、リクエストはバックエンドサーバーの重みに基づいて分散されます。

アノテーションサフィックス 説明 デフォルト
alibaba-cloud-loadbalancer-backend-weight base=<weight>,<nodeName>=<weight> 形式での重み割り当て。base はすべてのバックエンドサーバーのデフォルト重みを設定します。個別のノードオーバーライドはカンマで区切ります。 base=100

例 — デフォルト重みを 50 に設定し、node1 を 80、node2 を 90 にオーバーライドします。

annotations:
  openyurt.io/topologyKeys: openyurt.io/nodepool
  service.openyurt.io/nodepool-labelselector: key1=val1,key2=val2
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-backend-weight: base=50,node1=80,node2=90

リスナー

EdgeControllerManager (ECM) は、spec.ports に基づいて自動的にリスナーを作成します。バックエンドポートはクラスターによって割り当てられます。特定のバックエンドポートを固定するには、nodePort を明示的に設定します。

spec:
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    nodePort: 30080
    targetPort: 80

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

アノテーションサフィックス 説明 デフォルト
alibaba-cloud-loadbalancer-scheduler ロードバランシングアルゴリズム。 rr

サポートされているアルゴリズム:

アルゴリズム 動作
rr ラウンドロビン リクエストをすべてのバックエンドサーバーに均等に分散します。
wrr 重み付きラウンドロビン 重みの高いバックエンドサーバーほど多くのリクエストを受信します。
wlc 重み付き最小接続 重みと現在の接続数に基づいてリクエストを分散します。
sch ソース IP 一貫ハッシュ 同じソース IP からのリクエストを同じバックエンドサーバーにルーティングします。
qch QUIC ID 一貫ハッシュ 同じ QUIC ID を持つリクエストを同じバックエンドサーバーにルーティングします。
iqch iQUIC CID 一貫ハッシュ iQUIC CID の 2、3、4 バイト目が同じリクエストを同じバックエンドサーバーにルーティングします。

例:

annotations:
  openyurt.io/topologyKeys: openyurt.io/nodepool
  service.openyurt.io/nodepool-labelselector: key1=val1
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-scheduler: wrr

セッション維持の構成(TCP リスナー)

アノテーションサフィックス 説明 デフォルト
alibaba-cloud-loadbalancer-persistence-timeout セッション維持の持続時間(秒)。有効範囲:0~3600。0 を設定すると無効になります。ELB インスタンスに複数の TCP リスナーがある場合、この設定はすべてのリスナーに適用されます。 0

接続タイムアウトの構成(TCP リスナー)

アノテーションサフィックス 説明 デフォルト
alibaba-cloud-loadbalancer-established-timeout TCP 接続タイムアウト(秒)。有効範囲:10~900。 500

例:

annotations:
  openyurt.io/topologyKeys: openyurt.io/nodepool
  service.openyurt.io/nodepool-labelselector: key1=val1,key2=val2
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-established-timeout: "900"

ヘルスチェックの構成

アノテーションサフィックス 説明 デフォルト
alibaba-cloud-loadbalancer-healthy-threshold バックエンドサーバーを正常とマークするために必要な連続したヘルスチェック成功回数。有効範囲:2~10。 3
alibaba-cloud-loadbalancer-unhealthy-threshold バックエンドサーバーを異常とマークするために必要な連続したヘルスチェック失敗回数。有効範囲:2~10。 3
alibaba-cloud-loadbalancer-check-interval ヘルスチェック間隔(秒)。有効範囲:2~10。 2
alibaba-cloud-loadbalancer-health-check-connect-timeout ヘルスチェック応答タイムアウト(秒)。バックエンドサーバーがこの期間内に応答しない場合、チェックは失敗とマークされます。有効範囲:1~300。 5

例:

annotations:
  openyurt.io/topologyKeys: openyurt.io/nodepool
  service.openyurt.io/nodepool-labelselector: key1=val1,key2=val2
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-healthy-threshold: "5"
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-unhealthy-threshold: "5"
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-check-interval: "2"
  service.beta.kubernetes.io/alibaba-cloud-loadbalancer-health-check-connect-timeout: "5"

高度な構成

既存の ELB インスタンスの使用

既存の ELB インスタンスを Service にアタッチするには、ネットワーク ID と ELB インスタンス ID を指定します。

  1. managed-by-user アノテーションを付けて Service を適用します。

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      namespace: default
      annotations:
        openyurt.io/topologyKeys: openyurt.io/nodepool        # サービスのトポロジーを有効化します。
        service.openyurt.io/nodepool-labelselector: key1=val1
        service.openyurt.io/elb-force-override-listeners: "true"
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-managed-by-user: "true"
    spec:
      ports:
      - name: nginx-80
        port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: LoadBalancer
      loadBalancerClass: alibabacloud.com/elb
  2. 対象ノードプール(ENS VPC)に対応する PoolService を見つけ、ELB インスタンス ID をアノテーションとして追加します。

    kubectl annotate ps {<SERVICENAME>-NodePoolID} service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id=<lb_ID>

    <SERVICENAME> はノードプール(ENS VPC)の PoolService 名に、<lb_ID> は ELB インスタンス ID に置き換えてください。

複数の Service 間で 1 つの ELB インスタンスを共有

複数の Service で 1 つの ELB インスタンスを共有する場合、以下のすべての条件を満たす必要があります。

  • externalTrafficPolicy をクラスターモード(デフォルト)に設定します。

  • ユーザー管理の ELB インスタンスを使用し、managed-by-user アノテーションで指定します。

  • EIP 経由でインターネットアクセスが必要な場合は、EIP を手動で作成および管理します。

  • service.openyurt.io/elb-force-override-listeners: "true" を設定して、リスナーを強制的に上書きします。

例:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool        # Service トポロジーを有効化。
    service.openyurt.io/nodepool-labelselector: key1=val1
    service.openyurt.io/elb-force-override-listeners: "true"
    service.beta.kubernetes.io/alibaba-cloud-loadbalancer-managed-by-user: "true"
spec:
  ports:
  - name: nginx-80
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerClass: alibabacloud.com/elb