适用于 pods 的 SNAT
如果您使用 IPv6 系列部署集群,那么本主题中的信息不适用于您的集群,因为 IPv6 地址未进行网络转换。有关集群使用 IPv6 的详细信息,请参阅 教程:将 IPv6 地址分配给 pods 和 services。
默认情况下,您的集群中的每个 pod 都从无类别域间路由(CIDR)块中分配到一个私有 IPv4 地址,该块与 pod 部署在其中的 VPC 关联。相同 VPC 中的 Pods 使用这些私有 IP 地址作为端点来相互通信。当 pod 与不在与您的 VPC 关联的 CIDR 块内的任何 IPv4 地址通信时,适用于 Kubernetes 的 Amazon VPC CNI 插件IPv4 地址转换为 pod 运行所在的节点的主弹性网络接口的主私有 IPv4 地址,默认为 *。
由于此行为:
如果以下任一陈述在您的环境中成立,则使用以下命令更改默认配置。
-
您在网络或 VPC 中有资源使用 VPC 对等、中转 VPC 或 Amazon Direct Connect 连接到您的集群 VPC,它们需要使用
IPv4地址启动与 pods 的通信,并且您的插件版本早于1.8.0。
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 核心