本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
外部源网络地址转换 (SNAT)
VPC 内的通信(如 Pod 到 Pod)在私有 IP 地址之间是直接的,无需源网络地址转换 (SNAT)。当流量以 VPC 外部的地址为目标时,默认情况下,适用于 Kubernetes 的 Amazon VPC CNI 插件
-
使 Pod 能够与互联网进行双向通信。该节点必须位于公有子网中,并且向其主网络接口的主私有 IP 地址分配了公有或弹性 IP 地址。流量在公有或弹性 IP 地址之间进行转换,并通过 Internet 网关 路由到 Internet 或从 Internet 进行路由,如下图所示。
SNAT 是必需的,因为 Internet 网关只能在主私有地址与分配给运行 Pod 的 Amazon EC2 实例节点的主网络接口的公有或弹性 IP 地址之间进行转换。
-
阻止其他私有 IP 地址空间中的设备(例如,VPC 对等连接、中转 VPC 或 Direct 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 中向外路由,如下图所示。
