

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# IPv6 EKS クラスターの実行
<a name="ipv6"></a>

IPv6 モードの EKS は、大規模な EKS クラスターでよく現れる IPv4 の枯渇の問題を解決します。EKS の IPv6 のサポートは、IPv4 アドレス空間のサイズが限られていることに起因する IPv4 の枯渇問題の解決に焦点を当てています。これは多くのお客様から寄せられた重大な懸念事項であり、Kubernetes [IPv4/IPv6 デュアルスタック](https://kubernetes.io/docs/concepts/services-networking/dual-stack/)機能とは異なります。EKS/IPv6 は、IPv6 CIDRs を使用してネットワーク境界を相互接続する柔軟性も提供するため、CIDR の重複に悩まされる可能性を最小限に抑え、2-Foldの問題を解決します (クラスター内、クラスター間）。EKS クラスターを IPv6 モード (--ip-family ipv6) でデプロイする場合、アクションは元に戻すことはできません。簡単に言うと、EKS IPv6 サポートはクラスターの存続期間中有効になります。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/zdXpTT0bZXo?rel=0/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/zdXpTT0bZXo?rel=0)


IPv6 EKS クラスターでは、ポッドとサービスはレガシー IPv4 エンドポイントとの互換性を維持しながら IPv6 アドレスを受け取ります。 IPv4 これには、外部 IPv4 エンドポイントがクラスター内サービスにアクセスしたり、ポッドが外部 IPv4 エンドポイントにアクセスしたりする機能が含まれます。

Amazon EKS IPv6 サポートは、ネイティブ VPC IPv6 機能を活用します。各 VPC には、IPv4 アドレスプレフィックス (CIDR ブロックサイズは /16～/28) と、Amazon の GUA (グローバルユニキャストアドレス) 内からの一意の /56 IPv6 アドレスプレフィックス (固定) が割り当てられます。VPC 内の各サブネットに /64 アドレスプレフィックスを割り当てることができます。ルートテーブル、ネットワークアクセスコントロールリスト、ピアリング、DNS 解決などの IPv4 機能は、IPv6 対応 VPC でも同じように機能します。次に、VPC はデュアルスタック VPC と呼ばれ、デュアルスタックサブネットに続いて、次の図は EKS/IPV4IPv6IPv6 VPC 基盤パターンを示しています。

![\[デュアルスタック VPC\]](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/networking/ipv6_eks-ipv6-foundation.png)


IPv6 の世界では、すべてのアドレスがインターネットでルーティング可能です。デフォルトでは、VPC はパブリック GUA 範囲から IPv6 CIDR を割り当てます。ただし、[2024 年 8](https://aws.amazon.com/about-aws/whats-new/2024/08/aws-private-ipv6-addressing-vpcs-subnets/) 月以降は、Amazon VPCs IP Address Manager (IPAM) で VPC とサブネットにプライベート IPv6 アドレス指定を使用することもできます。詳細については、[この AWS Networking ブログ記事](https://aws.amazon.com/blogs/networking-and-content-delivery/understanding-ipv6-addressing-on-aws-and-designing-a-scalable-addressing-plan)と [VPC ドキュメント](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#vpc-ipv6-addresses)を参照してください。

次の図は、EKS/IPv6 クラスター内の Pod IPv6 インターネット出力フローを示しています。

![\[デュアルスタック VPC\]](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/networking/ipv6_eks-egress-ipv6.png)


IPv6 サブネットを実装するためのベストプラクティスについては、VPC [ユーザーガイド](https://docs.aws.amazon.com/whitepapers/latest/ipv6-on-aws/IPv6-on-AWS.html)を参照してください。

IPv6 EKS クラスターでは、ノードとポッドはパブリック IPv6 アドレスを受け取ります。EKS は、一意のローカル IPv6 ユニキャストアドレス (ULA) に基づいて、サービスに IPv6 アドレスを割り当てます。IPv6 クラスターの ULA サービス CIDR は、クラスターの作成段階で自動的に割り当てられ、IPv4 とは異なり、指定することはできません。次の図は、EKS/IPv6 ベースのクラスターコントロールプレーンデータプラン基盤パターンを示しています。

![\[デュアルスタック VPC\]](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/networking/ipv6_eks-cluster-ipv6-foundation.png)


## 概要:
<a name="_overview"></a>

EKS/IPv6 は、プレフィックスモード (VPC-CNI プラグイン ENI IP 割り当てモード) でのみサポートされています。[プレフィックスモード](prefix-mode-linux.md)の詳細については、「」を参照してください。

プレフィックスの割り当ては Nitro ベースの EC2 インスタンスでのみ機能するため、EKS/IPv6 はクラスターデータプレーンが EC2 Nitro ベースのインスタンスを使用する場合にのみサポートされます。

簡単に言うと、IPv6 プレフィックス /80 (ワーカーノードあたり) は最大 10^14 個の IPv6 アドレスを生成し、制限要因は IPs ではなくポッド密度 (リソース単位) になります。

IPv6 プレフィックスの割り当ては、EKS ワーカーノードブートストラップ時にのみ発生します。この動作は、プライベート IPv4 アドレスを適時に割り当てることを目的とした VPC CNI プラグイン (ipamd) によって生成されたスロットリングされた API コールが原因で、Pod のスケジューリングが頻繁に遅延するシナリオを軽減することが知られています。VPC-CNI プラグインの高度なつまみを [WARM\$1IP/ENI*、MINIMUM\$1IP *](https://github.com/aws/amazon-vpc-cni-k8s#warm_ip_target)を不必要に調整することも知られています。

次の図は、IPv6 ワーカーノードの Elastic Network Interface (ENI) を拡大したものです。

![\[ワーカーサブネットの図\]](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/networking/ipv6_image-2.png)


すべての EKS ワーカーノードには、対応する DNS エントリとともに IPv4 アドレスと IPv6 アドレスが割り当てられます。特定のワーカーノードでは、デュアルスタックサブネットの単一の IPv4 アドレスのみが消費されます。IPv6 の EKS サポートにより、高度に評価された Egress-Only IPv4 モデルを通じて IPv4 エンドポイント (AWS、オンプレミス、インターネット) と通信できます。EKS は、VPC CNI プラグインのセカンダリであるホストローカル CNI プラグインを実装し、ポッドの IPv4 アドレスを割り当てて設定します。CNI プラグインは、169.254.172.0/22 の範囲から Pod のホスト固有のルーティング不可能な IPv4 アドレスを設定します。Pod に割り当てられた IPv4 アドレスは*ワーカーノードに固有*であり、*ワーカーノードを超えてアドバタイズされません*。 169.254.172.0/22 は、大規模なインスタンスタイプをサポートできる最大 1024 個の一意の IPv4 アドレスを提供します。

次の図は、クラスター境界 (非インターネット) 外の IPv4 エンドポイントに接続する IPv6 Pod のフローを示しています。 IPv4 

![\[EKS/IPv6\]](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/networking/ipv6_eks-ipv4-snat-cni.png)


上記の図では、Pod はエンドポイントの DNS ルックアップを実行し、IPv4 の「A」レスポンスを受信すると、Pod のノードのみの一意の IPv4 アドレスは、ソースネットワークアドレス変換 (SNAT) を介して EC2 ワーカーノードにアタッチされたプライマリネットワークインターフェイスのプライベート IPv4 (VPC) アドレスに変換されます。

**注記**  
上記のパターンでは、EKS/IPv6 Pod が実行されているサブネットで DNS64 を無効にする必要があります。IPv6 DNS64 を有効にすると、DNS リゾルバーは IPv4 専用エンドポイントの合成された IPv6 アドレスと IPv4 アドレスを返します。 IPv4-only その結果、上記のパターンに示すように、トラフィックは VPC 内に留まる代わりに、NAT ゲートウェイの (アーキテクチャに含まれている場合) NAT64 機能を介してルーティングされます。これにより、予期しない NAT Gateway の使用と関連コストが発生する可能性があります。

EKS/IPv6 Pod は、同様のフローが存在するように、パブリック IPv4 アドレスを使用してインターネット経由で IPv4 エンドポイントに接続する必要があります。次の図は、クラスター境界 (インターネットルーティング可能) 外の IPv4 エンドポイントに接続する IPv6 Pod のフローを示しています。 IPv4 

![\[EKS/IPv6\]](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/networking/ipv6_eks-ipv4-snat-cni-internet.png)


上記の図では、Pod はエンドポイントの DNS ルックアップを実行し、IPv4 の「A」レスポンスを受信すると、Pod のノードのみの一意の IPv4 アドレスは、ソースネットワークアドレス変換 (SNAT) を介して EC2 ワーカーノードにアタッチされたプライマリネットワークインターフェイスのプライベート IPv4 (VPC) アドレスに変換されます。その後、ポッド IPv4 アドレス (ソース IPv4: EC2 プライマリ IP) は IPv4 NAT ゲートウェイにルーティングされ、EC2 プライマリ IP は有効なインターネットルーティング可能な IPv4 パブリック IP アドレス (NAT ゲートウェイ割り当てパブリック IP) に変換されます。

ノード間の Pod-to-Pod通信は常に IPv6 アドレスを使用します。VPC CNI は、IPv4 接続をブロックしながら IPv6 を処理するように iptables を設定します。 IPv4 

Kubernetes サービスは、一意のローカル IPv6 ユニキャストアドレス (ULA) から IPv6 アドレス (ClusterIP) のみを受け取ります。 [ IPv6 ](https://datatracker.ietf.org/doc/html/rfc4193) IPv6 クラスターの ULA サービス CIDR は、EKS クラスターの作成段階で自動的に割り当てられ、変更することはできません。次の図は、Pod から Kubernetes サービスへのフローを示しています。

![\[EKS/IPv6\]](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/networking/ipv6_Pod-to-service-ipv6.png)


サービスは、AWS ロードバランサーを使用してインターネットに公開されます。ロードバランサーは、パブリック IPv4 アドレスと IPv6 アドレス、a.k.a デュアルスタックロードバランサーを受け取ります。IPv6 クラスター kubernetes サービスにアクセスする IPv64 クライアントの場合、ロードバランサーは IPv4 から IPv6 への変換を行います。

Amazon EKS では、プライベートサブネットでワーカーノードとポッドを実行することをお勧めします。パブリックサブネットにパブリックロードバランサーを作成して、プライベートサブネットにあるノードで実行されている Pod にトラフィックをロードバランシングできます。次の図は、EKS/IPv6 Ingress ベースのサービスにアクセスするインターネット IPv4 ユーザーを示しています。IPv6 

![\[インターネット IPv4 ユーザーから EKS/IPv6 Ingress サービスへ\]](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/networking/ipv6_ipv4-internet-to-eks-ipv6.png)


**注記**  
上記のパターンでは、AWS ロードバランサーコントローラーの[最新バージョン](https://kubernetes-sigs.github.io/aws-load-balancer-controller)をデプロイする必要があります

### EKS コントロールプレーンのデータプレーン通信
<a name="_eks_control_plane_data_plane_communication"></a>

EKS は、デュアルスタックモード (IPv4/IPv6) でクロスアカウント ENIs (X-ENIs) をプロビジョニングします。kubelet や kube-proxy などの Kubernetes ノードコンポーネントは、デュアルスタックをサポートするように設定されています。Kubelet と kube-proxy は hostNetwork モードで実行され、ノードのプライマリネットワークインターフェイスにアタッチされた IPv4 アドレスと IPv6 アドレスの両方にバインドされます。Kubernetes API サーバーは、X-ENIs を介して Pod とノードコンポーネントと通信しますIPv6 ベースです。ポッドは X-ENIs を介して API サーバーと通信し、ポッドから API サーバーへの通信は常に IPv6 モードを使用します。

![\[X-ENIsを含むクラスターの図\]](http://docs.aws.amazon.com/ja_jp/eks/latest/best-practices/images/networking/ipv6_image-5.png)


## 推奨事項
<a name="_recommendations"></a>

### コンピューティングリソースに基づくスケジュール
<a name="_schedule_based_on_compute_resources"></a>

1 つの IPv6 プレフィックスは、1 つのノードで多くの Pod を実行するのに十分です。これにより、ノード上のポッドの最大数に対する ENI と IP の制限も効果的に削除されます。IPv6 は max-Pod への直接的な依存関係を削除しますが、m5.large などの小さなインスタンスタイプでプレフィックスアタッチメントを使用する場合、IP アドレスを使い果たす前にインスタンスの CPU リソースとメモリリソースを使い果たす可能性があります。セルフマネージド型ノードグループまたはカスタム AMI ID を持つマネージド型ノードグループを使用している場合は、EKS が推奨する最大 Pod 値を手動で設定する必要があります。

次の式を使用して、IPv6 EKS クラスターのノードにデプロイできる Pod の最大数を決定できます。

```
((Number of network interfaces for instance type (number of prefixes per network interface-1)* 16) + 2
```

```
((3 ENIs)_((10 secondary IPs per ENI-1)_ 16)) + 2 = 460 (real)
```

マネージド型ノードグループは、Pod の最大数を自動的に計算します。リソースの制限によるポッドスケジューリングの失敗を避けるため、ポッドの最大数に対する EKS の推奨値を変更しないでください。

### 既存のカスタムネットワークの目的を評価する
<a name="_evaluate_purpose_of_existing_custom_networking"></a>

[カスタムネットワーキング](https://docs.aws.amazon.com/eks/latest/best-practices/custom-networking.html)が現在有効になっている場合、Amazon EKS では IPv6 を使用してその必要性を再評価することをお勧めします。カスタムネットワークを使用して IPv4 の枯渇問題に対処することを選択した場合、IPv6 では不要になります。ノードとポッドの個別のネットワークなど、セキュリティ要件を満たすためにカスタムネットワークを使用している場合は、[EKS ロードマップリクエスト](https://github.com/aws/containers-roadmap/issues)を送信することをお勧めします。

### EKS/IPv6 クラスターの Fargate Pod
<a name="_fargate_pods_in_eksipv6_cluster"></a>

EKS は、Fargate で実行されているポッドの IPv6 をサポートしています。Fargate で実行されているポッドは、VPC CIDR 範囲 (IPv6) から切り取られた IPv6 および VPC Routable Private IPv4 アドレスを使用します。 IPv4 IPv4IPv6 簡単に言うと、EKS/Fargate Pods クラスター全体の密度は、使用可能な IPv4 アドレスと IPv6 アドレスに制限されます。将来の成長に備えて、デュアルスタックサブネット/VPC CIDRsのサイズを設定することをお勧めします。IPv6 の使用可能なアドレスに関係なく、基盤となるサブネットに使用可能な IPv4 アドレスが含まれていない場合、新しい Fargate Pod をスケジュールすることはできません。 IPv6 

### AWS Load Balancer Controller (LBC) をデプロイする
<a name="_deploy_the_aws_load_balancer_controller_lbc"></a>

 **アップストリームのツリー内 Kubernetes サービスコントローラーは IPv6 をサポートしていません**。AWS Load Balancer Controller アドオンの[最新バージョン](https://kubernetes-sigs.github.io/aws-load-balancer-controller)を使用することをお勧めします。LBC は、次の注釈が付いた対応する kubernetes サービス/イングレス定義を消費した場合にのみ、デュアルスタック NLB またはデュアルスタック ALB をデプロイ`"alb.ingress.kubernetes.io/ip-address-type: dualstack"`します。 `"alb.ingress.kubernetes.io/target-type: ip"`