pods の SNAT
IPv6
ファミリーを使用してクラスターをデプロイした場合、このトピックの情報はクラスターに適用されません。IPv6
アドレスがネットワーク変換されないからです。クラスターでの IPv6
使用の詳細については、「チュートリアル: pods および services への IPv6 アドレスの割り当て」を参照してください。
デフォルトでは、クラスター内の各 pod に、pod がデプロイされた VPC に関連付けられた Classless Inter-Domain Routing (CIDR) ブロックから、プライベート IPv4
アドレスが割り当てられます。同じ VPC 内の Pods は、これらのプライベート IP アドレスをエンドポイントとして使用して相互に通信します。VPC に関連付けられている CIDR ブロック外の IPv4
アドレスと pod が通信する場合、Kubernetes 用の Amazon VPC CNI プラグインIPv4
アドレスを、pod が実行されているノードのプライマリ Elastic Network Interface のプライマリプライベート IPv4
アドレスに変換します (デフォルトでは *)。
この動作によって、次の現象が起こります。
-
VPC ピアリング接続、トランジット VPC、または Direct Connect を使用してクラスター VPC に接続されているネットワーク内または VPC 内にあるリソースは、pods との通信を開始できません。ただし、pods はこれらのリソースとの通信を開始し、リソースから応答を受け取ることができます。
-
pods は、実行しているノードに パブリック IP アドレスまたは 伸縮性 IP アドレスが割り当てられており、パブリックサブネット内にある場合にのみ、インターネットリソースと通信できます。パブリックサブネットに関連付けられているルートテーブルには、インターネットゲートウェイへのルートが含まれています。可能であれば、プライベートサブネットにノードをデプロイすることをお勧めします。
VPC ピアリング接続、トランジット VPC、または Direct Connect を使用してクラスター VPC に接続されているネットワーク内または VPC 内にあるリソースがあって、IPv4
アドレスを使用して pods との通信を開始する必要がある場合、デフォルト設定を次のコマンドで変更する必要があります。
kubectl set env daemonset -n kube-system aws-node AWS_VPC_K8S_CNI_EXTERNALSNAT=true
設定を true
に変更した後に pods がインターネットと通信するようにするには、ノードをデプロイしたプライベートサブネットに関連付けられているルートテーブルに、パブリック NAT ゲートウェイへのルートが含まれている必要があります。
*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