集群 VPC 注意事项 - Amazon EKS

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

集群 VPC 注意事项

创建 Amazon EKS 集群时,需要为集群指定要使用的 VPC 子网。Amazon EKS 要求指定至少两个可用区内的子网。我们建议使用同时带有公有子网和私有子网的 VPC,以便 Kubernetes 可以在公有子网中创建公有负载均衡器,进而将流量负载平衡到在私有子网中的节点上运行的 pod。

在创建集群时,您还可以指定为集群托管资源的所有子网,例如节点和负载均衡器。

注意

在集群中,面向 Internet 的负载均衡器需要公有子网。默认情况下,节点还需要到 Amazon EKS APIs 的出站 Internet 访问,以便在启动时进行集群自检和节点注册。对于没有出站 Internet 访问的集群,请参阅私有集群

要拉取容器映像,它们需要访问 Amazon S3 和 Amazon ECR APIs(以及任何其他容器注册表,如 DockerHub)。有关更多信息,请参阅 Amazon EKS 安全组注意事项 中的 AWS IP 地址范围。AWS General Reference

您在创建集群时传递的子网影响 Amazon EKS 将用于控制层面的网络接口放置到节点通信的位置。

您可以在创建集群时仅指定公有或私有子网,但存在与这些配置关联的一些限制:

  • 私有: 一切均在私有子网中运行,并且 Kubernetes 无法为您的 Pod 创建面向 Internet 的负载均衡器。

  • 仅公有: 所有内容均在公有子网中运行,包括您的节点。

Amazon EKS 在您的私有子网中创建网络接口,以便于与节点的通信。此通信渠道支持 Kubernetes 功能,例如 kubectl execkubectl logs 。您在创建集群时指定的安全组将应用于为集群控制层面创建的网络接口。

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

VPC IP 寻址

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

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

  • 为子网配置了几个必需的设置,并执行私有集群中列出的必要操作。

如果自行管理的节点部署到公有子网,则必须将子网配置为自动分配公有 IP 地址。否则,必须在启动节点实例时为其分配一个公有 IP 地址。如果托管节点部署到公有子网,则必须将子网配置为自动分配公有 IP 地址。这是因为,如果节点不是,则不会向节点分配公有 IP 地址。使用以下命令确定您的公有子网是否配置为自动分配公有 IP 地址。

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 EKS AWS CloudFormation 模板在 March 26, 2020 之前部署 VPC,则需要更改公有子网的设置。

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

控制层面为每个集群在 VPC 中创建最多 4 个Amazon EKS请求者托管的网络接口请确保您指定的子网对于请求者托管的网络接口和您的 Pod 有足够的可用 IP 地址。

VPC 标记要求

在创建早于 1.15 版的 Amazon EKS 集群时,Amazon EKS 按以下方式标记包含您指定的子网的 VPC,以便 Kubernetes 可以发现它:

Key Value

kubernetes.io/cluster/<cluster-name>

shared

  • : 值与您的 <cluster-name> 集群的名称匹配。Amazon EKS

  • : 值允许多个集群使用此 VPC。shared

此标签不是必需的,也不由 Amazon EKS 为 1.15 或更高版本的集群创建。如果您将 1.15 或更高版本的集群部署到已有此标签的 VPC,则不会删除该标签。

子网添加标签要求

创建 Amazon EKS 集群时,Amazon EKS 按以下方式为您指定的子网添加标签,以便 Kubernetes 可以发现它们:

kubernetes.io/cluster/<cluster-name>

shared

  • <cluster-name> 值与您的 Amazon EKS 集群匹配。

  • shared 值允许多个集群使用此子网。

内部负载均衡器的私有子网标记要求

必须按照以下方式为私有子网添加标签,以便 Kubernetes 知道它可以将这些子网用于内部负载均衡器。如果您在 March 26, 2020之后使用 eksctl 或 Amazon EKS AWS CloudFormation 模板创建 VPC,则在创建子网时会为子网添加适当的标签。有关 Amazon EKS AWS CloudFormation VPC 模板的更多信息,请参阅为 Amazon EKS 集群创建 VPC

kubernetes.io/role/internal-elb

1

外部负载均衡器的公有子网标记选项

必须按照以下方式为公有子网添加标签,以便 Kubernetes 知道仅将这些子网用于外部负载均衡器,而不是在每个可用区中选择一个公有子网(按子网 ID 的字母表顺序选择)。如果您在 March 26, 2020之后使用 eksctl 或 Amazon EKS AWS CloudFormation 模板创建 VPC,则在创建子网时会为子网添加适当的标签。有关 Amazon EKS AWS CloudFormation VPC 模板的更多信息,请参阅为 Amazon EKS 集群创建 VPC

kubernetes.io/role/elb

1