

 **帮助改进此页面** 

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

# 为您的 Amazon EKS 集群创建 Amazon VPC
<a name="creating-a-vpc"></a>

您可以使用 Amazon Virtual Private Cloud（Amazon VPC）将 AWS 资源启动到您定义的虚拟网络中。此虚拟网络与您在自己的数据中心中运行的传统网络极为相似。但是，它带有使用 Amazon Web Services 的可扩展基础设施的优势。我们建议，在部署生产 Amazon EKS 集群之前，深入了解 Amazon VPC 服务。有关更多信息，请参阅[《Amazon VPC 用户指南》](https://docs.aws.amazon.com/vpc/latest/userguide/)。

Amazon EKS 集群、节点和 Kubernetes 资源均部署到 VPC 中。如果您想要将现有 VPC 与 Amazon EKS 一起使用，则该 VPC 必须满足 [查看 Amazon EKS 对 VPC 和子网的联网要求](network-reqs.md) 中所述的要求。本主题介绍如何使用 Amazon EKS 提供的 AWS CloudFormation 模板创建符合 Amazon EKS 要求的 VPC。部署模板后，您可以查看该模板创建的资源，以确切了解它创建了哪些资源以及这些资源的配置。如果使用混合节点，则 VPC 的路由表中必须包含本地网络的路由。有关混合节点联网要求的更多信息，请参阅[准备混合节点的联网](hybrid-nodes-networking.md)。

## 先决条件
<a name="_prerequisites"></a>

要为 Amazon EKS 创建 VPC，您必须拥有必要的 IAM 权限才能创建 Amazon VPC 资源。这些资源包括 VPC、子网、安全组、路由表和路由以及互联网和 NAT 网关。有关更多信息，请参阅《Amazon VPC 用户指南》中的[创建带有公有子网示例策略的 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-policy-examples.html#vpc-public-subnet-iam) 和[服务授权参考](https://docs.aws.amazon.com/service-authorization/latest/reference/reference.html)中的 [操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html#amazonec2-actions-as-permissions)的完整列表。

您可以创建带有公有子网和私有子网、仅公有子网或仅私有子网的 VPC。

## 公有子网和私有子网
<a name="_public_and_private_subnets"></a>

此 VPC 有两个公有子网和两个私有子网。公有子网的关联路由表具有指向互联网网关的路由。但是，私有子网的路由表没有指向互联网网关的路由。一个公有子网和一个私有子网部署到同一个可用区。其它公有子网和私有子网部署到同一 AWS 区域的另一个可用区。我们建议大多数部署使用此选项。

使用此选项，您可以将节点部署到私有子网。此选项允许 Kubernetes 将负载均衡器部署到公有子网，这些负载均衡器可以对在私有子网的节点上运行的容器组（pod）进行流量负载均衡。系统自动向部署到公有子网的节点分配公有 `IPv4` 地址，但公有 `IPv4` 地址不会分配给部署到私有子网的节点。

您还可以将 `IPv6` 地址分配给公有子网和私有子网中的节点。私有子网中的节点可以与集群和其他 AWS 服务通信。容器组（pod）可以通过使用 `IPv4` 地址的 NAT 网关或使用部署在各个可用区的 `IPv6` 地址的仅出站互联网网关与互联网通信。部署的安全组包含拒绝来自集群或节点以外的来源的所有入站流量但允许所有出站流量的规则。对子网进行标记，以便 Kubernetes 可以向它们部署负载均衡器。

1. 打开 [AWS CloudFormation 控制台](https://console.aws.amazon.com/cloudformation/)。

1. 从导航栏中，选择支持 Amazon EKS 的 AWS 区域。

1. 依次选择**创建堆栈**和**使用新资源（标准）**。

1. 在 **Prerequisite - Prepare template**（先决条件 - 准备模板）下，请确保选中 **Template is ready**（模板就绪），然后在 **Specify template**（指定模板）下选择 **Amazon S3 URL**。

1. 您可以创建仅支持 `IPv4` 的 VPC，或支持 `IPv4` 和 `IPv6` 的 VPC。请将以下 URL 之一粘贴到 **Amazon S3 URL** 下方的文本区域，然后选择 **Next**（下一步）：
   +  `IPv4` 

```
https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml
```
+  `IPv4` 和 `IPv6` 

```
https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-ipv6-vpc-public-private-subnets.yaml
```

1. 在 **Specify stack details**（指定堆栈详细信息）页面上，修改参数，然后选择 **Next**（下一步）。
   +  **堆栈名称**：为 AWS CloudFormation 堆栈选择堆栈名称。例如，可以使用上一步中使用的模板名称。名称只能包含字母数字字符（区分大小写）和连字符。该名称必须以字母数字字符开头，且不得超过 100 个字符。对于您在其中创建集群的 AWS 区域和 AWS 账户，该名称必须在其内具有唯一性。
   +  **VpcBlock**：为您的 VPC 选择 `IPv4` CIDR 范围。您部署的每个节点、容器组（pod）和负载均衡器都会分配有此块中的一个 `IPv4` 地址。默认 `IPv4` 值为大多数实现提供了足够的 IP 地址，但如果没有提供，那么您可以对其进行更改。有关更多信息，请参阅 Amazon VPC 用户指南中的 [VPC 和子网大小调整](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#VPC_Sizing)。您还可以在 VPC 创建后向其添加额外的 CIDR 块。如果您要创建 `IPv6` VPC，则系统从 Amazon 的 Global Unicast Address 空间自动为您分配 `IPv6` CIDR 范围。
   +  **PublicSubnet01Block**：指定公有子网 1 的 `IPv4` CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址，但如果没有提供，那么您可以对其进行更改。如果您要创建 `IPv6` VPC，则在模板中为您指定此区块。
   +  **PublicSubnet02Block**：指定公有子网 2 的 `IPv4` CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址，但如果没有提供，那么您可以对其进行更改。如果您要创建 `IPv6` VPC，则在模板中为您指定此区块。
   +  **PrivateSubnet01Block**：指定私有子网 1 的 `IPv4` CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址，但如果没有提供，那么您可以对其进行更改。如果您要创建 `IPv6` VPC，则在模板中为您指定此区块。
   +  **PrivateSubnet02Block**：指定私有子网 2 的 `IPv4` CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址，但如果没有提供，那么您可以对其进行更改。如果您要创建 `IPv6` VPC，则在模板中为您指定此区块。

1. （可选）在 **Configure stack options**（配置堆栈选项）页面上，为堆栈资源添加标签，然后选择 **Next**（下一步）。

1. 在 **Review**（查看）页面中，请选择 **Create stack**（创建堆栈）。

1. 创建堆栈后，在控制台中选中它，然后选择 **Outputs (输出)**。

1. 记录所创建 VPC 的 **VpcId**。在您创建和节点时需要此功能。

1. 记录已创建子网的 **SubnetIds**，以及您将其作为公有子网还是私有子网创建。在您创建和节点时至少需要其中的两个功能。

1. 如果您创建了 `IPv4` VPC，请跳过此步骤。如果您创建了 `IPv6` VPC，则必须为模板创建的公有子网启用自动分配 `IPv6` 地址选项。私有子网的该设置已启用。要启用该设置，请完成以下步骤：

   1. 通过 https://console.aws.amazon.com/vpc/ 打开 Amazon VPC 控制台。

   1. 请在左侧导航窗格中，选择 **Subnets**（子网） 

   1. 请选择其中一个公有子网（***stack-name*/SubnetPublic01** 或 ***stack-name*/SubnetPublic02**，包含 **public** 字样），然后依次选择**操作**、**编辑子网设置**。

   1. 请选中 **Enable auto-assign IPv6 address**（启用自动分配 IPv6 地址）复选框，然后选择 **Save**（保存）。

   1. 为另一个公有子网再次完成上述步骤。

## 仅公有子网
<a name="_only_public_subnets"></a>

此 VPC 有三个部署到 AWS 区域中的不同可用区的公有子网。所有节点都会自动分配公有 `IPv4` 地址，并且可以通过[互联网网关](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)发送和接收互联网流量。部署了[安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)，拒绝所有入站流量并允许所有出站流量。对子网进行标记，以便 Kubernetes 可以向它们部署负载均衡器。

1. 打开 [AWS CloudFormation 控制台](https://console.aws.amazon.com/cloudformation/)。

1. 从导航栏中，选择支持 Amazon EKS 的 AWS 区域。

1. 依次选择**创建堆栈**和**使用新资源（标准）**。

1. 在 **Prepare template**（准备模板）下，确保 **Template is ready**（模板已就绪）处于选中状态，然后在 **Template source**（模板源）下选择 **Amazon S3 URL**。

1. 将以下 URL 粘贴到 **Amazon S3 URL** 下方的文本区域，然后选择 **Next**（下一步）：

```
https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-sample.yaml
```

1. 在 **Specify Details**（指定详细信息）页面上，输入参数，然后选择 **Next**（下一步）。
   +  **堆栈名称**：为 AWS CloudFormation 堆栈选择堆栈名称。例如，您可以将其称为 *amazon-eks-vpc-sample*。名称只能包含字母数字字符（区分大小写）和连字符。该名称必须以字母数字字符开头，且不得超过 100 个字符。对于您在其中创建集群的 AWS 区域和 AWS 账户，该名称必须在其内具有唯一性。
   +  **VpcBlock**：为您的 VPC 选择 CIDR 块。您部署的每个节点、容器组（pod）和负载均衡器都会分配有此块中的一个 `IPv4` 地址。默认 `IPv4` 值为大多数实现提供了足够的 IP 地址，但如果没有提供，那么您可以对其进行更改。有关更多信息，请参阅 Amazon VPC 用户指南中的 [VPC 和子网大小调整](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#VPC_Sizing)。您还可以在 VPC 创建后向其添加额外的 CIDR 块。
   +  **Subnet01Block**：指定子网 1 的 CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址，但如果没有提供，那么您可以对其进行更改。
   +  **Subnet02Block**：指定子网 2 的 CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址，但如果没有提供，那么您可以对其进行更改。
   +  **Subnet03Block**：指定子网 3 的 CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址，但如果没有提供，那么您可以对其进行更改。

1. （可选）在 **Options (选项)** 页面上，为您的堆栈资源添加标签。选择**下一步**。

1. 在 **Review** 页面上，选择 **Create **。

1. 创建堆栈后，在控制台中选中它，然后选择 **Outputs (输出)**。

1. 记录所创建 VPC 的 **VpcId**。在您创建和节点时需要此功能。

1. 记录已创建的子网的 **SubnetIds**。在您创建和节点时至少需要其中的两个功能。

1. （可选）您部署到此 VPC 的任何集群都能够将私有 `IPv4` 地址分配给您的容器组（pod）和服务。如果想要将集群部署到此 VPC，以便将私有 `IPv6` 地址分配给您的容器组（pod）和服务，则必须对您的 VPC、子网、路由表和安全组进行更新。有关更多信息，请参阅 Amazon VPC 用户指南中的[将现有 VPC 从 IPv4 迁移到 IPv6](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6.html)。Amazon EKS 要求您的子网启用 `Auto-assign` `IPv6` 地址选项。该选项默认已禁用。

## 仅私有子网
<a name="_only_private_subnets"></a>

此 VPC 有三个部署到 AWS 区域中的不同可用区的私有子网。部署到子网的资源无法访问互联网，互联网也无法访问子网中的资源。该模板使用 AWS PrivateLink 为节点通常需要访问的几个 AWS 服务创建 [VPC 端点](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html)。如果您的节点需要出站互联网访问，您可以在创建 VPC 后在每个子网的可用区中添加公有 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。[安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)被创建的用于拒绝所有入站流量，但部署到子网的资源除外。安全组还允许所有出站流量。对子网进行标记，以便 Kubernetes 可以向它们部署内部负载均衡器。如果您正在使用此配置创建 VPC，请参阅 [部署具有有限互联网访问权限的私有集群](private-clusters.md) 以了解其它要求和注意事项。

1. 打开 [AWS CloudFormation 控制台](https://console.aws.amazon.com/cloudformation/)。

1. 从导航栏中，选择支持 Amazon EKS 的 AWS 区域。

1. 依次选择**创建堆栈**和**使用新资源（标准）**。

1. 在 **Prepare template**（准备模板）下，确保 **Template is ready**（模板已就绪）处于选中状态，然后在 **Template source**（模板源）下选择 **Amazon S3 URL**。

1. 将以下 URL 粘贴到 **Amazon S3 URL** 下方的文本区域，然后选择 **Next**（下一步）：

```
https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-fully-private-vpc.yaml
```

1. 在 **Specify Details**（指定详细信息）页面上，输入参数，然后选择 **Next**（下一步）。
   +  **堆栈名称**：为 AWS CloudFormation 堆栈选择堆栈名称。例如，您可以称之为 *amazon-eks-fully-private-vpc*。名称只能包含字母数字字符（区分大小写）和连字符。该名称必须以字母数字字符开头，且不得超过 100 个字符。对于您在其中创建集群的 AWS 区域和 AWS 账户，该名称必须在其内具有唯一性。
   +  **VpcBlock**：为您的 VPC 选择 CIDR 块。您部署的每个节点、容器组（pod）和负载均衡器都会分配有此块中的一个 `IPv4` 地址。默认 `IPv4` 值为大多数实现提供了足够的 IP 地址，但如果没有提供，那么您可以对其进行更改。有关更多信息，请参阅 Amazon VPC 用户指南中的 [VPC 和子网大小调整](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#VPC_Sizing)。您还可以在 VPC 创建后向其添加额外的 CIDR 块。
   +  **PrivateSubnet01Block**：指定子网 1 的 CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址，但如果没有提供，那么您可以对其进行更改。
   +  **PrivateSubnet02Block**：指定子网 2 的 CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址，但如果没有提供，那么您可以对其进行更改。
   +  **PrivateSubnet03Block**：指定子网 3 的 CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址，但如果没有提供，那么您可以对其进行更改。

1. （可选）在 **Options (选项)** 页面上，为您的堆栈资源添加标签。选择**下一步**。

1. 在 **Review** 页面上，选择 **Create **。

1. 创建堆栈后，在控制台中选中它，然后选择 **Outputs (输出)**。

1. 记录所创建 VPC 的 **VpcId**。在您创建和节点时需要此功能。

1. 记录已创建的子网的 **SubnetIds**。在您创建和节点时至少需要其中的两个功能。

1. （可选）您部署到此 VPC 的任何集群都能够将私有 `IPv4` 地址分配给您的容器组（pod）和服务。如果想要将集群部署到此 VPC，以便将私有 `IPv6` 地址分配给您的容器组（pod）和服务，则必须对您的 VPC、子网、路由表和安全组进行更新。有关更多信息，请参阅 Amazon VPC 用户指南中的[将现有 VPC 从 IPv4 迁移到 IPv6](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6.html)。Amazon EKS 要求您的子网启用 `Auto-assign IPv6` 地址选项（该选项默认为禁用）。