外部ソースネットワークアドレス変換 (SNAT) - Amazon EKS

外部ソースネットワークアドレス変換 (SNAT)

VPC 内の通信 (ポッドからポッドなど) は、プライベート IP アドレス間で直接行われ、ソースネットワークアドレス変換 (SNAT) を必要としません。トラフィックの宛先が VPC の外部のアドレスである場合に、Kubernetes の Amazon VPC CNI プラグインは各ポッドのプライベート IP アドレスを、そのポッドのデフォルトの Amazon EC2 インスタンスワーカーノードのプライマリ Elastic Network Interface に割り当てられたプライマリプライベート IP アドレスに変換します。SNAT:

  • ポッドがインターネットと双方向に通信できるようにします。ワーカーノードはパブリックサブネットにあり、そのプライマリネットワークインターフェイスのプライマリプライベート IP アドレスに、パブリック IP アドレスまたは Elastic IP アドレスが割り当てられている必要があります。以下の図に示すように、トラフィックはパブリック IP アドレスまたは Elastic IP アドレスとの間で変換され、インターネットゲートウェイによってインターネットとの間でルーティングされます。

    インターネットゲートウェイは、ポッドのプライマリプライベート IP アドレスと、ポッドの Amazon EC2 インスタンスワーカーノードのプライマリ Elastic Network Interface に割り当てられたパブリック IP アドレスまたは Elastic IP アドレスとの間の変換方法しか認識しないため、SNAT が必要です。

  • 他のプライベート IP アドレススペース (VPC ピア接続Transit VPCDirect Connect など) のデバイスが、Amazon EC2 インスタンスワーカーノードのプライマリ Elastic Network Interface のプライマリプライベート IP アドレスが割り当てられていないポッドと直接通信しないようにします。

他のプライベート IP アドレススペース内のインターネットまたはデバイスが通信する必要のあるポットに、そのポッドの Amazon EC2 インスタンスワーカーノードのプライマリ Elastic Network Interface に割り当てられたプライマリプライベート IP アドレスが割り当てられていない場合は、以下の操作が必要です。

  • パブリックサブネットの NAT デバイスへのルートがあるプライベートサブネットにワーカーノードをデプロイします。

  • 以下のコマンドを使用して、CNI プラグイン aws-node DaemonSet で外部 SNAT を有効にします。

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

外部 SNAT が有効になると、トラフィックの宛先が VPC の外部のアドレスである場合に、CNI プラグインはポッドのプライベート IP アドレスを、そのポッドの Amazon EC2 インスタンスワーカーノードのプライマリ Elastic Network Interface に割り当てられたプライマリプライベート IP アドレスに変換しません。以下の図に示すように、ポッドからインターネットへのトラフィックは、NAT デバイスのパブリック IP アドレスとの間で外部的に変換され、インターネットゲートウェイによってインターネットとの間でルーティングされます。