适用于 pods 的 SNAT - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

适用于 pods 的 SNAT

如果您使用 IPv6 系列部署集群,那么本主题中的信息不适用于您的集群,因为 IPv6 地址未进行网络转换。有关集群使用 IPv6 的详细信息,请参阅 教程:将 IPv6 地址分配给 pods 和 services

默认情况下,您的集群中的每个 pod 都从无类别域间路由(CIDR)块中分配到一个私有 IPv4 地址,该块与 pod 部署在其中的 VPC 关联。相同 VPC 中的 Pods 使用这些私有 IP 地址作为端点来相互通信。当 pod 与不在与您的 VPC 关联的 CIDR 块内的任何 IPv4 地址通信时,适用于 Kubernetes 的 Amazon VPC CNI 插件会将 pod's IPv4 地址转换为 pod 运行所在的节点的主弹性网络接口的主私有 IPv4 地址,默认为 *

由于此行为:

  • 只有当运行互联网资源的节点分配了公共弹性 IP 地址并且位于公共子网中时,您的 pods 才能与互联网资源通信。公有子网的关联路由表具有指向互联网网关的路由。我们建议尽可能将节点部署到私有子网。

  • 对于 1.8.0 之前的插件版本,如果网络或 VPC 中的资源使用 VPC 对等中转 VPCAmazon Direct Connect 连接到您的集群 VPC,则无法在辅助弹性网络接口后启动与您的容器组的通信。但是,您的容器组可以启动与这些资源的通信并接收其响应。

如果以下任一陈述在您的环境中成立,则使用以下命令更改默认配置。

  • 您在网络或 VPC 中有资源使用 VPC 对等中转 VPCAmazon Direct Connect 连接到您的集群 VPC,它们需要使用 IPv4 地址启动与 pods 的通信,并且您的插件版本早于 1.8.0

  • 您的容器组位于私有子网中,需要向互联网进行出站通信。子网具有通往 NAT 网关的路由。

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

*如果 pod's 规范包含 hostNetwork=true(默认值为 false),那么它的 IP 地址不会转换为其他地址。对于在您的集群上运行的 kube-proxy 和 Amazon VPC CNI plugin for Kubernetes pods,默认情况便是如此。对于这些 pods,IP 地址与节点的主 IP 地址相同,因此 pod's IP 地址未转换。有关的 pod's hostNetwork 设置的更多信息,请参阅 Kubernetes API 参考中的 PodSpec v1 核心