为 Amazon EKS 集群创建 VPC - Amazon EKS

为 Amazon EKS 集群创建 VPC

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

Amazon EKS 集群、节点和 Kubernetes 资源均部署到 VPC 中。如果您想要将现有 VPC 与 Amazon EKS 一起使用,则该 VPC 必须满足 Amazon EKS VPC 和子网要求和注意事项 中所述的要求。本主题介绍如何使用 Amazon EKS 提供的 AWS CloudFormation 模板创建符合 Amazon EKS 要求的 VPC。部署模板后,您可以查看该模板创建的资源,以确切了解它创建了哪些资源以及这些资源的配置。

先决条件

要为 Amazon EKS 创建 VPC,您必须拥有必要的 IAM 权限才能创建 Amazon VPC 资源。这些资源包括 VPC、子网、安全组、路由表和路由以及互联网和 NAT 网关。有关更多信息,请参阅《Amazon VPC 用户指南》中的创建带有公有子网示例策略的 VPC 和《服务授权参考》中的 Amazon EC2 的操作、资源和条件键的完整列表。

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

Public and private subnets

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

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

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

要创建您的 VPC
  1. 打开 AWS CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

  2. 从导航栏中,选择一个支持 Amazon EKS 的 AWS 区域。

  3. 依次选择创建堆栈使用新资源(标准)

  4. Prerequisite - Prepare template(先决条件 - 准备模板)下,请确保选中 Template is ready(模板就绪),然后在 Specify template(指定模板)下选择 Amazon S3 URL

  5. 您可以创建仅支持 IPv4 的 VPC,或支持 IPv4IPv6 的 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
    • IPv4IPv6

      https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-ipv6-vpc-public-private-subnets.yaml
  6. Specify stack details(指定堆栈详细信息)页面上,修改参数,然后选择 Next(下一步)。

    • 堆栈名称:为 AWS CloudFormation 堆栈选择堆栈名称。例如,可以使用上一步中使用的模板名称。名称只能包含字母数字字符(区分大小写)和连字符。该名称必须以字母字符开头,且不得超过 100 个字符。

    • VpcBlock:为您的 VPC 选择 IPv4 CIDR 范围。您部署的每个节点、Pod 和负载均衡器都会分配有此块中一个 IPv4 地址。默认 IPv4 值为大多数实现提供了足够的 IP 地址,但如果没有提供,那么您可以对其进行更改。有关更多信息,请参阅 Amazon VPC 用户指南中的 VPC 和子网大小调整。您还可以在 VPC 创建后向其添加额外的 CIDR 块。如果您要创建 IPv6 VPC,系统将从 Amazon 的全局单播地址空间自动为您分配 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,将在模板中为您指定此块。

  7. (可选)在 Configure stack options(配置堆栈选项)页面上,为堆栈资源添加标签,然后选择 Next(下一步)。

  8. Review(查看)页面中,请选择 Create stack(创建堆栈)。

  9. 创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)

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

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

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

    1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

    2. 请在左侧导航窗格中,选择 Subnets(子网)

    3. 请选择其中一个公有子网(stack-name/SubnetPublic01stack-name/SubnetPublic02,包含 public 字样),然后依次选择 Actions(操作)、Edit subnet settings(编辑子网设置)。

    4. 选择 Enable auto-assign IPv6 address(启用自动分配地址)复选框,然后选择 Save(保存)。

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

Only public subnets

此 VPC 有三个部署到 AWS 区域 中的不同可用区的公有子网。所有节点都会自动分配公有 IPv4 地址,并且可以通过互联网网关发送和接收互联网流量。部署了安全组,拒绝所有入站流量并允许所有出站流量。对子网进行标记,以便 Kubernetes 可以向它们部署负载均衡器。

要创建您的 VPC
  1. 打开 AWS CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

  2. 从导航栏中,选择一个支持 Amazon EKS 的 AWS 区域。

  3. 依次选择创建堆栈使用新资源(标准)

  4. Prepare template(准备模板)下,确保 Template is ready(模板已就绪)处于选中状态,然后在 Template source(模板源)下选择 Amazon S3 URL

  5. 将以下 URL 粘贴到 Amazon S3 URL 下方的文本区域,然后选择 Next(下一步):

    https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-sample.yaml
  6. Specify Details(指定详细信息)页面上,输入参数,然后选择 Next(下一步)。

    • 堆栈名称:为 AWS CloudFormation 堆栈选择堆栈名称。例如,您可以将其命名为 amazon-eks-vpc-sample。名称只能包含字母数字字符(区分大小写)和连字符。该名称必须以字母字符开头,且不得超过 100 个字符。

    • VpcBlock:为您的 VPC 选择 CIDR 块。您部署的每个节点、Pod 和负载均衡器都会分配有此块中一个 IPv4 地址。默认 IPv4 值为大多数实现提供了足够的 IP 地址,但如果没有提供,那么您可以对其进行更改。有关更多信息,请参阅 Amazon VPC 用户指南中的 VPC 和子网大小调整。您还可以在 VPC 创建后向其添加额外的 CIDR 块。

    • Subnet01Block:指定子网 1 的 CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址,但如果没有提供,那么您可以对其进行更改。

    • Subnet02Block:指定子网 2 的 CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址,但如果没有提供,那么您可以对其进行更改。

    • Subnet03Block:指定子网 3 的 CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址,但如果没有提供,那么您可以对其进行更改。

  7. (可选)在 Options (选项) 页面上,为您的堆栈资源添加标签。选择下一步

  8. Review 页面上,选择 Create

  9. 创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)

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

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

  12. (可选)您部署到此 VPC 的任何集群都能够将私有 IPv4 地址分配给您的 Pods 和 services。如果想要将集群部署到此 VPC 以将私有 IPv6 地址分配给您的 Pods 和 services,则必须对您的 VPC、子网、路由表和安全组进行更新。有关更多信息,请参阅《Amazon VPC 用户指南》中的将现有 VPC 从 IPv4 迁移到 IPv6。Amazon EKS 要求您的子网启用 Auto-assign IPv6 地址选项。该选项默认已禁用。

Only private subnets

此 VPC 有三个部署到 AWS 区域 中的不同可用区的私有子网。部署到子网的资源无法访问互联网,互联网也无法访问子网中的资源。该模板使用 AWS PrivateLink 为节点通常需要访问的几个 AWS 服务 创建 VPC 端点。如果您的节点需要出站互联网访问,您可以在创建 VPC 后在每个子网的可用区中添加公有 NAT 网关安全组被创建的用于拒绝所有入站流量,但部署到子网的资源除外。安全组还允许所有出站流量。对子网进行标记,以便 Kubernetes 可以向它们部署内部负载均衡器。如果您正在使用此配置创建 VPC,请参阅 私有集群要求 以了解其他要求和考虑因素。

要创建您的 VPC
  1. 打开 AWS CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

  2. 从导航栏中,选择一个支持 Amazon EKS 的 AWS 区域。

  3. 依次选择创建堆栈使用新资源(标准)

  4. Prepare template(准备模板)下,确保 Template is ready(模板已就绪)处于选中状态,然后在 Template source(模板源)下选择 Amazon S3 URL

  5. 将以下 URL 粘贴到 Amazon S3 URL 下方的文本区域,然后选择 Next(下一步):

    https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-fully-private-vpc.yaml
  6. Specify Details(指定详细信息)页面上,输入参数,然后选择 Next(下一步)。

    • 堆栈名称:为 AWS CloudFormation 堆栈选择堆栈名称。例如,您可以将其命名为 amazon-eks-fully-private-vpc。名称只能包含字母数字字符(区分大小写)和连字符。该名称必须以字母字符开头,且不得超过 100 个字符。

    • VpcBlock:为您的 VPC 选择 CIDR 块。您部署的每个节点、Pod 和负载均衡器都会分配有此块中一个 IPv4 地址。默认 IPv4 值为大多数实现提供了足够的 IP 地址,但如果没有提供,那么您可以对其进行更改。有关更多信息,请参阅 Amazon VPC 用户指南中的 VPC 和子网大小调整。您还可以在 VPC 创建后向其添加额外的 CIDR 块。

    • PrivateSubnet01Block:指定子网 1 的 CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址,但如果没有提供,那么您可以对其进行更改。

    • PrivateSubnet02Block:指定子网 2 的 CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址,但如果没有提供,那么您可以对其进行更改。

    • PrivateSubnet03Block:指定子网 3 的 CIDR 块。原定设置值为大多数实现提供了足够的 IP 地址,但如果没有提供,那么您可以对其进行更改。

  7. (可选)在 Options (选项) 页面上,为您的堆栈资源添加标签。选择下一步

  8. Review 页面上,选择 Create

  9. 创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)

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

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

  12. (可选)您部署到此 VPC 的任何集群都能够将私有 IPv4 地址分配给您的 Pods 和 services。如果想要将集群部署到此 VPC 以将私有 IPv6 地址分配给您的 Pods 和 services,则必须对您的 VPC、子网、路由表和安全组进行更新。有关更多信息,请参阅《Amazon VPC 用户指南》中的将现有 VPC 从 IPv4 迁移到 IPv6。Amazon EKS 要求您的子网启用 Auto-assign IPv6 地址选项(该选项默认为禁用)。