Pods の SNAT - Amazon EKS

Pods の SNAT

IPv6 ファミリーを使用してクラスターをデプロイした場合、このトピックの情報はクラスターに適用されません。IPv6 アドレスがネットワーク変換されないからです。クラスターでの IPv6 使用の詳細については、「クラスター、Pods、services 用の IPv6 アドレス」を参照してください。

デフォルトでは、クラスター内の各 Pod に、Pod がデプロイされた VPC に関連付けられた Classless Inter-Domain Routing (CIDR) ブロックから、プライベート IPv4 アドレスが割り当てられます。同じ VPC 内の Pods は、これらのプライベート IP アドレスをエンドポイントとして使用して相互に通信します。Pod が VPC に関連付けられている CIDR ブロック外の IPv4 アドレスと通信する場合、(Linux または Windows の両方用の) Amazon VPC CNI プラグインが Pod's IPv4 アドレスを、デフォルトで *、Pod が実行されているノードのプライマリ Elastic Network Interface のプライマリプライベート IPv4 アドレスに変換します。

注記

Windows ノードについては、他にも考慮すべき事項があります。デフォルトでは、Windows の VPC CNI プラグインは、同じ VPC 内の宛先へのトラフィックを SNAT から除外するネットワーク設定で定義されます。つまり、内部 VPC 通信では SNAT が無効になっており、Pod に割り当てられた IP アドレスは VPC 内でルーティング可能です。ただし、VPC 外の宛先へのトラフィックでは、送信元 Pod IP がインスタンスの ENI のプライマリ IP アドレスに SNAT されます。Windows のこのデフォルト設定により、ポッドはホストインスタンスと同じ方法で VPC 外部のネットワークにアクセスできます。

この動作によって、次の現象が起こります。

  • Pods は、実行しているノードにパブリック IP アドレスまたは Elastic IP アドレスが割り当てられており、パブリックサブネット内にある場合にのみ、インターネットリソースと通信できます。パブリックサブネットに関連付けられているルートテーブルには、インターネットゲートウェイへのルートが含まれています。可能であれば、プライベートサブネットにノードをデプロイすることをお勧めします。

  • 1.8.0 よりも古いバージョンのプラグインの場合、VPC ピアリングトランジット VPC、または AWS Direct Connect を使用してクラスター VPC に接続されているネットワークまたは VPC 内にあるリソースは、セカンダリ Elastic Network Interface の背後にある Pods との通信を開始できません。ただし、Pods はこれらのリソースとの通信を開始し、リソースから応答を受け取ることができます。

ご使用の環境で次のいずれかが当てはまる場合は、次のコマンドを使用してデフォルト設定を変更してください。

kubectl set env daemonset -n kube-system aws-node AWS_VPC_K8S_CNI_EXTERNALSNAT=true
注記

AWS_VPC_K8S_CNI_EXTERNALSNAT および AWS_VPC_K8S_CNI_EXCLUDE_SNAT_CIDRS CNI の設定変数は Windows ノードに適用されません。SNAT の無効化は Windows でサポートされていません。IPv4 CIDR のリストを SNAT から除外する場合は、Windows ブートストラップスクリプトで ExcludedSnatCIDRs パラメータを指定して定義できます。このパラメータの使用に関する詳細については、「ブートストラップスクリプトの設定パラメータ」を参照してください。

*Pod's 仕様に hostNetwork=true が含まれている場合 (デフォルトは false)、その IP アドレスは別のアドレスに変換されません。これは、クラスター上で実行されている kube-proxy と Amazon VPC CNI plugin for Kubernetes Pods の場合のデフォルトです。これらの Pods の場合、IP アドレスはノードのプライマリ IP アドレスと同じであるため、Pod's IP アドレスは変換されません。Pod's hostNetwork の設定の詳細については、「Kubernetes API リファレンス」の「PodSpec v1 core」を参照してください。