集群 VPC 注意事项 - Amazon EKS

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

集群 VPC 注意事项

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

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

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

重要
  • 节点和负载均衡器可在集群 VPC 中的任何子网中启动,包括在集群创建Amazon EKS期间未向 注册的子网。子网不需要节点的任何标签。要使 Kubernetes 负载均衡 Auto Discovery 正常工作,子网必须如中所述进行标记子网标记

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

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

  • 在创建集群时AWS Outposts,请勿在 AWS Wavelength、 或 AWS 本地扩展区中选择子网。

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

VPC IP 寻址

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

  • 具有指向 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>
重要

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

您可以在用于Amazon EKS集群的 VPC 中定义私有 (RFC 1918) 和公有(非 RFC 1918)无类域间路由 (CIDR) 范围。有关更多信息,请参阅 中的向 VPC https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#vpc-resize 添加 IPv4 CIDR 块Amazon VPC 用户指南。为 VPC 和子网选择 CIDR 块时,请确保这些块包含您计划部署的所有Amazon EC2节点和 Pod 的足够 IP 地址。您的每个 Pod 应至少有一个 IP 地址。您可以通过使用共享服务 VPC 实施中转网关来节省 IP 地址使用。有关更多信息,请参阅混合网络中具有共享服务的隔离 VPCs和 Amazon EKS VPC 可路由 IP 地址保存模式。

子网标记

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

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

  • shared

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

VPC 标记要求

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

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

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