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

Container Service for Kubernetes:Pod への独立した EIP のアタッチ

最終更新日:Jun 22, 2026

デフォルトでは、Kubernetes クラスター内の Pod はプライベート IP アドレスを使用します。しかし、一部のシナリオでは、他の Pod からのトラフィックの影響を受けずに外部ネットワークと通信するために、Pod には独立したパブリック IP アドレスが必要です。Alibaba Cloud の Terway および ack-extend-network-controller コンポーネントを使用することで、Elastic IP アドレス (EIP) を Pod に直接関連付け、独立したパブリックエグレスを付与できます。

前提条件

Terway ネットワークプラグインを使用する ACK マネージドクラスター または ACK 専用クラスター が必要です。手順については、ACK マネージドクラスターの作成 および ACK 専用クラスターの作成 (新規クラスターの作成はサポートされなくなりました) をご参照ください。Terway ネットワークモードの詳細については、「Terway ネットワークプラグインの使用」をご参照ください。

重要

2023年11月時点で、Terway の EIP 機能はメンテナンスが終了し、 v1.7.0 で削除されました。ack-extend-network-controller コンポーネントを使用して、独立した EIP を Pod にアタッチしてください。詳細については、「Terway から ack-extend-network-controller への EIP 機能の移行」をご参照ください。

使用制限

  • EIP を使用する前に、その使用制限を確認してください。詳細については、「使用制限」をご参照ください。

  • この機能は ECS ノードでのみサポートされています。

  • コンポーネントは、コントローラーが作成した EIP のライフサイクルを管理します。Pod に EIP が割り当てられた後にコンポーネントをアンインストールした場合、EIP は割り当て済みのままであり、自動的には解放されません。

    EIP 機能の使用を停止するには、コンポーネントを停止する前に、まず EIP を使用している Pod を削除する必要があります。Pod と同じ名前の podeips.alibabacloud.com リソースで、EIP の割り当てと解放のステータスを確認できます。コンポーネントを停止する前に、EIP が使用されていないことを確認してください。そうしないと、EIP の課金が継続されます。

課金

Terway および ack-extend-network-controller プラグインは無料で有効化できますが、これらが消費するクラウドリソースには料金が発生します。ACK の課金の詳細については、「クラウドリソースの課金」をご参照ください。

背景情報

ほとんどの場合、Terway ネットワークモードの Pod は、ホスト SNAT (Source Network Address Translation) または EIP による外部 SNAT を使用してパブリックネットワークにアクセスします。通常、LoadBalancer タイプの Service は、パブリックイングレストラフィックを Pod にルーティングします。ただし、一部のシナリオでは、Pod が独立したパブリック IP アドレスを持つ必要があります。次に例を示します。

  • Pod がランダムポートでサービスを公開する場合。これは、ゲームサーバーやテレカンファレンスなどの UDP (ユーザーデータグラムプロトコル) ベースのアプリケーションで一般的です。たとえば、RTSP プロトコルは、クライアントごとに異なるポートを使用します。

  • Pod が他の Pod との競合を回避するために、専用のパブリックエグレスが必要な場合。

手順 1: EIP の RAM 権限の設定

ack-extend-network-controller (推奨)

  • RAM 権限を付与する対象クラスター: ACK マネージドクラスター 、または ACK 専用クラスター

    1. 次の内容でカスタム権限ポリシーを作成します。手順については、「手順 1:カスタム権限ポリシーの作成」をご参照ください。

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:AllocateEipAddressPro",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp",
              "vpc:TagResources",
              "ecs:DescribeNetworkInterfaces"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. クラスターのワーカー RAM ロールに権限を付与します。手順については、「手順 2:クラスターのワーカー RAM ロールへの権限付与」をご参照ください。

Terway

Terway が Pod に EIP を設定するには、EIP 関連の権限が必要です。そのためには、追加の設定をデプロイし、権限を付与する必要があります。

  • RAM 権限を付与する対象クラスター: ACK マネージドクラスター 、または ACK ベーシックマネージドクラスター (2020 年 6 月以降に作成されたもののみ)

    1. 次の内容でカスタム権限ポリシーを作成します。手順については、「手順 1:カスタム権限ポリシーの作成」をご参照ください。

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. クラスターのワーカー RAM ロールに権限を付与します。手順については、「手順 2:クラスターのワーカー RAM ロールへの権限付与」をご参照ください。

  • RAM 権限を付与する対象クラスター: ACK 専用クラスター 、または ACK マネージドクラスター (2020 年 6 月より前に作成されたもののみ)

    1. 次の内容でカスタム権限ポリシーを作成します。手順については、「手順 1:カスタム権限ポリシーの作成」をご参照ください。

          {
            "Effect": "Allow",
            "Action": [
              "vpc:DescribeVSwitches",
              "vpc:AllocateEipAddress",
              "vpc:DescribeEipAddresses",
              "vpc:AssociateEipAddress",
              "vpc:UnassociateEipAddress",
              "vpc:ReleaseEipAddress",
              "vpc:AddCommonBandwidthPackageIp",
              "vpc:RemoveCommonBandwidthPackageIp"
            ],
            "Resource": [
              "*"
            ],
            "Condition": {}
          }
    2. AliyunCSManagedNetworkRole RAM ロール ページの Policies タブで、Grant Permission をクリックします。次に、カスタムポリシー をクリックし、作成したカスタム権限ポリシーを選択して Grant permissions をクリックします。

ステップ 2:クラスタープラグインのインストールまたはアップグレード

警告

ack-extend-network-controller と Terway の両方で EIP 機能を同時に有効にしないでください。Elastic IP アドレス (EIP) の重複割り当てが発生し、バインド失敗につながる可能性があります。ack-extend-network-controller プラグインを使用してください。

プラグインの比較

項目

ack-extend-network-controller

Terway

サポートされるクラスタータイプ

  • ACK マネージドクラスター

  • ACK 専用クラスター

  • ACK サーバーレスクラスター

  • ACK マネージドクラスター

  • ACK 専用クラスター

静的 EIP

サポート

非サポート

設定フェーズ

Pod IP が割り当てられた後、コントローラーが EIP を割り当てて Pod にバインドします。

CNI 実行プロセス中に EIP を割り当ててバインドします。

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

プラグインバージョン v0.2.0 以降。

Terway プラグインバージョン v1.0.10.280-gdc2cb6c-aliyun 以降、v1.7.0 より前。

プラグインのインストールまたはアップグレード

ack-extend-network-controller プラグインを使用する場合は、マーケットプレイスからインストールし、EIP コントローラーを有効にしてください。Terway ネットワークプラグインを使用する場合は、バージョン v1.0.10.280-gdc2cb6c-aliyun 以降にアップグレードしてください。

ack-extend-network-controller (推奨)

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[Marketplace] > [Marketplace] を選択します。

  2. [Marketplace] ページで、検索バーに ack-extend-network-controller と入力し、対象のアプリケーションをクリックします。

  3. アプリケーション詳細ページで、右上隅にある デプロイ をクリックします。

  4. 作成する パネルでクラスターと名前空間を選択し、次へ をクリックします。

    1. OK ページで、バージョンを選択し、パラメーターを設定してから、[OK] をクリックします。

      次の表でパラメーターについて説明します:

      パラメーター

      タイプ

      必須

      説明

      clusterID

      string

      はい

      クラスターの ID。

      regionID

      string

      はい

      クラスターが配置されているリージョン。

      enableControllers

      []string

      はい

      EIP 機能を有効にするには、eip を設定してください。

      networkController.vpcID

      string

      はい

      クラスターの Virtual Private Cloud (VPC) の ID。

      networkController.eipController.maxConcurrentReconciles

      int

      いいえ

      EIP コントローラーの同時リコンサイルの最大数。

      networkController.eipController.garbageCollectionPeriodInMinutes

      int

      いいえ

      静的 EIP のガベージコレクションの間隔 (分単位)。

      networkController.customStatefulWorkloadKinds

      []string

      いいえ

      カスタムのステートフルワークロードの種類。

      enableVirtualNode

      bool

      いいえ

      Elastic Container Instance (ECI) 仮想ノードのサポートを有効にします。

      重要

      この機能を有効にすると、コントローラーは ECI インスタンス上の Pod に EIP を割り当てます。設定した Pod アノテーションは、ECI でサポートされている EIP 機能で使用されているものと同じにすることはできません。この機能は慎重に使用してください。

      enableRRSA

      bool

      いいえ

      RRSA による認証を有効にします。

      説明

      ack-extend-network-controller プラグイン v0.10.0 以降でサポートされます。

      RRSA 設定は、ack-pod-identity-webhook インジェクション方式のみをサポートします。設定の詳細については、「RRSA を使用して ServiceAccount の RAM 権限を設定し、Pod 権限を分離する」をご参照ください。

      rrsaRoleName

      string

      いいえ

      ロールの名前。

      説明

      ack-extend-network-controller プラグイン v0.10.0 以降でサポートされます。

      credential.accessKey

      string

      いいえ

      EIP をアタッチする権限を持つアカウントの AccessKey ID。

      ステップ 1: EIP をアタッチするために必要な RAM 権限を設定する」でセットアップを完了している場合、このパラメーターは不要です。

      重要

      この方法は Kubernetes Secret に機密情報を保存するため、推奨されません。

      credential.accessSecret

      string

      いいえ

      EIP をアタッチする権限を持つアカウントの AccessKey Secret。

      ステップ 1: EIP をアタッチするために必要な RAM 権限を設定する」でセットアップを完了している場合、このパラメーターは不要です。

      重要

      この方法は Kubernetes Secret に機密情報を保存するため、推奨されません。

      kubeClientQPS

      float32

      いいえ

      コンポーネントがクラスター API サーバーにアクセスする際の 1 秒あたりのクエリ数 (QPS) の制限。

      説明

      ack-extend-network-controller プラグイン v0.12.2 以降でサポートされます。

      kubeClientBurst

      int

      いいえ

      コンポーネントからクラスター API サーバーへのバースト要求の最大数。

      説明

      ack-extend-network-controller プラグイン v0.12.2 以降でサポートされます。

      次のコードは設定例を示しています:

      clusterID: "c11ba338192xxxxxxx"  
      regionID: "cn-hangzhou"      
      vpcID: "vpc-bp1rkq0zxxxxxx" 
      enableControllers:
        - eip              
      networkController:
        eipController:
          maxConcurrentReconciles: 1   
          garbageCollectionPeriodInMinutes: 1  
        customStatefulWorkloadKinds:           
        - foo
      credential:                             
        accessKey: ""
        accessSecret: ""

ack-extend-network-controller プラグインのバージョンとパラメーターを更新するには、「Helm チャートの変更」をご参照ください。

Terway

クラスターが Terway ネットワークプラグインを使用している場合は、EIP 機能をサポートするバージョン (terway-eni または terway-eniip) にアップグレードしてください。詳細な手順については、「コンポーネントの管理」をご参照ください。

説明

Terway プラグインのバージョンは v1.0.10.280-gdc2cb6c-aliyun 以降かつ v1.7.0 未満である必要があります。Terway のバージョンの詳細については、「Terway」をご参照ください。

手順 3:EIP 機能の有効化

EIP アノテーション

Container Service for Kubernetes (ACK) では、アノテーションを使用して Elastic IP アドレス (EIP) 機能を有効にすることができます。EIP を Pod に自動的に割り当てるか、既存の EIP を Pod に関連付けることができます。

EIP の自動割り当て

重要

EIP を自動的に割り当てる場合、Pod の再作成中や CNI の実行失敗後に、システムが EIP の作成と解放を繰り返す可能性があります。これを避けるには、代わりに既存の EIP インスタンスを指定してください。

Pod アノテーション

network.alibabacloud.com/pod-with-eip

k8s.aliyun.com/pod-with-eip

EIP を自動的に作成して関連付けるかどうかを指定します。有効な値:

  • true:EIP を自動的に作成して関連付けます。

  • false:EIP を自動的に作成して関連付けません。

k8s.aliyun.com/eci-with-eip (互換)

network.alibabacloud.com/eip-bandwidth

k8s.aliyun.com/eip-bandwidth

このアノテーションは EIP の作成時にのみ適用されます。

EIP のピーク帯域幅を Mbps 単位で指定します。詳細については、「EIP のリクエスト」をご参照ください。

network.alibabacloud.com/eip-internet-charge-type

k8s.aliyun.com/eip-internet-charge-type

このアノテーションは EIP の作成時にのみ適用されます。

EIP の課金方法を指定します。有効な値:

  • PayByTraffic (デフォルト):トラフィック課金。

  • PayByBandwidth:帯域幅課金。

詳細については、「EIP のリクエスト」をご参照ください。

k8s.aliyun.com/eip-charge-type (互換)

network.alibabacloud.com/eip-instance-charge-type

k8s.aliyun.com/eip-instance-charge-type

このアノテーションは EIP の作成時にのみ適用されます。

EIP の課金方法を指定します。有効な値:

  • PostPaid:従量課金。

詳細については、「EIP のリクエスト」をご参照ください。

説明

このアノテーションは ack-extend-network-controller でのみサポートされています。

PrePaid (サブスクリプション) オプションはサポートされていません。

network.alibabacloud.com/eip-common-bandwidth-package-id

k8s.aliyun.com/eip-common-bandwidth-package-id

EIP に関連付ける EIP 帯域幅プランの ID を指定します。

説明

この機能には Terway v1.2.3 以降が必要です。ack-extend-network-controller コンポーネントにはバージョン制限はありません。

network.alibabacloud.com/eip-isp

k8s.aliyun.com/eip-isp

このアノテーションは EIP の作成時にのみ適用されます。

EIP の回線タイプを指定します。有効な値:

  • BGP:BGP (マルチ ISP) 回線。

  • BGP_PRO:BGP (マルチ ISP) Pro 回線。

  • シングル ISP 帯域幅の許可リストに登録されている場合は、次のいずれかのタイプも選択できます:

    • ChinaTelecom:China Telecom

    • ChinaUnicom:China Unicom

    • ChinaMobile:China Mobile

    • ChinaTelecom_L2:China Telecom L2

    • ChinaUnicom_L2:China Unicom L2

    • ChinaMobile_L2:China Mobile L2

  • 中国 (杭州金融) リージョンを使用する場合は、値を BGP_FinanceCloud に設定します。

詳細については、「EIP のリクエスト」をご参照ください。

説明

この機能には Terway v1.2.3 以降が必要です。ack-extend-network-controller コンポーネントにはバージョン制限はありません。

network.alibabacloud.com/eip-public-ip-address-pool-id

k8s.aliyun.com/eip-public-ip-address-pool-id

このアノテーションは EIP の作成時にのみ適用されます。

IP アドレスプールの ID を指定します。IP アドレスプールの使用に関する制限と手順については、「IP アドレスプール」をご参照ください。

説明

これは ack-extend-network-controller でのみサポートされています。

network.alibabacloud.com/eip-resource-group-id

k8s.aliyun.com/eip-resource-group-id

このアノテーションは EIP の作成時にのみ適用されます。

EIP のリソースグループの ID を指定します。詳細については、「EIP のリクエスト」をご参照ください。

説明

これは ack-extend-network-controller v0.4.0 以降でサポートされています。

network.alibabacloud.com/eip-name

k8s.aliyun.com/eip-name

このアノテーションは EIP の作成時にのみ適用されます。

EIP の名前を指定します。詳細については、「EIP のリクエスト」をご参照ください。

説明

これは ack-extend-network-controller v0.6.0 以降でサポートされています。

network.alibabacloud.com/eip-description

k8s.aliyun.com/eip-description

このアノテーションは EIP の作成時にのみ適用されます。

EIP の説明を指定します。詳細については、「EIP のリクエスト」をご参照ください。

説明

これは ack-extend-network-controller v0.6.0 以降でサポートされています。

network.alibabacloud.com/eip-security-protection-types

k8s.aliyun.com/eip-security-protection-types

このアノテーションは EIP の作成時にのみ適用されます。

EIP のセキュリティ保護レベルを指定します。Anti-DDoS が有効な EIP がサポートされています。

  • 未指定の場合、このパラメーターはデフォルトで Anti-DDoS Origin Basic になります。

  • Anti-DDoS Origin Pro を使用するには、値を AntiDDoS_Enhanced に設定します。

複数の保護レベルを指定するには、カンマ (,) で区切ります。詳細については、「EIP のリクエスト」をご参照ください。

説明

これは ack-extend-network-controller v0.9.0 以降でサポートされています。

network.alibabacloud.com/eip-tags

k8s.aliyun.com/eip-tags

このアノテーションは EIP の作成時にのみ適用されます。

EIP に追加するタグを指定します。値は有効な JSON 文字列である必要があります。詳細については、「タグの管理」をご参照ください。

例:k8s.aliyun.com/eip-tags: "{\"foo\":\"bar\"}"

説明

これは ack-extend-network-controller v0.11.0 以降でサポートされています。

EIP インスタンスの指定

EIP インスタンス ID を指定することで、既存の EIP を Pod に関連付けることができます。Pod アノテーションは EIP インスタンスの設定を変更しません。EIP を指定された Pod に関連付けるだけです。

重要

この機能は、Deployment のように複数のレプリカを持つコントローラーには適していません。1 つの Pod のみが EIP インスタンスを参照するようにしてください。StatefulSet のようなステートフルなアプリケーションでのみこの機能を使用することを推奨します。

Pod アノテーション

network.alibabacloud.com/pod-eip-instanceid

k8s.aliyun.com/pod-eip-instanceid

関連付ける EIP インスタンスの ID。例:eip-bp14qxxxxxxx

重要

同じ EIP インスタンスを異なる名前の Pod に割り当てないでください。Pod が削除されると、EIP コントローラーは EIP の関連付けを解除します。この期間中、新しい Pod に同じ EIP インスタンスを使用することはできません。関連付けの解除が完了したかどうかを確認するには、Pod と同じ名前の PodEIP リソースが存在しなくなったことを確認してください。

k8s.aliyun.com/eci-eip-instanceid (互換)

EIP 解放ストラテジー アノテーション

この解放ストラテジーにより、Pod は再作成された後でも EIP アドレスを保持できます。このストラテジーを自動割り当て機能と併用して、ステートフルなアプリケーションに永続的な EIP を提供できます。

重要
  • この機能は ack-extend-network-controller でのみサポートされており、ステートフルなレプリカコントローラーにのみ適用されます。ステートレスなコントローラーには使用できません。

  • EIP インスタンス ID を指定した場合、Pod が削除されても EIP インスタンスは解放されません。

Pod アノテーション

network.alibabacloud.com/pod-eip-release-strategy

k8s.aliyun.com/pod-eip-release-strategy

Pod の EIP の解放ストラテジー。有効な値:

  • Follow (デフォルト):Pod が削除されると EIP は解放されます。

  • Never:Pod が削除されても EIP は削除されません。不要になったら、PodEIP リソースを手動で削除する必要があります。

保持期間を指定することもできます。Go スタイルの期間表現がサポートされています。たとえば、5m30s は、Pod が削除されてから 5.5 分後に EIP が解放されることを指定します。期間を指定すると、解放ストラテジー (releaseStrategy) は TTL (Time-To-Live) に設定されます。

ack-extend-network-controller または Terway での EIP の有効化

ack-extend-network-controller での有効化

説明

ack-extend-network-controller コンポーネントは Alibaba Cloud API を呼び出してリソースを作成します。Resource Access Management (RAM) で必要な権限を設定し、マーケットプレイスから ack-extend-network-controller をインストールしてから、アノテーションを使用して EIP を作成し、特定の Pod に関連付ける必要があります。

アノテーションによる EIP の作成と関連付け

Pod のマニフェストでアノテーションを使用して、EIP を作成し、その Pod に関連付けることができます。アノテーションの詳細については、「FAQ」をご参照ください。

  1. アプリケーションを作成し、アノテーションを使用して EIP を作成し、特定の Pod に関連付けます。

    Deployment

    このマニフェストは、ACK が各 Pod にピーク帯域幅 5 Mbps の EIP インスタンスを自動的に割り当てるように設定された Deployment を作成します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: example
      labels:
        app: example
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            k8s.aliyun.com/pod-with-eip: "true"
            k8s.aliyun.com/eip-bandwidth: "5"
        spec:
          readinessGates:
          - conditionType: "k8s.aliyun.com/eip"
          containers:
          - name: example
            image: nginx

    Pod が作成された後、Pod と同じ名前の podeips.alibabacloud.com リソースをクエリして、割り当てられた EIP の詳細を表示できます。

    kubectl get podeip -n <namespace> <podname>  -o yaml

    出力例:

    apiVersion: alibabacloud.com/v1beta1
    kind: PodEIP
    metadata:
      creationTimestamp: "2023-12-15T04:25:37Z"
      finalizers:
      - podeip-controller.alibabacloud.com/finalizer
      generation: 1
      name: example-xxx
      namespace: default
      resourceVersion: "222800"
      uid: 43xxx-f1xx-4xxx-b3xx-969faxxx
    spec:
      allocationID: eip-2ze2qe8zsxxx
      allocationType:
        releaseStrategy: Follow
        type: Auto
    status:
      eipAddress: 39.102.XX.XX
      internetChargeType: PayByTraffic
      isp: BGP
      networkInterfaceID: eni-2zeagv8f3xxxx
      podLastSeen: "2023-12-15T05:18:47Z"
      privateIPAddress: 192.168.XX.XX
      resourceGroupID: rg-acfmwxxxxxsq
      status: InUse

    StatefulSet

    次のマニフェストを使用して、2 つの Pod を持つ StatefulSet を作成します。各 Pod には EIP が自動的に割り当てられ、対応する Pod が削除されてから 10 分後に PodEIP リソースを削除するように解放ストラテジーが設定されます。

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: example
      labels:
        app: example
    spec:
      serviceName: "example"
      replicas: 2
      selector:
        matchLabels:
          app: example
      template:
        metadata:
          labels:
            app: example
          annotations:
            k8s.aliyun.com/pod-with-eip: "true"
            k8s.aliyun.com/pod-eip-release-strategy: "10m"
        spec:
          containers:
          - name: example
            image: nginx

    Pod が作成された後、podeips.alibabacloud.com リソースをクエリして、割り当てられた EIP に関する情報を追跡します。

    kubectl get podeip -n <namespace> -o yaml

    出力例:

    apiVersion: v1
    items:
    - apiVersion: alibabacloud.com/v1beta1
      kind: PodEIP
      metadata:
        creationTimestamp: "2023-12-15T03:28:01Z"
        finalizers:
        - podeip-controller.alibabacloud.com/finalizer
        generation: 1
        name: example-0
        namespace: default
        resourceVersion: "227221"
        uid: 79954xx-17xx-4dxx-b7xx-15b84xxx
      spec:
        allocationID: eip-2ze08metxxx
        allocationType:
          releaseAfter: 10m
          releaseStrategy: TTL
          type: Auto
      status:
        eipAddress: 39.105.XX.XX
        internetChargeType: PayByTraffic
        isp: BGP
        networkInterfaceID: eni-2ze4tkg4xxx
        podLastSeen: "2023-12-15T05:31:34Z"
        privateIPAddress: 192.168.XX.XX
        resourceGroupID: rg-acfmwxxx
        status: InUse
    - apiVersion: alibabacloud.com/v1beta1
      kind: PodEIP
      metadata:
        creationTimestamp: "2023-12-15T03:28:03Z"
        finalizers:
        - podeip-controller.alibabacloud.com/finalizer
        generation: 1
        name: example-1
        namespace: default
        resourceVersion: "227222"
        uid: 1339xxxe7-97xx-46xx-9bxx-537690xxx
      spec:
        allocationID: eip-2zetwhffqxxx
        allocationType:
          releaseAfter: 10m
          releaseStrategy: TTL
          type: Auto
      status:
        eipAddress: 39.106.YY.YY
        internetChargeType: PayByTraffic
        isp: BGP
        networkInterfaceID: eni-2zeagv8f3wxxx
        podLastSeen: "2023-12-15T05:31:34Z"
        privateIPAddress: 192.168.YY.YY
        resourceGroupID: rg-acfmwqnwxxx
        status: InUse
    kind: List
    metadata:
      resourceVersion: ""

    このステートフルなアプリケーションの Pod が削除された後、その PodEIP カスタムリソース (CR) は削除される前に 10 分間保持されます。この期間中に同じ名前の Pod が作成されると、対応する EIP が再利用されます。

  2. 設定を確認します。

    Pod が実行中状態になった後、Pod の k8s.aliyun.com/allocated-eipAddress アノテーションの値を確認して、割り当てられた EIP アドレスを表示できます。この EIP を使用して Pod にアクセスできます。

Terway での有効化

  1. EIP 機能をサポートするために Terway 設定をデプロイします。

    1. Terway ConfigMap を編集します。

      kubectl edit cm eni-config -n kube-system
    2. eni_conf に、次の行を追加します。

      "enable_eip_pool": "true"
      説明

      EIP を新しいインスタンスに関連付けるときに、現在のインスタンスから強制的に関連付けを解除するには、"allow_eip_rob": "true" パラメーターを eni_conf に追加してください。

    3. 編集が完了したら、[Esc] キーを押し、:wq! と入力して [Enter] キーを押し、変更を保存して編集モードを終了します。

    4. Terway Pod を再作成して変更を適用します。

      kubectl delete pod -n kube-system -l app=terway-eniip # terway-eni コンポーネントをインストールした場合は、terway-eniip を terway-eni に置き換えます。
  2. アノテーションを使用して EIP を作成し、Pod に関連付けます。

    Pod のマニフェストでアノテーションを使用して、EIP を作成し、その Pod に関連付けることができます。詳細については、「EIP 関連の制限」をご参照ください。

    EIP の自動割り当て

    次のアノテーションを追加して、EIP を Pod に自動的に割り当て、EIP の帯域幅を指定します。

    • k8s.aliyun.com/pod-with-eip: "true":ターゲット Pod に専用のパブリック EIP を割り当てます。

    • k8s.aliyun.com/eip-bandwidth: "5":EIP の帯域幅を指定します。デフォルトは 5 Mbps で、EIP のデフォルト値と一致します。

    以下にマニフェストの例を示します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-basic
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          annotations:
            network.alibabacloud.com/pod-with-eip: "true" # Nginx コンテナにパブリック EIP を自動的に割り当てます。
            network.alibabacloud.com/eip-bandwidth: "5"   # EIP の帯域幅を指定します。デフォルトは 5 Mbps で、EIP のデフォルト値と一致します。
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx

    EIP の指定

    重要
    • 1 つの EIP は複数の Pod に関連付けることができないため、この方法は Deployment や StatefulSet のように複数のレプリカを持つワークロードには適していません。

    • デフォルトでは、指定された EIP がすでにインスタンスに関連付けられている場合、関連付けは失敗します。以前のインスタンスから EIP の関連付けを強制的に解除し、新しいインスタンスに関連付けるには、前述のように ConfigMap"allow_eip_rob": "true" を設定する必要があります。

    • EIP インスタンス ID は、単一レプリカのワークロードに対してのみ指定できます。たとえば、Deployment は複数のレプリカを持つことはできません。

    次のアノテーションを追加して、Pod の EIP インスタンス ID を指定します:

    k8s.aliyun.com/pod-eip-instanceid: "<your-eip-instance-id>"
  3. 設定を確認します。

    Pod が実行中状態になった後、Pod の network.alibabacloud.com/allocated-eipAddress アノテーションの値を確認して、割り当てられた EIP アドレスを表示できます。この EIP を使用して Pod にアクセスできます。

よくある質問

EIP がバインドされる前に Pod が Ready になる問題

コントローラーは、Pod の IP アドレスが割り当てられた後にのみ EIP を割り当てるため、EIP がバインドされる前に Pod が Ready になる可能性があります。次の方法で、このタイミングを制御します。

readiness gates

説明

readiness gates の設定には、ack-extend-network-controller が必要です。

Pod に readinessGates を設定すると、コントローラーは EIP がバインドされた後にのみ Pod の condition を更新します。これにより、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
...

Init コンテナ

Init コンテナ を設定し、EIP が Pod に割り当てられているかどうかを確認できます。

apiVersion: v1
kind: Pod
metadata:
  name: example
  annotations:
    network.alibabacloud.com/pod-with-eip: "true"
spec:
  containers:
  - name: example
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init
    image: busybox:1.28
    command: ['timeout', '-t' ,'60', 'sh','-c', "until grep -E '^k8s.aliyun.com\\/allocated-eipAddress=\\S?[0-9]+\\S?' /etc/podinfo/annotations; do echo waiting for annotations; 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

EIP 経由で Pod にアクセスできない問題

制限の厳しい ACL ポリシーがこの問題の原因となることがよくあります。次のアクセス制御設定を確認してください。

  • Cloud Firewall:EIP へのトラフィックは、Cloud Firewall のアクセス制御ルールの対象となります。Pod の EIP とそのサービスポートに対するインバウンドおよびアウトバウンドトラフィックを許可するルールがあることを確認してください。詳細については、「インターネットファイアウォールのアクセス制御ポリシーの設定」をご参照ください。

  • ノードセキュリティグループ:EIP が Pod にバインドされた後も、Pod のノードのセキュリティグループがトラフィックを制御し続けます。ノードセキュリティグループ のルールで、クライアント IP アドレスから Pod のサービスポートへのインバウンドトラフィック、および必要なアウトバウンドトラフィックが許可されていることを確認してください。詳細については、「クラスターセキュリティグループの設定」をご参照ください。