

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 为容器组（pod）启用出站互联网访问权限
<a name="external-snat"></a>

 **适用对象**：Linux `IPv4` Fargate 节点以及带有 Amazon EC2 实例的 Linux 节点

如果您使用 `IPv6` 系列部署集群，那么本主题中的信息不适用于您的集群，因为 `IPv6` 地址未进行网络转换。有关集群使用 `IPv6` 的详细信息，请参阅 [了解如何将 IPv6 地址分配给集群、容器组（pod）和服务](cni-ipv6.md)。

默认情况下，集群中的每个容器组（pod）都从无类别域间路由（CIDR）块中分配到一个[私有](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html#concepts-private-addresses) `IPv4` 地址，该块与容器组（pod）部署在其中的 VPC 关联。相同 VPC 中的容器组（pod）使用这些私有 IP 地址作为端点来相互通信。当容器组（pod）与不在与您 VPC 关联的 CIDR 块内的任何 `IPv4` 地址通信时，Amazon VPC CNI 插件（适用于 [Linux](https://github.com/aws/amazon-vpc-cni-k8s#amazon-vpc-cni-k8s) 或 [Windows](https://github.com/aws/amazon-vpc-cni-plugins/tree/master/plugins/vpc-bridge)）默认会将容器组（pod）的 `IPv4` 地址转换为容器组（pod）运行所在的节点的主[弹性网络接口](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#eni-basics)的主私有 `IPv4` 地址[\$1](#snat-exception)。

**注意**  
对于 Windows 节点，还有其他详细信息需要考虑。默认情况下，[适用于 Windows 的 VPC CNI 插件](https://github.com/aws/amazon-vpc-cni-plugins/tree/master/plugins/vpc-bridge)使用网络配置进行定义，该配置下 SNAT 不包括同一 VPC 内向目标发送的流量。这意味着内部 VPC 通信已禁用 SNAT，分配给容器组（pod）的 IP 地址可在 VPC 内路由。但是向 VPC 以外目标发送的流量会将源容器组（pod）IP 经 SNAT 处理到实例 ENI 的主 IP 地址。适用于 Windows 的此默认配置可确保容器组（pod）能像主机实例一样访问您 VPC 之外的网络。

由于此行为：
+ 只有当运行互联网资源的节点分配了[公有](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html#concepts-public-addresses)或[弹性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html) IP 地址并且位于[公有子网](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-basics)中时，您的容器组（pod）才能与互联网资源通信。公有子网的关联[路由表](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html)具有指向互联网网关的路由。我们建议尽可能将节点部署到私有子网。
+ 对于 `1.8.0` 之前的插件版本，如果网络或 VPC 中的资源使用 [VPC 对等](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)、[中转 VPC](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/transit-vpc-option.html) 或 [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 连接到您的集群 VPC，则无法在辅助弹性网络接口后启动与容器组（pod）的通信。但是，您的容器组（pod）可以启动与这些资源的通信并接收其响应。

如果以下任一陈述在您的环境中成立，则使用以下命令更改默认配置。
+ 网络或 VPC 中有资源使用 [VPC 对等](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)、[中转 VPC](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/transit-vpc-option.html) 或 [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 连接到您的集群 VPC，它们需要使用 `IPv4` 地址启动与容器组（pod）的通信，并且您的插件版本早于 `1.8.0`。
+ 您的容器组（pod）位于[私有子网](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-basics)中，需要向互联网进行出站通信。子网具有通往 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)的路由。

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

**注意**  
`AWS_VPC_K8S_CNI_EXTERNALSNAT` 和 `AWS_VPC_K8S_CNI_EXCLUDE_SNAT_CIDRS` CNI 配置变量不适用于 Windows 节点。Windows 不支持禁用 SNAT。至于从 SNAT 中排除 `IPv4` CIDR 列表，您可以通过在 Windows 引导脚本中指定 `ExcludedSnatCIDRs` 参数来定义。有关使用该参数的更多信息，请参阅 [引导脚本配置参数](eks-optimized-windows-ami.md#bootstrap-script-configuration-parameters)。

## 主机网络
<a name="snat-exception"></a>

\$1如果容器组（pod）规范包含 `hostNetwork=true`（默认值为 `false`），其 IP 地址就不会转换为其他地址。对于在集群上运行的 `kube-proxy` 和适用于 Kubernetes 的 Amazon VPC CNI 插件容器组（pod），默认情况便是如此。对于这些容器组（pod），IP 地址与节点的主 IP 地址相同，因此容器组（pod）IP 地址未转换。有关容器组（pod）`hostNetwork` 设置的更多信息，请参阅 Kubernetes API 参考中的 [PodSpec v1 core](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.35/#podspec-v1-core)。