集群 VPC 注意事项 - Amazon EKS

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

集群 VPC 注意事项

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

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

注意

在集群中,面向 Internet 的负载均衡器需要公有子网。默认情况下,节点还需要对 进行出站 Internet 访问Amazon EKSAPIs,以便在启动时进行集群自检和节点注册。对于没有出站 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, 2020VPC,则需要更改公有子网的设置。

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

Amazon EKS 控制层面在 VPC 中为每个集群创建最多 4 个网络接口。这些网络接口的描述Amazon EKS <cluster name>中包含 。请确保您指定的子网对于网络接口和 Pod 具有足够的可用 IP 地址。

VPC 标记要求

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

密钥

kubernetes.io/cluster/<cluster-name>

shared

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

  • Value (值)shared 值允许多个集群使用此 VPC。

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

子网添加标签要求

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

密钥

kubernetes.io/cluster/<cluster-name>

shared

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

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

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

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

密钥

kubernetes.io/role/internal-elb

1

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

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

密钥

kubernetes.io/role/elb

1