Amazon EKS VPC 和子网要求和注意事项 - Amazon EKS

Amazon EKS VPC 和子网要求和注意事项

在创建集群时,您将指定 VPC 以及位于不同可用区中的至少两个子网。本主题概述了 Amazon EKS 对于您用于集群的 VPC 和子网的特定要求和注意事项。如果您没有与 Amazon EKS 结合使用的 VPC,则可以使用 Amazon EKS 提供的 AWS CloudFormation 模板创建一个

VPC 要求和注意事项

在创建集群时,您指定的 VPC 必须满足以下要求和注意事项:

  • VPC 必须有足够数量的 IP 地址来供集群、任何节点和您想要创建的其他 Kubernetes 资源使用。如果要使用的 VPC 没有足够数量的 IP 地址,请尝试增加可用 IP 地址的数量。您可以通过关联其他无类别域间路由(CIDR)块与 VPC 来执行此操作。您可以在创建集群之前或之后将私有(RFC 1918)和公有(非 RFC 1918)CIDR 块与您的 VPC 关联。集群识别与 VPC 关联的 CIDR 块最多可能需要五个小时的时间。

    您可以通过将中转网关与共享服务 VPC 结合使用来节省 IP 地址的使用。有关更多信息,请参阅具有共享服务的隔离 VPC混合网络中的 Amazon EKS VPC 可路由 IP 地址保护模式

  • 如果您想让 Kubernetes 分配 IPv6 地址给 pods 和服务,请将 IPv6 CIDR 块与您的 VPC 关联。有关更多信息,请参阅《Amazon VPC 用户指南》中的IPv6 CIDR 块与您的 VPC 关联

  • VPC 必须具有 DNS 主机名和 DNS 解析支持。否则,节点无法注册到集群。有关更多信息,请参阅《Amazon VPC 用户指南》中的 VPC 的 DNS 属性

  • VPC 可能需要使用 AWS PrivateLink 的 VPC 节点。有关更多信息,请参阅子网要求和注意事项

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

密钥
kubernetes.io/cluster/cluster-name owned

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

子网要求和注意事项

在创建集群时,Amazon EKS 将在您指定的子网中创建 2–4 个弹性网络接口。这些网络接口可实现集群和 VPC 之间的通信。这些网络接口还支持 Kubernetes 功能,例如 kubectl execkubectl logs。每个 Amazon EKS 创建的网络接口的描述中都有 Amazon EKS cluster name

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

您在创建集群时指定的子网必须满足以下要求:

  • 每个子网必须至少有六个 IP 地址以供 Amazon EKS 使用。但是,我们建议至少使用 16 个 IP 地址。

  • 子网不能驻留在 AWS Outposts、AWS Wavelength 或 AWS 本地区域中。但是,如果您的 VPC 中有这些子网,则可以向这些类型的子网部署自行管理的节点和 Kubernetes 资源。

  • 子网必须使用基于 IP 地址的命名。Amazon EKS 不支持 Amazon EC2 基于资源的名称

  • 子网可以是公有子网或私有子网。但是,如果可能,我们建议您指定私有子网。公有子网是指包含路由表的子网,其中包含指向互联网网关的路由,而私有子网是指具有一个其中不包含指向互联网网关的路由的路由表的子网。

您可以将节点和 Kubernetes 资源部署到您在创建集群时指定的相同子网。但是,这并不是必要的。这是因为,您还可以将节点和 Kubernetes 资源部署到您在创建集群时未指定的子网。如果您将节点部署到不同的子网,Amazon EKS 不会在这些子网中创建集群网络接口。您向其中部署节点和 Kubernetes 资源的任何子网必须满足以下要求:

  • 子网必须有足够的可用 IP 地址才能将所有节点和 Kubernetes 资源部署到其中。

  • 子网必须使用基于 IP 地址的命名。Amazon EKS 不支持 Amazon EC2 基于资源的名称

  • 如果您想让 Kubernetes 分配 IPv6 地址到 pods 和服务,您必须拥有一个 IPv6 CIDR 块和一个与您的子网相关联的 IPv4 CIDR 块。有关更多信息,请参阅《Amazon VPC 用户指南》中的IPv6 CIDR 块与您的子网关联。与子网关联的路由表必须包含到 IPv4IPv6 地址的路由。有关更多信息,请参阅《Amazon VPC 用户指南》中的路由。容器组(pod)只分配了 IPv6 地址。但是,Amazon EKS 为您的集群和您的节点创建的网络接口被分配了 IPv4IPv6 地址。

  • 如果您需要从互联网入站访问您的 pods,请确保至少有一个公有子网具有足够的可用 IP 地址,以便将负载均衡器和入口部署到其中。您可以将负载均衡器部署到公有子网。负载均衡器可以对私有或公有子网中的 pods 进行负载均衡。我们建议尽可能将节点部署到私有子网。

  • 如果您计划将节点部署到公有子网,则子网必须自动分配 IPv4 公有地址或 IPv6 地址。如果将节点部署到具有关联的 IPv6 CIDR 块的私有子网,私有子网还必须自动分配 IPv6 地址。如果您使用 Amazon EKS AWS CloudFormation 模板在 2020 年 3 月 26 日之后部署您的 VPC,此设置已启用。如果您在此日期之前使用模板部署 VPC,或者您使用自己的 VPC,则必须手动启用此设置。有关更多信息,请参阅《Amazon VPC 用户指南》中的修改您的子网的公有 IPv4 寻址属性修改您的子网的 IPv6 寻址属性

  • 如果您将节点部署到的子网是私有子网,且其路由表不包含到网络地址转换(NAT)设备IPv4)或仅限出口的网关IPv6)的路由,则添加使用 AWS PrivateLink 的 VPC 端点到您的 VPC。您的节点和 pods 需要与之通信的所有 AWS 服务 都需要 VPC 端点。示例包括 Amazon ECR、Elastic Load Balancing、Amazon CloudWatch、AWS Security Token Service 和 Amazon Simple Storage Service(Amazon S3)。端点必须包括节点所在的子网。并非所有 AWS 服务 都支持 VPC 端点。有关更多信息,请参阅什么是 AWS PrivateLink?与 AWS PrivateLink 集成的 AWS 服务。有关更多 Amazon EKS 要求的列表,请参阅 私有集群要求

  • 如果要将负载均衡器部署到子网,则子网必须具有以下标签:

    • 私有子网

      密钥
      kubernetes.io/role/internal-elb 1
    • 公有子网

      密钥
      kubernetes.io/role/elb 1

当创建版本为 1.18 和更早版本的 Kubernetes 集群时,Amazon EKS 会向您在创建集群时指定的所有子网添加以下标签。

密钥
kubernetes.io/cluster/cluster-name shared

当您创建 1.19 版本和更高版本的 Kubernetes 集群时,Amazon EKS 不会将标签添加到您的子网中。如果在早于 1.19 版本的集群所用的子网上存在标签,而且您已将集群更新到 1.19 或更高版本,则不会从子网中删除该标签。但是,在更新到 1.19 完成后,您可以在不中断服务的情况下将其删除。但如果您使用版本 2.1.1 或更早版本的 AWS Load Balancer Controller,您无法删除标签。这些版本的 AWS 负载均衡器控制器还需要此标签。

如果您使用 eksctl 或者任一 Amazon EKS AWS CloudFormation VPC 模板部署了 VPC,则以下情况适用:

  • 2020 年 3 月 26 日或之后 – 公有子网将公有 IPv4 地址自动分配给部署到公有子网的新节点。

  • 2020 年 3 月 26 之前 – 公有子网不会将公有 IPv4 地址自动分配给部署到公有子网的新节点。

此更改通过以下方式影响部署到公有子网的新节点组: