

 **帮助改进此页面** 

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

# 查看 Amazon EKS 对 VPC 和子网的联网要求
<a name="network-reqs"></a>

在创建集群时，您将指定 [VPC](https://docs.aws.amazon.com/vpc/latest/userguide/configure-your-vpc.html) 以及位于不同可用区中的至少两个子网。本主题概述了 Amazon EKS 对于您用于集群的 VPC 和子网的特定要求和注意事项。如果您没有要用于 Amazon EKS 的 VPC，请参阅[为您的 Amazon EKS 集群创建 Amazon VPC](creating-a-vpc.md)。如果您要在 AWS Outposts 上创建本地或扩展集群，请参阅[为 AWS Outposts 上的 Amazon EKS 集群创建 VPC 和子网](eks-outposts-vpc-subnet-requirements.md)而不是本主题。本主题中的内容适用于具有混合节点的 Amazon EKS 集群。有关混合节点的其他联网要求，请参阅[准备混合节点的联网](hybrid-nodes-networking.md)。

## VPC 要求和注意事项
<a name="network-requirements-vpc"></a>

在创建集群时，您指定的 VPC 必须满足以下要求和注意事项：
+ VPC 必须有足够数量的 IP 地址来供集群、任何节点和您想要创建的其他 Kubernetes 资源使用。如果要使用的 VPC 没有足够数量的 IP 地址，请尝试增加可用 IP 地址的数量。

  为此，您可以更新集群以更改该集群使用的子网和安全组。您可以从 AWS 管理控制台、AWS CLI 的最新版本、AWS CloudFormation 以及 `eksctl` 版本 `v0.164.0-rc.0` 或更高版本进行更新。您可能需要执行此操作，为子网提供更多可用 IP 地址，以便成功升级集群版本。
**重要**  
您添加的所有子网均必须位于与创建集群时最初提供的相同一组可用区中。新子网必须满足所有其他要求，例如，它们必须有足够的 IP 地址。  
例如，假设您创建一个集群并指定四个子网。按照您指定的顺序，第一个子网位于 `us-west-2a` 可用区中，第二个和第三个子网位于 `us-west-2b` 可用区中，第四个子网位于 `us-west-2c` 可用区中。如果要更改子网，则必须在三个可用区中各提供至少一个子网，并且这些子网必须与原始子网位于同一个 VPC 中。

  如果您需要的 IP 地址多于 VPC 中的 CIDR 块，则可以通过[将其他无类别域间路由（CIDR）块与您的 VPC 关联](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#add-ipv4-cidr)来添加其他 CIDR 块。您可以在创建集群之前或之后将私有 (RFC 1918) 和公有（非 RFC 1918）CIDR 块关联到您的 VPC。

  添加新的 CIDR 块后，您可以立即添加使用该 CIDR 块的节点。但是，由于控制面板仅在协调完成后才会识别新的 CIDR 块，因此集群最多可能需要一个小时才能识别与 VPC 关联的 CIDR 块。然后，您可以对新 CIDR 数据块中的节点和容器组（pod）运行 `kubectl attach`、`kubectl cp`、`kubectl exec`、`kubectl logs` 和 `kubectl port-forward` 命令（这些命令使用 `kubelet API`）。此外，如果您有作为 Webhook 后端运行的容器组（pod），则必须等待控制面板协调完成。
+ 通过 Transit Gateway、VPC 对等连接或其他联网配置将 EKS 集群连接到其他 VPC 时，请避免 IP 地址范围重叠。当 EKS 集群的服务 CIDR 与所连接 VPC 的 CIDR 重叠时，就会发生 CIDR 冲突。在这些情况下，ServiceIP 地址优先于具有相同 IP 地址的已连接 VPC 中的资源，但流量路由可能会变得不可预测，并且应用程序可能无法连接到预期资源。

  为避免 CIDR 冲突，请确保您的 EKS 服务 CIDR 不与任何已连接 VPC CIDR 重叠，并维护所有 CIDR 分配的集中记录。如果您遇到 CIDR 重叠，您可以将中转网关与共享服务 VPC 结合使用。有关更多信息，请参阅[具有共享服务的隔离 VPC](https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-isolated-shared.html) 和[混合网络中的 Amazon EKS VPC 可路由 IP 地址保护模式](https://aws.amazon.com/blogs/containers/eks-vpc-routable-ip-address-conservation)。另请参阅《EKS Best Practices Guide》中 [VPC and Subnet Considerations](https://docs.aws.amazon.com/eks/latest/best-practices/subnets.html) 页面的“Communication across VPCs”部分。
+ 如果想让 Kubernetes 分配 `IPv6` 地址给容器组（pod）和服务，请将 `IPv6` CIDR 块与您的 VPC 关联。有关更多信息，请参阅 Amazon VPC 用户指南中的[关联 IPv6 CIDR 块与 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#vpc-associate-ipv6-cidr)。不能将 `IPv6` 地址用于在混合节点上运行的容器组和服务，也不能将混合节点用于配置了 `IPv6` IP 地址系列的集群。
+ VPC 必须具有 `DNS` 主机名和 `DNS` 解析支持。否则，节点无法注册到集群。有关更多信息，请参阅《Amazon VPC 用户指南》中的 [VPC 的 DNS 属性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html)。
+ VPC 可能需要使用 AWS PrivateLink 的 VPC 节点。有关更多信息，请参阅 [子网要求和注意事项](#network-requirements-subnets)。

如果您使用 Kubernetes `1.14` 或更早版本创建了集群，Amazon EKS 将以下标签添加到您的 VPC 中：


| 键 | 值 | 
| --- | --- | 
|   `kubernetes.io/cluster/my-cluster `   |   `owned`   | 

此标签仅由 Amazon EKS 使用。您可以在不影响服务的情况下删除标签。它不适用于版本 `1.15` 或更高版本的集群。

## 子网要求和注意事项
<a name="network-requirements-subnets"></a>

在创建集群时，Amazon EKS 将在您指定的子网中创建 2–4 个[弹性网络接口](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。这些网络接口可实现集群和 VPC 之间的通信。这些网络接口还支持使用 `kubelet API` 的 Kubernetes 功能。与 `kubelet` API 的连接用于 `kubectl attach`、`kubectl cp`、`kubectl exec`、`kubectl logs` 和 `kubectl port-forward` 命令中。每个 Amazon EKS 创建的网络接口的描述中都有 `Amazon EKS cluster-name ` 文本。

当您创建集群时，Amazon EKS 可以在您指定的任何子网中创建其网络接口。创建集群后，您可以更改 Amazon EKS 在哪些子网中创建其网络接口。当您更新集群的 Kubernetes 版本时，Amazon EKS 会删除它创建的原始网络接口，然后创建新的网络接口。这些网络接口可以在与原始网络接口相同的子网中创建，也可以在与原始网络接口不同的子网中创建。要控制在哪些子网中创建网络接口，可以在创建集群时将指定的子网数限制为只有两个子网，或者在创建集群后更新子网。

### 集群的子网要求
<a name="cluster-subnets"></a>

您在创建或更新集群时指定的[子网](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-types)必须满足以下要求：
+ 每个子网必须至少有六个 IP 地址以供 Amazon EKS 使用。但是，我们建议至少使用 16 个 IP 地址。
+ 子网必须至少位于两个不同的可用区。
+ 子网不能驻留在 AWS Outposts 或 AWS Wavelength 中。但是，如果您的 VPC 中有这些子网，则可以在这些类型的子网中部署自行管理的节点和 Kubernetes 资源。有关自主管理型节点的更多信息，请参阅[使用自行管理型节点来自行维护节点](worker.md)。
+ 子网可以是公有子网或私有子网。但是，如果可能，我们建议您指定私有子网。公有子网是指包含路由表的子网，这个路由表中包含指向[互联网网关](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)的路由，而私有子网是指具有一个其中不包含指向互联网网关的路由的路由表的子网。
+ 子网不能位于以下可用区中：    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/eks/latest/userguide/network-reqs.html)

### 按组件划分的 IP 地址系列使用情况
<a name="network-requirements-ip-table"></a>

下表包含 Amazon EKS 的每个组件所使用的 IP 地址系列。您可以使用网络地址转换（NAT）或其他兼容性系统，从具有表条目“No”值的系列中的源 IP 地址连接到这些组件。

根据集群的 IP 系列 (`ipFamily`) 设置，功能可能会有所不同。此设置会更改 Kubernetes 分配给服务的 CIDR 块所使用的 IP 地址类型。设置值为 IPv4 的集群被称为 *IPv4 集群*，设置值为 IPv6 的集群被称为 *IPv6 集群*。


| 组件 | IPv4 地址 | IPv6 地址 | 双堆栈地址 | 
| --- | --- | --- | --- | 
|  EKS API 公用端点  |  是 1,3   |  是 1,3   |  是 1,3   | 
|  EKS API VPC 端点  |  是  |  否  |  否  | 
|  EKS Auth API 公有端点（EKS 容器组身份）  |  是1   |  是1   |  是1   | 
|  EKS Auth API VPC 端点（EKS 容器组身份）  |  是1   |  是1   |  是1   | 
|   `IPv4` Kubernetes 集群公有端点 2   |  是  |  否  |  否  | 
|   `IPv4` Kubernetes 集群私有端点 2   |  是  |  否  |  否  | 
|   `IPv6` Kubernetes 集群公有端点 2   |  是1,4   |  是1,4   |  是4   | 
|   `IPv6` Kubernetes 集群私有端点 2   |  是1,4   |  是1,4   |  是4   | 
|  Kubernetes 集群子网  |  是2   |  否  |  是2   | 
|  节点主 IP 地址  |  是2   |  否  |  是2   | 
|  服务 IP 地址的集群 CIDR 范围  |  是2   |  是2   |  否  | 
|  来自 VPC CNI 的容器组（pod）IP 地址  |  是2   |  是2   |  否  | 
|  IRSA OIDC 发布者 URL  |  是 1,3   |  是 1,3   |  是 1,3   | 

**注意**  
 1 端点是双堆栈，同时包含 `IPv4` 和 `IPv6` 地址。AWS 外部的应用程序、集群的节点以及集群内的容器组（pod）可以通过 `IPv4` 或 `IPv6` 到达此端点。  
 2在创建集群时，您可以在集群的 IP 系列 (`ipFamily`) 设置中的 `IPv4` 集群和 `IPv6` 集群之间进行选择，这是无法更改的。相反，在创建另一个集群并迁移工作负载时，您必须选择不同的设置。  
 3 双栈端点已于 2024 年 8 月推出。要将双堆栈端点与 AWS CLI 结合使用，请参阅《AWS SDK 和工具参考指南》**中的[双堆栈和 FIPS 端点](https://docs.aws.amazon.com/sdkref/latest/guide/feature-endpoints.html)配置。以下列出了新的端点：  

 **EKS API 公用端点**   
 `eks.region.api.aws` 

 **IRSA OIDC 发布者 URL**   
 `oidc-eks.region.api.aws` 
 4 双堆栈集群端点已于 2024 年 10 月推出。EKS 为在此日期之后创建并在集群的 IP 系列（ipFamily）设置中选择 `IPv6` 的新集群创建以下端点：  

 **EKS 集群公有/私有端点**   
 `eks-cluster.region.api.aws` 

### 节点的子网要求
<a name="node-subnet-reqs"></a>

您可以将节点和 Kubernetes 资源部署到您在创建集群时指定的相同子网。但是，这并不是必要的。这是因为，您还可以将节点和 Kubernetes 资源部署到您在创建集群时未指定的子网。如果您将节点部署到不同的子网，Amazon EKS 不会在这些子网中创建集群网络接口。您向其中部署节点和 Kubernetes 资源的任何子网必须满足以下要求：
+ 子网必须有足够的可用 IP 地址才能将所有节点和 Kubernetes 资源部署到其中。
+ 如果想让 Kubernetes 分配 `IPv6` 地址到容器组（pod）和服务，您必须拥有与子网关联的一个 `IPv6` CIDR 块和一个 `IPv4` CIDR 块。有关更多信息，请参阅《Amazon VPC 用户指南》中的[将 IPv6 CIDR 块与您的子网关联](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-subnets.html#subnet-associate-ipv6-cidr)。与子网关联的路由表必须包含到 `IPv4` 和 `IPv6` 地址的路由。有关更多信息，请参阅《Amazon VPC 用户指南》中的[路由](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html#route-table-routes)。容器组（pod）只分配了 `IPv6` 地址。但是，Amazon EKS 为您的集群和您的节点创建的网络接口被分配了 `IPv4` 和 `IPv6` 地址。
+ 如果您需要从互联网入站访问自己的容器组（pod），请确保至少有一个公有子网，且该公有子网具有足够的可用 IP 地址，以便将负载均衡器和入口部署到其中。您可以将负载均衡器部署到公有子网。负载均衡器可以对私有或公有子网中的容器组（pod）进行负载均衡。我们建议尽可能将节点部署到私有子网。
+ 如果您计划将节点部署到公有子网，则子网必须自动分配 `IPv4` 公有地址或 `IPv6` 地址。如果将节点部署到具有关联的 `IPv6` CIDR 块的私有子网，私有子网还必须自动分配 `IPv6` 地址。如果在 2020 年 3 月 26 日之后使用 Amazon EKS 提供的 AWS CloudFormation 模板部署 VPC，则此设置已经启用。如果您在此日期之前使用模板部署 VPC，或者您使用自己的 VPC，则必须手动启用此设置。有关模板的信息，请参阅[为您的 Amazon EKS 集群创建 Amazon VPC](creating-a-vpc.md)。有关更多信息，请参阅 [Amazon VPC 用户指南](https://docs.aws.amazon.com/vpc/latest/userguide/)中的[修改子网的公有 IPv4 寻址属性](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-subnets.html#subnet-public-ip)和[修改子网的 IPv6 寻址属性](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-subnets.html#subnet-ipv6)。
+ 如果您将节点部署到的子网是私有子网，且其路由表不包含到网络地址转换[（NAT）设备](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat.html) (`IPv4`) 或[仅限出口的网关](https://docs.aws.amazon.com/vpc/latest/userguide/egress-only-internet-gateway.html) (`IPv6`) 的路由，则添加使用 AWS PrivateLink 的 VPC 端点到您的 VPC。节点和容器组（pod）要通信的所有 AWS 服务都需要 VPC 端点。示例包括 Amazon ECR、Elastic Load Balancing、Amazon CloudWatch、AWS Security Token Service 和 Amazon Simple Storage Service（Amazon S3）。端点必须包括节点所在的子网。并非所有 AWS 服务都支持 VPC 端点。有关更多信息，请参阅[什么是 AWS PrivateLink？](https://docs.aws.amazon.com/vpc/latest/privatelink/what-is-privatelink.html)和[与 AWS PrivateLink 集成的 AWS 服务](https://docs.aws.amazon.com/vpc/latest/privatelink/aws-services-privatelink-support.html)。有关更多 Amazon EKS 要求的列表，请参阅 [部署具有有限互联网访问权限的私有集群](private-clusters.md)。
+ 如果要将负载均衡器部署到子网，则子网必须具有以下标签：
  + 私有子网    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/eks/latest/userguide/network-reqs.html)
  + 公有子网    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/eks/latest/userguide/network-reqs.html)

在创建 `1.18` 及更低版本的 Kubernetes 集群时，Amazon EKS 会将以下标签添加到指定的所有子网。


| 键 | 值 | 
| --- | --- | 
|   `kubernetes.io/cluster/my-cluster `   |   `shared`   | 

在创建新 Kubernetes 集群时，Amazon EKS 不会将该标签添加到子网。如果标签位于以前版本低于 `1.19` 的集群使用的子网上，则当该集群更新为较新版本时，不会自动从子网上移除该标签。版本 `2.1.1` 或更低版本的 AWS 负载均衡器控制器需要此标签。如果您使用的是较新版本的负载均衡器控制器，则可以删除该标签，而不会中断您的服务。有关此控制器的更多信息,请参阅[使用 AWS 负载均衡器控制器路由互联网流量](aws-load-balancer-controller.md)。

如果您使用 `eksctl` 或者任一 Amazon EKS AWS CloudFormation VPC 模板部署了 VPC，则以下情况适用：
+  **2020 年 3 月 26 日或之后** – 公有子网将公有 `IPv4` 地址自动分配给部署到公有子网的新节点。
+  **2020 年 3 月 26 之前** – 公有子网不会将公有 `IPv4` 地址自动分配给部署到公有子网的新节点。

此更改通过以下方式影响部署到公有子网的新节点组：
+  **[托管节点组](create-managed-node-group.md)** – 如果节点组在 2020 年 4 月 22 日或之后部署到公有子网，则该公有子网必须启用自动分配公有 IP 地址。有关更多信息，请参阅[修改子网的公有 IPv4 寻址属性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip)。
+  **[Linux](launch-workers.md)、[Windows](launch-windows-workers.md) 或 [Arm](eks-optimized-ami.md#arm-ami) 自行管理节点组** – 如果节点组在 2020 年 3 月 26 日或之后部署到公有子网，则该公有子网必须启用自动分配公有 IP 地址。或者，节点必须使用公有 IP 地址启动。有关更多信息，请参阅[修改子网的公有 IPv4 寻址属性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip)或[在实例启动期间分配公有 IPv4 地址](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#vpc-public-ip)。

## 共享子网要求和注意事项
<a name="network-requirements-shared"></a>

您可以使用 *VPC 共享*与同一 AWS Organizations 中的其它 AWS 账户共享子网。您可以在共享子网中创建 Amazon EKS 集群，但要注意以下几点：
+ VPC 子网的拥有者必须与参与者账户共享一个子网，该账户才能在其中创建 Amazon EKS 集群。
+ 您不能使用 VPC 的默认安全组启动资源，因为此安全组属于拥有者。此外，参与者无法使用其他参与者或拥有者拥有的安全组启动资源。
+ 在共享子网中，参与者和拥有者分别控制各自账户中的安全组。子网拥有者可以看到参与者创建的安全组，但不能对其执行任何操作。如果子网拥有者想要删除或修改安全组，则创建安全组的参与者必须执行该操作。
+ 如果集群是由参与者创建的，则要注意以下几点：
  + 必须在该账户中创建集群 IAM 角色和节点 IAM 角色。有关更多信息，请参阅[Amazon EKS 集群 IAM 角色](cluster-iam-role.md)和[Amazon EKS 节点 IAM 角色](create-node-role.md)。
  + 所有节点必须由同一个参与者创建，包括托管节点组。
+ 共享 VPC 拥有者无法查看、更新或删除参与者在共享子网中创建的集群。这是对每个账户具有不同访问权限的 VPC 资源的补充。有关更多信息，请参阅 *Amazon VPC 用户指南*中的[拥有者和参与者的责任和权限](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html#vpc-share-limitations)。
+ 如果您使用适用于 Kubernetes 的 Amazon VPC CNI 插件的*自定义网络*功能，则需要使用拥有者账户中列出的可用区 ID 映射来创建每个 `ENIConfig`。有关更多信息，请参阅 [使用自定义网络在备用子网中部署容器组（pod）](cni-custom-network.md)。

有关 VPC 子网共享的更多信息，请参阅 *Amazon VPC 用户指南*中的[与其他账户共享 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-sharing.html#vpc-share-limitations)。