クラスター、pods、サービスに対する IPv6 アドレスの説明 - Amazon EKS

クラスター、pods、サービスに対する IPv6 アドレスの説明

適用対象: Amazon EC2 インスタンスと Fargate Podsを持つPods

デフォルトでは、Kubernetes は IPv4 アドレスを Pods と services に割り当てます。Pods と services に IPv4 アドレスを割り当てる代わりに、IPv6 アドレスを割り当てるようにクラスターを設定できます。Amazon EKS は、Kubernetes がバージョン 1.23 以降でサポートしていても、デュアルスタックの Pods または services をサポートしません。つまり、IPv4 アドレスと IPv6 アドレスの両方を Pods と services に割り当てることはできません。

そのクラスターに使用する IP ファミリーは、クラスターの作成時に選択します。クラスターの作成後は、ファミリーを変更できません。

Amazon EKS IPv6 クラスターをデプロイするチュートリアルについては、「Amazon EKS IPv6 クラスターとマネージド Amazon Linux ノードをデプロイする」を参照してください。

この機能を使用する際の考慮事項を次に示します。

IPv6 の機能のサポート

IP アドレスの割り当て

  • Kubernetes サービス: Kubernetes サービスには IPv6 アドレスのみが割り当てられます。これらには、IPv4 アドレスは割り当てられません。

  • ポッド: ポッドには IPv6 アドレスとホストローカル IPv4 アドレスが割り当てられます。ホストローカル IPv4 アドレスは、VPC CNI と連鎖されたホストローカル CNI プラグインを使用して割り当てられ、そのアドレスは Kubernetes コントロールプレーンに報告されません。これは、ポッドが別の Amazon VPC またはインターネット内の外部 IPv4 リソースと通信する必要がある場合にのみ使用されます。ホストローカル IPv4 アドレスは、ワーカーノードのプライマリ ENI のプライマリ IPv4 アドレスに (VPC CNI によって) SNAT されます。

  • ポッドとサービス: Pods と services には IPv6 アドレスのみが割り当てられます。これらには、IPv4 アドレスは割り当てられません。Pods は、インスタンス自体の NAT を介して IPv4 エンドポイントとの通信が可能なため、DNS64 および NAT64 は必要となりません。トラフィックがパブリック IP アドレスを必要とする場合、そのトラフィックは、送信元ネットワークアドレスとしてパブリック IP に変換されます。

  • ルーティングアドレス: VPC の外部と通信する際の、Pod の送信元 IPv6 アドレスは、送信元のネットワークアドレスがノードの IPv6 アドレスに変換されたものではありません。このルーティングは、インターネットゲートウェイ、または送信専用インターネットゲートウェイを使用して行われます。

  • ノード: すべてのノードには、IPv4IPv6 のアドレスが割り当てられています。

  • Fargate Pods : 各 Fargate Pod は、デプロイ先のサブネット用に指定された CIDR から、IPv6 アドレスを受け取ります。Fargate Pods を実行するための基盤ハードウェアユニットは、そのユニットがデプロイされているサブネットに割り当てられている CIDR から、一意の IPv4 および IPv6 アドレスを取得します。

EKS で IPv6 を使用する方法

  • 新しいクラスターを作成する: 新しいクラスターを作成し、そのクラスターで IPv6 ファミリーの使用を指定する必要があります。これより前のバージョンからクラスターを更新して、IPv6 ファミリーを有効化することはできません。新しいクラスターを作成する手順については、「考慮事項」を参照してください。

  • 最新の VPC CNI を使用する: Amazon VPC CNI バージョン 1.10.1 以降をデプロイします。このバージョン以降がデフォルトでデプロイされます。アドオンのデプロイ後は、クラスター内のすべてのノードグループ内にあるすべてのノードを削除しない限り、Amazon VPC CNI アドオンを 1.10.1 より前のバージョンにダウングレードすることはできません。

  • IPv6 用の VPC CNI を設定する: Amazon EC2 ノードを使用する場合は、IP プレフィックスの委任と IPv6 を使用して Amazon VPC CNI アドオンを設定する必要があります。クラスターの作成時に IPv6 ファミリーを選択した場合は、バージョン 1.10.1 のアドオンが、この設定のデフォルトになります。これは、セルフマネージド型のアドオン、および Amazon EKS アドオンの両方に当てはまります。IP プレフィックス委任の詳細については、「プレフィックスを使用して Amazon EKS ノードに割り当てる IP アドレスを増やす」を参照してください。

  • IPv4 アドレスと IPv6 アドレスを設定する: クラスターを作成する際に指定する VPC とサブネットには、それらに割り当てられた IPv6 CIDR ブロックが必要です。同時に、IPv4 CIDR ブロックも割り当てられている必要があります。これは、IPv6 のみを使用する場合でも、VPC が機能するには IPv4 CIDR ブロックが必要になるためです。詳細については、「Amazon VPC ユーザーガイド」の「IPv6 CIDR ブロックと VPC の関連付け」を参照してください。

  • IPv6 アドレスをノードに自動割り当てする: ノードを作成する際は、IPv6 アドレスを自動割り当てするように設定されたサブネットを指定する必要があります。指定していない場合、ノードをデプロイできません。自動割り当ての設定はデフォルトで無効になっています。 詳細については、「Amazon VPC ユーザーガイド」の「サブネットのパブリック IPv6 アドレス属性を変更する」を参照してください。

  • ルートテーブルを設定して IPv6 を使用する: サブネットに割り当てられるルートテーブルには、IPv6 アドレス用のルートが必要です。詳細については、「Amazon VPC ユーザーガイド」の「既存の VPC を IPv4 から IPv6 に移行する」を参照してください。

  • IPv6 のセキュリティグループを設定する: セキュリティグループは IPv6 アドレスを許可する必要があります。詳細については、「Amazon VPC ユーザーガイド」の「既存の VPC を IPv4 から IPv6 に移行する」を参照してください。

  • ロードバランサーを設定する: AWS Load Balancer コントローラーのバージョン 2.3.1 以降を使用して、 Application Load Balancer を使用してアプリケーションと HTTP トラフィックをルーティングする を使った HTTP アプリケーションをロードバランシング、または、Network Load Balancer を使用して TCP および UDP トラフィックをルーティングする を使ったネットワークトラフィックの IPv6 Pods へのロードバランシングを行います。いずれの場合もインスタンスモードではなく IP モードを使用してください。詳細については、「AWS Load Balancer Controller を使用してインターネットトラフィックをルーティングする」を参照してください。

  • IPv6 IAM ポリシーを追加する: ノード IAM または CNI IAM ロールには、IPv6 のIAM ポリシーをアタッチする必要があります。上記 2 つの中では、CNI IAM ロールへのアタッチが推奨されます。詳細については、IPv6 ファミリーを使用するクラスター用に IAM ポリシーを作成します。およびステップ 1: Amazon VPC CNI plugin for Kubernetes IAM ロールを作成するを参照してください。

  • すべてのコンポーネントを評価する: アプリケーション、Amazon EKS アドオン、および、IPv6 クラスターのデプロイ前に統合した AWS サービスに関しては、包括的な評価を実施します。これにより、IPv6 を使用した場合も、すべてが想定どおりに動作することを保証できます。

  • BootstrapArguments セルフマネージドノードグループを追加する: IPv6 ファミリーを使用するクラスターでセルフマネージドノードグループを作成する場合、ユーザーデータには、ノードの起動時に実行される bootstrap.sh ファイルの次の BootstrapArguments が含まれている必要があります。your-cidr をクラスターの VPC の IPv6 CIDR 範囲に置き換えます。

    --ip-family ipv6 --service-ipv6-cidr your-cidr

    クラスターの IPv6 CIDR 範囲がわからない場合は、次のコマンドで確認できます (AWS CLI バージョン 2.4.9 以降が必要です)。

    aws eks describe-cluster --name my-cluster --query cluster.kubernetesNetworkConfig.serviceIpv6Cidr --output text