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

Container Compute Service:アノテーションによる Pod への EIP のアタッチ

最終更新日:Jun 03, 2026

ACK クラスター内の Pod は、デフォルトでプライベート IP アドレスを使用します。マルチテナントデータ分離やセキュリティ分離などのシナリオでは、Pod に独立したパブリック IP アドレスが必要になる場合があります。アノテーションを使用して、Pod に Elastic IP Address (EIP) をアタッチできます。

背景情報

デフォルトでは、Pod はインターネット NAT ゲートウェイを介してインターネットにアクセスします (クラスターのインターネットアクセスを有効にするをご参照ください) 。インバウンドトラフィックは通常、LoadBalancer Service を介して流入します。ただし、一部のシナリオでは、Pod に独自のパブリック IP アドレスが必要になります。

  • 動的ポート割り当て:UDP ゲームサーバーや RTSP プロトコルは、クライアントごとにランダムなポートを割り当てます。独立した IP アドレスにより、ポートの競合を防ぐことができます。

  • SNAT のバイパス:外部サービスが許可リストに固定 IP を要求する場合、共有 SNAT 送信元 IP がブロックされる可能性があります。

  • 直接 IP 識別:リアルタイム通信プロトコルなど、外部システムとのエンドツーエンド接続には、独立した IP アドレスが必要です。

制限事項

  • 事前に、EIP の制限事項をご確認ください。

  • EIP の自動割り当てを使用する場合、Pod が再作成されたり、Container Network Interface (CNI) の実行が失敗したりすると、EIP の要求と解放が繰り返され、EIP の制限に抵触する場合があります。これを回避するには、Pod アノテーション network.alibabacloud.com/allocated-eip-id を設定して EIP を指定してください。

操作手順

ポッドに EIP を割り当てるには、[コンポーネント管理] ページから ack-extend-network-controller コンポーネントをインストールします。

image

ステップ 1:コンポーネントのインストールまたはアップグレード

説明

コンポーネントが Helm または ACK Marketplace を介してすでにインストールされている場合は、続行する前にアンインストールしてください。

  1. ACS コンソール にログインします。左側のナビゲーションペインで、クラスター をクリックします。

  2. クラスター ページで、管理するクラスターを見つけ、その ID をクリックします。クラスター詳細ページの左側のナビゲーションペインで、操作 > アドオン を選択します。

  3. 検索ボックスで [ACK Extend Network Controller] を検索し、コンポーネントカードの右下隅にあるInstallをクリックします。

    image

  4. 表示されるダイアログボックスで、次の表に基づいてパラメーターを設定します。その後、[OK] をクリックします。

    パラメータ

    説明

    enableControllers

    有効にする機能:

    • [eip]:EIP 機能を有効にします。

    • [ipv6gw]:IPv6 機能を有効にします。

    • [natgw]:DNAT ゲートウェイ機能を有効にします。

    [eip] と [ipv6gw] はデフォルトで選択されており、追加の RAM 権限は必要ありません。

    [natgw] には RAM 権限が必要です。詳細については、「DNAT に必要な RAM 権限を設定する」をご参照ください。

    natGwPool

    DNAT 設定。

    customStatefulWorkloadKinds

    カスタムのステートフルコンテナタイプ。デフォルトで、Kubernetes StatefulSet と直接作成された Pod がサポートされています。他のコンテナタイプを追加するには、[+ 追加] をクリックします。

ステップ 2:EIP 機能を有効にする

Pod の設定に annotations を追加することで、Pod に EIP をアタッチできます。サポートされているアノテーションの完全なリストについては、「Pod に EIP をアタッチするためのアノテーション」をご参照ください。

説明

新しい EIP を自動的に割り当てることも、既存の EIP インスタンスを指定することもできます。2 つの方法はアノテーションと解放動作が異なります。自動割り当てされた EIP は、Pod が削除されるとデフォルトで解放されます。指定された EIP は保持されます。EIP 解放ポリシーの詳細については、「EIP 解放ポリシーを設定する」をご参照ください。

EIP の自動割り当て

  1. [クラスター] ページで、対象クラスターの名前をクリックし、左側のナビゲーションペインで [ワークロード] > [デプロイメント] を選択します。

  2. ページの右上隅で、[YAML から作成] をクリックします。

  3. 次のサンプル YAML を使用して、example という名前の Deployment を作成します。

    クリックして Deployment YAML を表示

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: example
      labels:
        app: example
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            network.alibabacloud.com/pod-with-eip: "true"
            network.alibabacloud.com/eip-bandwidth: "5"
        spec:
          containers:
          - name: example
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80

    この設定により、各 Pod に 5 Mbit/s の帯域幅を持つ EIP が自動的に割り当てられます。

  4. デプロイが作成されたら、デプロイ詳細ページを開きます。 example-78d17b7xxx-adxxx などの Pod 名をクリックして、Pod の[詳細] ページを表示します。 [アノテーション] セクションで EIP 情報を確認できます。 [編集] をクリックすると、Pod YAML で EIP の詳細を表示できます。

    クリックして Pod YAML を表示

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        ...
        network.alibabacloud.com/allocated-eip-id: eip-xxxxx0y884ucrevoxxxxx
        network.alibabacloud.com/allocated-eipAddress: xxx.xxx.xxx.xxx
        network.alibabacloud.com/allocated-eni-id: eni-xxxxx563trofuhaxxxxx
        network.alibabacloud.com/eip-bandwidth: '5'
        network.alibabacloud.com/pod-with-eip: 'true'
        ...
      labels:
        alibabacloud.com/compute-class: general-purpose
        app: example
      name: example-78d17b7xxx-adxxx
      namespace: default
    spec:
      ...
  5. この例の作業が完了したら、Deployment を削除します。EIP インスタンス ID が指定されていないため、自動割り当てされた EIP は、Pod が削除されるとデフォルトで解放されます。

EIP インスタンスの指定

  1. EIP インスタンスを準備します。詳細については、「EIP を申請する」をご参照ください。

  2. [クラスター] ページで、目的のクラスターの名前をクリックし、左側のナビゲーションペインで [ワークロード] > [StatefulSet] を選択します。

  3. ページの右上隅で、[YAML から作成] をクリックします。

  4. 次のサンプル YAML を使用して、example という名前の StatefulSet を作成します。

    クリックして StatefulSet YAML を表示

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      labels:
        app: example
      name: example
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            network.alibabacloud.com/pod-eip-instanceid: eip-xxxxx66wjkj16lf9xxxxx
        spec:
          containers:
          - name: example
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80

    この設定により、EIP eip-xxxxx66wjkj16lf9xxxxx が Pod にバインドされます。インスタンス ID を実際の EIP ID に置き換えてください。

  5. StatefulSet が作成されたら、StatefulSet の詳細ページを開きます。example-0 などのポッド名をクリックして、ポッドの [詳細] ページを表示します。[アノテーション] セクションには、アタッチされた EIP 情報が表示されます。[編集] をクリックして、ポッドの YAML で EIP の詳細を表示します。

    クリックして Pod YAML を表示

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        ...
        network.alibabacloud.com/allocated-eip-id: eip-xxxxx66wjkj16lf9xxxxx
        network.alibabacloud.com/allocated-eipAddress: xxx.xxx.xxx.xxx
        network.alibabacloud.com/allocated-eni-id: eni-xxxxx612ub33hunxxxxx
        network.alibabacloud.com/pod-eip-instanceid: eip-xxxxx66wjkj16lf9xxxxx
        ...
      labels:
        alibabacloud.com/compute-class: general-purpose
        app: example
      name: example-0
      namespace: default
    spec:
      ...
  6. この例の作業が完了したら、StatefulSet を削除します。EIP インスタンス ID が指定されているため、Pod が削除されても EIP は保持されます。

関連操作

VPC コントローラーは、Pod IP アドレスが割り当てられた後に EIP をアタッチします。Pod は EIP がアタッチされる前に Ready 状態になる可能性があり、サービスの中断や接続タイムアウトが発生する可能性があります。次の方法を使用して、Pod がトラフィックを受け入れる前に EIP がアタッチされていることを確認してください。

readinessGates を使用した EIP アタッチステータスの確認

readinessGates を設定すると、VPC コントローラーは EIP がアタッチされた後に Pod conditions を設定します。EIP のアタッチが完了するまで、Pod は Ready 状態になりません。

kind: Pod
...
spec:
  readinessGates:
  - conditionType: "k8s.aliyun.com/eip"
status:
  conditions:
  - lastProbeTime: "2022-12-12T03:45:48Z"
    lastTransitionTime: "2022-12-12T03:45:48Z"
    reason: Associate eip succeed
    status: "True"
    type: k8s.aliyun.com/eip
...

initContainers を使用した EIP アタッチステータスの確認

Pod に initContainers を設定して、initContainers で EIP が割り当てられているかどうかを確認します。initContainers を設定するためのサンプルコード:

apiVersion: v1
kind: Pod
metadata:
  name: example
  annotations:
    network.alibabacloud.com/pod-with-eip: "true"
spec:
  containers:
  - name: example
    image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
    command: ['sh', '-c', 'echo "アプリケーションは実行中です!" && sleep 3600']
  initContainers:
  - name: init
    image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
    command: ['timeout', '-t' ,'60', 'sh','-c', "until grep 'network.alibabacloud.com/allocated-eip-id' /etc/podinfo/annotations; do echo 'アノテーションを待機しています'; sleep 2; done"]
    volumeMounts:
    - name: podinfo
      mountPath: /etc/podinfo
  volumes:
  - name: podinfo
    downwardAPI:
      items:
      - path: "labels"
        fieldRef:
          fieldPath: metadata.labels
      - path: "annotations"
        fieldRef:
          fieldPath: metadata.annotations

DNAT に必要な RAM 権限の設定

DNAT 機能を使用するには、ack-extend-network-controller が Alibaba Cloud OpenAPI にアクセスする必要があります。次の RAM 権限を設定してください。

  1. Resource Access Management (RAM) コンソールにログオンします。 左側のナビゲーションペインで、[アクセスポリシー] をクリックし、次に [ポリシーの作成] をクリックします。

  2. [ポリシーの作成] ページで [スクリプトエディター] をクリックし、コードエディターの Statement セクションに次の内容を貼り付け、次に [OK] をクリックします。[ポリシー名] を DNAT-Policy に設定し、再度 [OK] をクリックします。

    {
          "Effect": "Allow",
          "Action": [
            "ecs:DescribeNetworkInterfaces",
            "vpc:DescribeNatGateways",
            "vpc:DescribeForwardTableEntries",
            "vpc:CreateForwardEntry",
            "vpc:DescribeEipAddresses",
            "vpc:DeleteForwardEntry",
            "vpc:DescribeRouteTableList",
            "vpc:DescribeRouteEntryList"
          ],
          "Resource": [
            "*"
          ],
          "Condition": {}
        }
  3. 左側のナビゲーションペインで[ロール]をクリックし、検索ボックスで [AliyunCCNECRole] を検索し、[操作]列の[権限付与]をクリックします。

  4. [アクセスポリシー] セクションの検索ボックスで DNAT-Policy を検索して選択し、[確認] をクリックします。