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

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

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

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

  • 使 Pod 能够与互联网进行双向通信。该节点必须位于公有子网并且有公有或者灵活应变分配给其主网络接口的主要私有 IP 地址的 IP 地址。流量在公共或弹性 IP 地址之间进行转换,并通过互联网网关,如以下图所示。

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

  • 防止其他私有 IP 地址空间中的设备(例如VPC 对等传输 VPC,或者Direct Connect)直接与如下 Pod 进行通信:未向此 Pod 分配 Amazon EC2 实例节点的主网络接口的主私有 IP 地址。

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

  • 该节点必须部署在具有通往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 地址转换为主私有 IP 地址(此地址分配给 Pod 正在其上运行的 Amazon EC2 实例节点的主网络接口)。从 Pod 到 Internet 的流量在外部与 NAT 设备的公有 IP 地址进行双向转换,并通过 Internet 网关路由到 Internet 和从 Internet 中向外路由,如下图所示。