集群 VPC 注意事项 - Amazon EKS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

集群 VPC 注意事项

Amazon EKS 建议在带有公有子网和私有子网的 VPC 中运行集群,以便 Kubernetes 可以在公有子网中创建公有负载均衡器,从而将流量负载平衡到在私有子网中的节点上运行的 Pod。但是,不需要此配置。您可以在仅具有私有子网或仅公有子网的 VPC 中运行集群,具体取决于您的网络和安全要求。有关部署到仅具有私有子网的 VPC 的集群的更多信息,请参阅私有集群

创建 Amazon EKS 集群时,您可以指定 Amazon EKS 可以放置弹性网络接口的 VPC 子网。Amazon EKS 至少要求在两个可用区中设置子网,并跨这些子网创建多达四个网络接口,以便于控制平面与节点的通信。此通信渠道支持 kubectl execkubectl logs 等 Kubernetes 功能。Amazon EKS 创建集群安全组,且您在创建集群时指定的任何其他安全组将应用到这些网络接口。每个亚马逊 EKS 创建的网络接口都有亚马逊 EKS<cluster name>(在描述中)。

请确保在集群创建过程中指定的子网对于 Amazon EKS 创建的网络接口具有足够的可用 IP 地址。我们建议创建小型(/28),Amazon EKS 专用子网创建了网络接口,并且仅将这些子网指定为集群创建的一部分。其他资源(如节点和负载平衡器)应在与创建集群期间指定的子网不同的子网中启动。

重要
  • 节点和负载均衡器可以在集群 VPC 的任何子网中启动,包括在集群创建期间未向 Amazon EKS 注册的子网。子网不要求节点有任何标签。要使 Kubernetes 负载平衡自动发现工作,必须按照子网添加标签

  • 创建集群后,无法更改与群集关联的子网。如果您需要准确控制 Amazon EKS 创建的网络接口放置在哪些子网中,则在群集创建期间仅指定两个子网,每个子网位于不同的可用区域中。

  • 存在一个已知问题,即 Amazon EKS 无法与子网中启动的节点通信,首次创建集群后添加到 VPC 的其他 CIDR 块。如果您遇到此问题,请提交支持票证,以便 Amazon EKS 可以手动更新您的集群,以识别添加到 VPC 中的其他 CIDR 块。

  • 请勿在AmazonOutposts,AmazonWavelength,或Amazon创建集群时的本地区域。

VPC 必须具有 DNS 主机名和 DNS 解析支持,否则您的节点无法向集群注册。有关更多信息,请参阅 。在您的 VPC 中使用 DNS(在 Amazon VPC 用户指南 中)。

VPC IP 寻址

节点必须能够与控制层面和其他Amazon服务。如果您的节点部署在私有子网中,则该子网必须满足以下要求之一:

  • 具有一个默认路由到NAT 网关。必须向 NAT 网关分配一个公有 IP 地址,以便为节点提供 Internet 访问。

  • 配置了必要的设置和要求私有集群

如果自行管理的节点部署到公有子网,则必须将子网配置为自动分配公有 IP 地址。否则,您的节点实例必须在启动时向其分配一个公有 IP 地址。有关更多信息,请参阅 。在实例启动期间分配公有 IPv4 地址(在 Amazon VPC 用户指南 中)。如果托管节点部署到公有子网,则必须将子网配置为自动分配公有 IP 地址。如果子网未配置为自动分配公有 IP 地址,则不会为节点分配公有 IP 地址。使用以下命令确定您的公有子网是否配置为自动分配公有 IP 地址。将替换为<example values>(包括<>)与您自己的值。

aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=<VPC-ID>" | grep 'SubnetId\|MapPublicIpOnLaunch'

输出

"MapPublicIpOnLaunch": <false>,"SubnetId": "<subnet-aaaaaaaaaaaaaaaaa>","MapPublicIpOnLaunch": <false>,"SubnetId": "<subnet-bbbbbbbbbbbbbbbbb>",

对于已将 MapPublicIpOnLaunch 设置为 false 的任何子网 ,请将设置更改为 true

aws ec2 modify-subnet-attribute --map-public-ip-on-launch --subnet-id <subnet-aaaaaaaaaaaaaaaaa>
重要

如果您使用Amazon EKSAmazon Amazon CloudFormation模板在 2020 年 3 月 26 日之前部署 VPC,则需要更改您的公有子网的设置。

您可以在用于 Amazon EKS 集群的 VPC 内定义私有 (RFC 1918) 和公有(非 RFC 1918)无类域间路由 (CIDR) 范围。有关更多信息,请参阅 。向 VPC 中添加 IPv4 CIDR 块(在 Amazon VPC 用户指南 中)。为 VPC 和子网选择 CIDR 块时,请确保这些块包含足够的 IP 地址,用于计划部署的所有 Amazon EC2 节点和容器。您的每个容器应至少有一个 IP 地址。您可以通过使用共享服务 VPC 实现传输网关来节省 IP 地址的使用。有关更多信息,请参阅 。具有共享服务的隔离 VPC混合网络中的 Amazon EKS VPC 可路由 IP 地址保护模式

子网添加标签

对于 1.18 及更早版本的集群,Amazon EKS 会将以下标签添加到集群创建过程中传入的所有子网中。在创建 1.19 集群时,Amazon EKS 不会将标签添加到传入的子网中。如果标记存在于由在 1.19 之前版本上创建的群集使用的子网上,并且您将集群更新到 1.19,则不会从子网中删除该标记。

  • 密钥kubernetes.io/cluster/<cluster-name>

  • shared

除了使用自动预配的弹性负载均衡器所需的子网标签之外,您还可以选择使用此标记来控制弹性负载均衡器的置备位置。有关负载均衡器子网标记的更多信息,请参阅Amazon EKS 上的 Application Load BalancingAmazon EKS 上的网络负载均衡

VPC 标记要求

如果您创建了 1.14 或更早版本的 Amazon EKS 集群,Amazon EKS 会通过以下方式标记包含您指定的子网的 VPC:

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

Amazon EKS 不需要此标签,也不由 Amazon EKS 为 1.15 或更高版本的集群创建。如果您在已有此标签的 VPC 中创建 1.15 或更高版本,不会删除此标签。您可以从运行版本 1.15 或更高版本的 Amazon EKS 集群使用的任何 VPC 中安全地删除此标签。