Kubernetes クラスターでは、Pod には通常、プライベート IP アドレスが割り当てられます。ただし、一部のシナリオでは、Pod に独立したパブリック IP アドレスを持たせる必要があります。これにより、Pod は他の Pod のトラフィックの影響を受けることなく、外部ネットワークと通信できます。Alibaba Cloud の Terway および ack-extend-network-controller コンポーネントはどちらも、特定の Pod と Elastic IP Address (EIP) の関連付けをサポートしています。これにより、Pod に独立したパブリックアウトバウンドが提供されます。
前提条件
Terway ネットワークプラグインを使用する ACK マネージドクラスターまたは ACK 専用クラスターを作成する必要があります。詳細については、「ACK マネージドクラスターの作成」および「ACK 専用クラスターの作成 (作成不可)」をご参照ください。Terway ネットワークモードの詳細については、「Terway ネットワークプラグインの使用」をご参照ください。
2023 年 11 月以降、Terway は EIP 機能の更新を提供しなくなりました。この機能は v1.7.0 で正式に削除されます。ack-extend-network-controller コンポーネントを使用して、独立したパブリック EIP を Pod にアタッチすることを推奨します。詳細については、「EIP 機能を Terway から ack-extend-network-controller に移行する」をご参照ください。
制限事項
EIP を使用する前に、その制限事項を理解する必要があります。詳細については、「制限事項」をご参照ください。
この機能は ECS ノードでのみサポートされています。
課金
Terway および ack-extend-network-controller プラグインを有効にしても、追加料金は発生しません。ただし、使用するクラウドリソースに対して課金される場合があります。ACK クラウドリソースの課金の詳細については、「クラウドリソース料金」をご参照ください。
背景情報
Terway ネットワークでは、Pod からインターネットへのトラフィックは通常、ホストのソースネットワークアドレス変換 (SNAT) または EIP を介した外部 SNAT を使用してルーティングされます。Pod へのインバウンドインターネットトラフィックは、通常、LoadBalancer サービスを介して流れます。ただし、一部のシナリオでは、Pod に独立したパブリック IP アドレスを持たせる必要があります。例:
Pod にマッピングされるポートはランダムです。これは、ユーザーデータグラムプロトコル (UDP) ゲームサーバーや電話会議で一般的です。たとえば、リアルタイムストリーミングプロトコル (RTSP) は、クライアントごとに異なるポートを使用します。
Pod はインターネットトラフィックを競合し、特定の Pod には独立したパブリックアウトバウンドが必要です。
ステップ 1: EIP をアタッチするための RAM 権限の設定
ack-extend-network-controller (推奨)
ACK マネージドクラスターまたはACK 専用クラスターに RAM 権限を付与する
次の内容でカスタムポリシーを作成します。詳細については、「ステップ 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": {} }クラスターの Worker RAM ロールに権限を付与します。詳細については、「ステップ 2: クラスターの Worker RAM ロールに権限を付与する」をご参照ください。
Terway
Terway は、Pod の EIP をリクエストおよび設定するために EIP 関連の権限を必要とします。追加の権限を設定する必要があります。
2020 年 6 月以降に作成されたACK マネージドクラスターまたはBasic Edition の ACK マネージドクラスターに RAM 権限を付与する
次の内容でカスタムポリシーを作成します。詳細については、「ステップ 1: カスタムポリシーの作成」をご参照ください。
{ "Effect": "Allow", "Action": [ "vpc:DescribeVSwitches", "vpc:AllocateEipAddress", "vpc:DescribeEipAddresses", "vpc:AssociateEipAddress", "vpc:UnassociateEipAddress", "vpc:ReleaseEipAddress", "vpc:AddCommonBandwidthPackageIp", "vpc:RemoveCommonBandwidthPackageIp" ], "Resource": [ "*" ], "Condition": {} }クラスターの Worker RAM ロールに権限を付与します。詳細については、「ステップ 2: クラスターの Worker RAM ロールに権限を付与する」をご参照ください。
2020 年 6 月より前に作成されたACK 専用クラスターまたはACK マネージドクラスターに RAM 権限を付与する
次の内容でカスタムポリシーを作成します。詳細については、「ステップ 1: カスタムポリシーの作成」をご参照ください。
{ "Effect": "Allow", "Action": [ "vpc:DescribeVSwitches", "vpc:AllocateEipAddress", "vpc:DescribeEipAddresses", "vpc:AssociateEipAddress", "vpc:UnassociateEipAddress", "vpc:ReleaseEipAddress", "vpc:AddCommonBandwidthPackageIp", "vpc:RemoveCommonBandwidthPackageIp" ], "Resource": [ "*" ], "Condition": {} }AliyunCSManagedNetworkRole RAM ロールページで、[権限] タブに移動し、[権限の追加] をクリックします。次に、[カスタムポリシー] をクリックし、前のステップで作成したカスタムポリシーを選択して、[OK] をクリックします。
ステップ 2: クラスターのプラグインをインストールまたはアップグレードする
ack-extend-network-controller と Terway の両方の EIP 設定機能を同時に有効にしないでください。これにより、EIP リソースが繰り返し割り当てられ、EIP のバインドに失敗する可能性があります。ack-extend-network-controller プラグインを使用することを推奨します。
プラグインの比較
項目 | ack-extend-network-controller | Terway |
サポートされているクラスタータイプ |
|
|
固定 EIP | サポートされています | サポートされていません |
設定フェーズ | Pod の IP アドレスが割り当てられた後、コントローラーは EIP を割り当てて Pod にアタッチします。 | EIP は CNI の実行プロセス中に割り当てられ、アタッチされます。 |
サポートされているバージョン | v0.2.0 以降 | v1.0.10.280-gdc2cb6c-aliyun 以降、v1.7.0 未満 |
プラグインのインストールまたはアップグレード
ack-extend-network-controller プラグインを使用する場合は、ACK App Marketplace からインストールし、EIP コントローラーを有効にします。Terway ネットワークプラグインを使用する場合は、Terway をバージョン v1.0.10.280-gdc2cb6c-aliyun 以降にアップグレードします。
ack-extend-network-controller のインストール (推奨)
ACK コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
[アプリケーションマーケットプレイス] ページで、検索ボックスに
ack-extend-network-controllerと入力し、アプリケーションをクリックします。アプリケーションの詳細ページで、右上隅にある [デプロイ] をクリックします。
[作成] パネルで、クラスターと名前空間を選択し、[次へ] をクリックします。
パラメーター設定ページで、バージョン番号を選択し、パラメーターを設定して、[OK] をクリックします。
次の表にパラメーターを示します。
パラメーター
タイプ
必須
説明
clusterID
string
はい
クラスター ID。
regionID
string
はい
クラスターがデプロイされているゾーンの ID。
enableControllers
[]string
はい
このパラメーターを
eipに設定して、EIP 機能を有効にします。networkController.vpcid
string
はい
クラスターの VPC ID。
networkController.eipController.maxConcurrentReconciles
int
いいえ
同時 EIP コントローラーの数。
networkController.eipController.garbageCollectionPeriodInMinutes
int
いいえ
EIP コントローラーが固定 EIP をクリーンアップする期間。
customStatefulWorkloadKinds
[]string
いいえ
カスタムステートフルコントローラーの Kind。
enableVirtualNode
bool
いいえ
ECI 仮想ノードをサポートするかどうかを指定します。
重要このパラメーターを有効にすると、コントローラーは ECI インスタンスの Pod に EIP を割り当てます。設定する Pod アノテーションは、ECI でサポートされている EIP 機能と同じにすることはできません。このパラメーターは注意して使用してください。
enableRRSA
bool
いいえ
RRSA を使用してリクエストを認証します。
説明ack-extend-network-controller v0.10.0 以降でサポートされています。
RRSA の設定には、ack-pod-identity-webhook インジェクションメソッドのみがサポートされています。kube-system 名前空間に対応するラベルを設定します。設定の詳細については、「RRSA に基づいて 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 プラグインを使用していることを確認してから、Terway プラグイン (terway-eni または terway-eniip) を EIP 機能をサポートするバージョンにアップグレードします。Terway プラグインのアップグレード方法の詳細については、「コンポーネントの管理」をご参照ください。
Terway プラグインのバージョンは v1.0.10.280-gdc2cb6c-aliyun 以降、v1.7.0 未満である必要があります。Terway プラグインのバージョンの詳細については、「Terway」をご参照ください。
ステップ 3: EIP 機能を有効にする
EIP を有効にするためのアノテーションの概要
ACK では、アノテーションを使用して EIP 機能を有効にできます。要件に基づいて、EIP を自動的に割り当てるか、固定 EIP を Pod に割り当てるかを選択できます。
EIP の自動割り当て
自動 EIP 割り当て機能を使用すると、Pod が再構築されたり、コンテナーネットワークインターフェイス (CNI) の実行が失敗した場合に、EIP リソースが繰り返し要求および解放される可能性があります。この問題を回避するには、EIP インスタンスを指定できます。
Pod アノテーション | 値 |
network.alibabacloud.com/pod-with-eip k8s.aliyun.com/pod-with-eip | EIP を自動的に作成してアタッチするかどうかを指定します。有効な値:
|
k8s.aliyun.com/eci-with-eip (互換) | |
network.alibabacloud.com/eip-bandwidth k8s.aliyun.com/eip-bandwidth | EIP の作成時にのみサポートされます。 EIP のピーク帯域幅。単位: Mbit/s。詳細については、「EIP のリクエスト」をご参照ください。 |
network.alibabacloud.com/eip-internet-charge-type k8s.aliyun.com/eip-internet-charge-type | EIP の作成時にのみサポートされます。 EIP の課金方法。有効な値:
詳細については、「EIP のリクエスト」をご参照ください。 |
k8s.aliyun.com/eip-charge-type (互換) | |
network.alibabacloud.com/eip-instance-charge-type k8s.aliyun.com/eip-instance-charge-type | EIP の作成時にのみサポートされます。 EIP の課金方法。有効な値:
詳細については、「EIP のリクエスト」をご参照ください。 説明 ack-extend-network-controller でのみサポートされています。 PrePaid サブスクリプション設定はサポートされていません。 |
network.alibabacloud.com/eip-common-bandwidth-package-id k8s.aliyun.com/eip-common-bandwidth-package-id | 既存のインターネット共有帯域幅インスタンスをアタッチします。 説明 Terway プラグインは v1.2.3 以降である必要があります。ack-extend-network-controller プラグインにはバージョン制限はありません。 |
network.alibabacloud.com/eip-isp k8s.aliyun.com/eip-isp | EIP の作成時にのみサポートされます。 EIP の回線タイプ。有効な値:
詳細については、「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 の作成時にのみサポートされます。 EIP アドレスプール。EIP アドレスプールの使用に関する制限と手順の詳細については、「IP アドレスプールの作成と管理」をご参照ください。 説明 ack-extend-network-controller でのみサポートされています。 |
network.alibabacloud.com/eip-resource-group-id k8s.aliyun.com/eip-resource-group-id | EIP の作成時にのみサポートされます。 EIP リソースグループ。詳細については、「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 Proxy 対応 EIP がサポートされています。複数のレベルを設定する場合は、コンマ ( 説明 ack-extend-network-controller v0.9.0 以降でのみサポートされています。 |
network.alibabacloud.com/eip-tags k8s.aliyun.com/eip-tags | EIP の作成時にのみサポートされます。 EIP タグ設定。値は有効な JSON 形式である必要があります。詳細については、「タグの管理」をご参照ください。 例: 説明 ack-extend-network-controller v0.11.0 以降でのみサポートされています。 |
EIP インスタンスの指定
インスタンス ID を指定して、既存の EIP をアタッチできます。Pod アノテーションは EIP インスタンスの設定を変更しません。アノテーションは、指定された Pod に EIP をアタッチするだけです。
この機能は、複数レプリカのコントローラーには適用できません。1 つの Pod のみが EIP インスタンスを参照していることを確認してください。この機能は、ステートフルアプリケーションの StatefulSet でのみ使用することを推奨します。
Pod アノテーション | 値 |
network.alibabacloud.com/pod-eip-instanceid k8s.aliyun.com/pod-eip-instanceid | 指定された EIP を使用します。EIP インスタンス ID を入力します。例: eip-bp14qxxxxxxx。 重要 同じ EIP インスタンスを異なる名前の Pod に割り当てないでください。EIP コントローラーは、Pod が終了した後に EIP をデタッチします。この期間中、新しいコンテナーで同じ EIP インスタンスを使用することはできません。Pod と同じ名前の Pod EIP リソースが存在するかどうかを確認して、Pod と EIP がデタッチされているかどうかを判断できます。 |
k8s.aliyun.com/eci-eip-instanceid (互換) |
EIP リリース ポリシーを設定するためのアノテーションの概要
固定 EIP は、Pod が再構築された後も同じ EIP アドレスを使用し続けることを保証します。このポリシーは、ステートフルアプリケーションの固定 EIP のための自動 EIP 割り当て機能と組み合わせることができます。
この機能は、ack-extend-network-controller でのみサポートされており、ステートフルレプリカコントローラーでのみ使用できます。ステートレスコントローラーでは使用できません。
EIP インスタンス ID を指定した場合、EIP インスタンスは解放されません。
Pod アノテーション | 値 |
network.alibabacloud.com/pod-eip-release-strategy k8s.aliyun.com/pod-eip-release-strategy | Pod EIP のリリースポリシー。有効な値:
有効期限を直接設定できます。Go タイプの時間式がサポートされています。たとえば、 |
ack-extend-network-controller または Terway クラスターで EIP を有効にする
ack-extend-network-controller で有効にする
ack-extend-network-controller は、リソースを作成するために Alibaba Cloud OpenAPI にアクセスする必要があります。RAM で必要な権限を設定する必要があります。その後、App Marketplace から ack-extend-network-controller をインストールし、アノテーションを使用して EIP を作成し、指定された Pod に関連付けることができます。
アノテーションを使用して指定された Pod に EIP を作成して関連付ける
Pod にアノテーションを指定することで、EIP を作成して Pod に関連付けることができます。アノテーションの詳細については、このトピックの「よくある質問」セクションをご参照ください。
アプリケーションを作成し、指定された Pod に EIP を作成して関連付けます。
Deployment
次の例を使用してデプロイメントを作成します。帯域幅が 5 Mbit/s の EIP インスタンスが各 Pod に自動的に割り当てられます。
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: nginxPod が作成された後、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: InUseStatefulSet
次の例を使用して StatefulSet リソースを作成します。2 つの Pod が作成され、EIP インスタンスが各 Pod に自動的に割り当てられます。リリースポリシーは、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: nginxPod が作成された後、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.105.XX.XX internetChargeType: PayByTraffic isp: BGP networkInterfaceID: eni-2zeagv8f3wxxx podLastSeen: "2023-12-15T05:31:34Z" privateIPAddress: 192.168.XX.XX resourceGroupID: rg-acfmwqnwxxx status: InUse - apiVersion: alibabacloud.com/v1beta1 kind: PodEIP metadata: creationTimestamp: "2023-12-15T04:25:37Z" finalizers: - podeip-controller.alibabacloud.com/finalizer generation: 1 name: example-5bxxx-9xx namespace: default resourceVersion: "227220" uid: 43cdfxxx-f1xx-42xx-b3xx-969fxxx spec: allocationID: eip-2ze2qe8zsmnxxx allocationType: releaseStrategy: Follow type: Auto status: eipAddress: 39.102.XX.XX internetChargeType: PayByTraffic isp: BGP networkInterfaceID: eni-2zeagv8f3wxxx podLastSeen: "2023-12-15T05:31:34Z" privateIPAddress: 192.168.XX.XX publicIpAddressPoolID: pippool-2ze498cxxx resourceGroupID: rg-acfmwqnxxx status: InUse kind: List metadata: resourceVersion: ""ステートフルアプリケーションの Pod が削除された後、対応する PodEIP カスタムリソース (CR) は削除される前に 10 分間保持されます。この間に同じ名前の Pod が作成された場合、EIP は再利用されます。
設定を検証します。
Pod が実行中状態になった後、Pod の k8s.aliyun.com/allocated-eipAddress アノテーションの値を確認して、関連付けられている EIP アドレスを表示できます。その後、この EIP を使用して Pod にアクセスできます。

Terway で有効にする
EIP 機能をサポートするように Terway を設定します。
Terway ConfigMap を変更します。
kubectl edit cm eni-config -n kube-system次の内容を eni_conf に追加します。
"enable_eip_pool": "true"説明EIP を指定するときに以前のインスタンスを強制的にデタッチする場合は、eni_conf に "allow_eip_rob": "true" パラメーターも追加する必要があります。
ファイルを変更した後、Esc キーを押し、:wq! と入力してから Enter キーを押して、変更した設定ファイルを保存し、編集モードを終了します。
Terway インスタンスを再作成します。
kubectl delete pod -n kube-system -l app=terway-eniip # terway-eni コンポーネントをインストールした場合は、terway-eniip を terway-eni に置き換えます。
アノテーションを使用して、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 Mbit/s で、EIP のデフォルト値と同じです。
次のコードは、サンプル YAML ファイルを示しています。
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 Mbit/s で、EIP のデフォルト値と一致します。 labels: app: nginx spec: containers: - name: nginx image: nginxEIP 指定シナリオ
重要単一の EIP を複数の Pod に関連付けることはできません。したがって、このシナリオはデプロイメントおよび StatefulSet には適用できません。
デフォルトでは、EIP がすでにインスタンスにアタッチされている場合、EIP を Pod にアタッチすることはできません。EIP を新しいインスタンスにアタッチする前に以前のインスタンスからデタッチする場合は、前のステップで説明したように ConfigMap で "allow_eip_rob": "true" を設定する必要があります。
EIP インスタンス ID は、単一レプリカのインスタンスに対してのみ指定できます。たとえば、デプロイメントは複数のレプリカを持つことはできません。
次のアノテーションを追加して、Pod の EIP インスタンス ID を指定します。
k8s.aliyun.com/pod-eip-instanceid: "<youreipInstanceId>"設定を検証します。
Pod が実行中状態になった後、Pod の network.alibabacloud.com/allocated-eipAddress アノテーションの値を確認して、関連付けられている EIP アドレスを表示できます。その後、この EIP を使用して Pod にアクセスできます。
よくある質問
Pod が Ready になるのはなぜですか?
コントローラーは、Pod の IP アドレスが割り当てられた後に Pod の EIP アドレスを設定します。EIP が正常にアタッチされる前に、Pod が Ready 状態になることがあります。次のメソッドを使用して、Pod が Ready 状態になるタイミングを制御できます。
Pod の readiness gates を設定する
Pod の readiness gates の設定は、ack-extend-network-controller でのみサポートされています。
Pod で readinessGates を設定すると、コントローラーは EIP が正常にアタッチされた後に Pod の条件を設定します。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
...Pod の init コンテナーを設定する
Pod の init コンテナーを設定できます。init コンテナーでは、EIP が正常に割り当てられたかどうかを確認できます。詳細については、次の例をご参照ください。
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 アプリケーションは実行中です! && 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 アノテーションを待っています; 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.annotationsEIP を使用して Pod にアクセスできないのはなぜですか?
この問題は通常、アクセス制御リスト (ACL) ルールが原因です。次のアクセスの制御ポリシーを確認してください:
Cloud Firewall: EIP は Cloud Firewall のアクセスの制御ルールの対象となります。Cloud Firewall で EIP と Pod が使用するビジネスポートのインバウンドおよびアウトバウンドトラフィックを許可する必要があります。詳細については、「インターネット境界のアクセスの制御ポリシーを設定する」をご参照ください。
ノードセキュリティグループ: EIP が Pod にアタッチされた後、EIP を通過するトラフィックは、Pod が配置されているノードのセキュリティグループポリシーの対象となります。クライアントの IP アドレスがノードのセキュリティグループでインバウンドおよびアウトバウンドトラフィックに対して許可されており、Pod のビジネスポートが開いていることを確認してください。詳細については、「クラスターセキュリティグループの設定」をご参照ください。