外部源网络地址转换 (SNAT) - Amazon EKS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

外部源网络地址转换 (SNAT)

VPC 内的通信(如 Pod 到 Pod)在私有 IP 地址之间是直接的,无需源网络地址转换 (SNAT)。当流量以 VPC 外部的地址为目标时,默认情况下,适用于 Kubernetes 的 Amazon VPC CNI 插件将每个 Pod 的私有 IP 地址转换为分配给 Pod 在其上运行的 节点的主 网络接口Amazon EC2(网络接口)的主要私有 IP 地址。SNAT:

  • 使 Pod 能够与互联网进行双向通信。该节点必须位于公有子网中,并且向其主网络接口的主私有 IP 地址分配了公有弹性 IP 地址。流量在公有或弹性 IP 地址之间进行转换,并通过 Internet 网关 路由到 Internet 或从 Internet 进行路由,如下图所示。

    SNAT 是必需的,因为 Internet 网关只能在主私有地址与分配给运行 Pod 的 Amazon EC2 实例节点的主网络接口的公有或弹性 IP 地址之间进行转换。

  • 阻止其他私有 IP 地址空间中的设备(例如,VPC 对等连接中转 VPCDirect Connect)直接与未分配 Amazon EC2 实例节点的主网络接口的主私有 IP 地址的 Pod 进行通信。

如果 Internet 或其他私有 IP 地址空间中的设备需要与某个 Pod 进行通信,而该 Pod 未获得分配给运行 Pod 的 Amazon EC2 实例节点的主网络接口的主私有 IP 地址,则:

  • 节点必须部署在具有到公有子网中的 NAT 设备的路由的私有子网中。

  • 您需要使用以下命令在 CNI 插件 aws-node 守护进程集中启用外部 SNAT:

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

启用外部 SNAT 后,当流量以 VPC 外部的地址为目标时,CNI 插件不会将 Pod 的私有 IP 地址转换为分配给 Pod 在其上运行的 Amazon EC2 实例节点的主网络接口的主私有 IP 地址。从 Pod 到 Internet 的流量在外部与 NAT 设备的公有 IP 地址进行双向转换,并通过 Internet 网关路由到 Internet 和从 Internet 中向外路由,如下图所示。