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

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

VPC 内の通信 (ポッドからポッドなど) は、プライベート IP アドレス間で直接行われ、ソースネットワークアドレス変換 (SNAT) を必要としません。トラフィックが VPC 外のアドレス宛ての場合、デフォルトでは、Amazon VPC CNI Plugin for Kubernetes が、各ポッドのプライベート IP アドレスを、ポッドが実行されている Amazon EC2 ノードのプライマリElastic Network Interface に割り当てられたプライマリプライベート IP アドレスに変換します。Elastic Network Interface はネットワークインターフェイスのAWS Management ConsoleAmazon EC2 API を使用します。したがって、このドキュメントでは「Elastic Network Interface」ではなく「ネットワークインターフェイス」を使用します。このドキュメントの「ネットワークインターフェイス」という用語は、常に「Elastic Network Interface」を意味します。SNAT:

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

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

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

インターネットまたは他のプライベート IP アドレススペース内のデバイスが通信する必要のあるポットに、そのポッドが実行されている Amazon EC2 インスタンスノードのプライマリネットワークインターフェイスに割り当てられたプライマリプライベート 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 インスタンスノードのプライマリネットワークインターフェイスに割り当てられたプライマリプライベート IP アドレスに変換しません。以下の図に示すように、ポッドからインターネットへのトラフィックは、NAT デバイスのパブリック IP アドレスとの間で外部的に変換され、インターネットゲートウェイによってインターネットとの間でルーティングされます。