IPv6 EKS クラスターの実行 - Amazon EKS

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

IPv6 EKS クラスターの実行

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

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

IPv6 の世界では、すべてのアドレスがインターネットルーティング可能です。デフォルトでは、VPC はパブリック GUA 範囲から IPv6 CIDR を割り当てます。VPCsRFC 4193 (fd00::/8 または fc00::/8) で定義されている一意のローカルアドレス (ULA) 範囲からのプライベート IPv6 アドレスの割り当てをサポートしていません。 https://en.wikipedia.org/wiki/Unique_local_addressこれは、お客様が所有する IPv6 CIDR を割り当てる場合でも当てはまります。プライベートサブネットからインターネットへの送信は、VPC に Egress-Only インターネットゲートウェイ (EIGW) を実装することでサポートされ、すべての着信トラフィックをブロックしながらアウトバウンドトラフィックを許可します。次の図は、EKS/IPv6 クラスター内のポッド IPv6 インターネット出力フローを示しています。IPv6

デュアルスタック VPC

IPv6 サブネットを実装するためのベストプラクティスについては、VPC ユーザーガイドを参照してください。

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

デュアルスタック VPC

概要

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

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

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

IPv6 プレフィックスの割り当ては、EKS ワーカーとノードのブートストラップ時にのみ行われます。この動作は、プライベート IPv4 アドレスをタイムリーに割り当てることを目的とした VPC CNI プラグイン (ipamd) によって生成された API コールがスロットリングされるため、ポッドチャーンが高い EKS/IPv4 クラスターがポッドスケジューリングで遅延することがよくあるシナリオを軽減することが知られています。また、VPC-CNI プラグインのアドバンストな調整 WARM_IP/ENI、MINIMUM_IP を不必要に行うことも知られています。

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

ワーカーサブネットの図

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

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

EKS/IPv6

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

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

EKS/IPv6

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

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

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

EKS/IPv6

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

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

インターネット IPv4 ユーザーから EKS/IPv6 Ingress サービスへ
注記

上記のパターンでは、AWS ロードバランサーコントローラーの最新バージョンをデプロイする必要があります

EKS コントロールプレーンのデータプレーン通信

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

X-ENIsを含むクラスターの図

レコメンデーション

IPv4 EKS APIs へのアクセスを維持する

EKS APIsには IPv4 からのみアクセスできます。これには、クラスター API エンドポイントも含まれます。IPv6 専用ネットワークからクラスターエンドポイントと APIs にアクセスすることはできません。ネットワークは、(1) IPv6 と IPvNAT644/DNS64 などの IPv4IPv6 移行メカニズム、および (2) IPv4 エンドポイントの変換をサポートする DNS サービスをサポートしている必要があります。

コンピューティングリソースに基づくスケジュール

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

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

((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)

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

既存のカスタムネットワークの目的を評価する

カスタムネットワークが現在有効になっている場合、Amazon EKS は IPv6 を使用してその必要性を再評価することをお勧めします。カスタムネットワークを使用して IPv4 の枯渇問題に対処することを選択した場合、IPv6 では不要になります。ノードとポッドの個別のネットワークなど、セキュリティ要件を満たすためにカスタムネットワークを使用している場合は、EKS ロードマップリクエストを送信することをお勧めします。

EKS/IPv6 クラスターの Fargate ポッド

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

AWS Load Balancer Controller (LBC) をデプロイする

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

AWS Network Load Balancer は、デュアルスタック UDP プロトコルアドレスタイプをサポートしていません。低レイテンシー、リアルタイムストリーミング、オンラインゲーム、IoT に対する強力な要件がある場合は、IPv4 クラスターを実行することをお勧めします。UDP サービスのヘルスチェックの管理の詳細については、「UDP トラフィックを Kubernetes にルーティングする方法」を参照してください。