帮助改进此页面
想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
查看 Amazon EKS 对 VPC 和子网的联网要求
在创建集群时,您将指定 VPC 以及位于不同可用区中的至少两个子网。本主题概述了 Amazon EKS 对于您用于集群的 VPC 和子网的特定要求和注意事项。如果您没有与 Amazon EKS 结合使用的 VPC,则可以使用 Amazon EKS 提供的 Amazon CloudFormation 模板创建一个。如果您要在 Amazon Outposts 上创建本地或扩展集群,请参阅 为 Amazon Outposts 上的 Amazon EKS 集群创建 VPC 和子网 而不是本主题。
VPC 要求和注意事项
在创建集群时,您指定的 VPC 必须满足以下要求和注意事项:
-
VPC 必须有足够数量的 IP 地址来供集群、任何节点和您想要创建的其他 Kubernetes 资源使用。如果要使用的 VPC 没有足够数量的 IP 地址,请尝试增加可用 IP 地址的数量。
为此,您可以更新集群以更改该集群使用的子网和安全组。您可以从 Amazon Web Services Management Console、Amazon CLI 的最新版本、Amazon CloudFormation 以及
eksctl
版本v0.164.0-rc.0
或更高版本进行更新。您可能需要执行此操作,为子网提供更多可用 IP 地址,以便成功升级集群版本。重要
您添加的所有子网均必须位于与创建集群时最初提供的相同一组可用区中。新子网必须满足所有其他要求,例如,它们必须有足够的 IP 地址。
例如,假设您创建一个集群并指定四个子网。按照您指定的顺序,第一个子网位于
cn-north-1a
可用区中,第二个和第三个子网位于cn-north-1b
可用区中,第四个子网位于cn-north-1c
可用区中。如果要更改子网,则必须在三个可用区中各提供至少一个子网,并且这些子网必须与原始子网位于同一个 VPC 中。如果您需要的 IP 地址多于 VPC 中的 CIDR 块,则可以通过将其他无类别域间路由(CIDR)块与您的 VPC 关联来添加其他 CIDR 块。您可以在创建集群之前或之后将私有(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 关联。您必须有 ICP 异常才能使用IPv6
,因为 AmazonIPv6
CIDR 来自公有 IP 地址范围。有关更多信息,请参阅 Download China ICP guide(下载中国 ICP 指南)。您可以在 Amazon Web Services Management Console 中启动该请求 。 -
VPC 必须具有
DNS
主机名和DNS
解析支持。否则,节点无法注册到集群。有关更多信息,请参阅《Amazon VPC 用户指南》中的 VPC 的 DNS 属性。 -
VPC 可能需要使用 Amazon PrivateLink 的 VPC 节点。有关更多信息,请参阅 子网要求和注意事项。
如果您使用 Kubernetes 1.14
或更早版本创建集群,Amazon EKS 会将以下标签添加到您的 VPC 中:
键 | 值 |
---|---|
kubernetes.io/cluster/ |
owned |
此标签仅由 Amazon EKS 使用。您可以在不影响服务的情况下删除标签。它不适用于版本 1.15
或更高版本的集群。
子网要求和注意事项
在创建集群时,Amazon EKS 将在您指定的子网中创建 2–4 个弹性网络接口。这些网络接口可实现集群和 VPC 之间的通信。这些网络接口还支持 Kubernetes 功能,例如 kubectl exec
和 kubectl logs
。每个 Amazon EKS 创建的网络接口的描述中都有 Amazon EKS
文本。cluster-name
当您创建集群时,Amazon EKS 可以在您指定的任何子网中创建其网络接口。创建集群后,您可以更改 Amazon EKS 在哪些子网中创建其网络接口。当您更新集群的 Kubernetes 版本时,Amazon EKS 会删除其创建的原始网络接口,然后创建新的网络接口。这些网络接口可以在与原始网络接口相同的子网中创建,也可以在与原始网络接口不同的子网中创建。要控制在哪些子网中创建网络接口,可以在创建集群时将指定的子网数限制为只有两个子网,或者在创建集群后更新子网。
集群的子网要求
您在创建或更新集群时指定的子网必须满足以下要求:
-
每个子网必须至少有六个 IP 地址以供 Amazon EKS 使用。但是,我们建议至少使用 16 个 IP 地址。
-
子网不能驻留在 Amazon Outposts、Amazon Wavelength 或 Amazon 本地区域中。但是,如果您的 VPC 中有这些子网,则可以向这些类型的子网部署自行管理的节点和 Kubernetes 资源。
-
子网可以是公有子网或私有子网。但是,如果可能,我们建议您指定私有子网。公有子网是指包含路由表的子网,这个路由表中包含指向互联网网关的路由,而私有子网是指具有一个其中不包含指向互联网网关的路由的路由表的子网。
-
子网不能位于以下可用区中:
Amazon Web Services 区域 区域名称 不允许使用的可用区 ID us-east-1
美国东部(弗吉尼亚北部) use1-az3
us-west-1
美国西部(加利福尼亚北部) usw1-az2
ca-central-1
加拿大(中部) cac1-az3
cn-north-1
中国(北京) cnn1-az3
按组件划分的 IP 地址系列使用情况
下表包含 Amazon EKS 的每个组件所使用的 IP 地址系列。您可以使用网络地址转换(NAT)或其他兼容性系统从具有表条目 "No" 值的系列中的源 IP 地址连接到这些组件。
根据集群的 IP family(ipFamily
)设置,功能可能会有所不同。此设置会更改 Kubernetes 分配给 Services 的 CIDR 数据块所使用的 IP 地址类型。设置值为 IPv4 的集群被称为 IPv4 cluster,设置值为 IPv6 的集群被称为 IPv6
cluster。
组件 | 仅限 IPv4 地址 |
仅限 IPv6 地址 |
双堆栈地址 |
---|---|---|---|
EKS API 公用端点 | 是 | 否 | 否 |
EKS API VPC 端点 | 是 | 否 | 否 |
EKS Auth API 公有端点(EKS 容器组身份) | 是1 | 是1 | 是1 |
EKS Auth API VPC 端点(EKS 容器组身份) | 是1 | 是1 | 是1 |
Kubernetes 集群公有端点 | 是 | 否 | 否 |
Kubernetes 集群私有端点 | 是2 | 是2 | 否 |
Kubernetes 集群子网 | 是2 | 否 | 是2 |
节点主 IP 地址 | 是2 | 否 | 是2 |
Service IP 地址的集群 CIDR 范围 | 是2 | 是2 | 否 |
来自 VPC CNI 的 Pod IP 地址 | 是2 | 是2 | 否 |
IRSA OIDC 颁发者 URL | 是 | 否 | 否 |
注意
1 端点是双堆栈,同时包含 IPv4
和 IPv6
地址。Amazon 外部的应用程序、集群的节点以及集群内的容器组(pod)可以通过 IPv4
或 IPv6
到达此端点。
2 当您创建集群时,您可以在集群的 IP family(ipFamily
)设置中在 IPv4
集群和 IPv6
集群之间进行选择,这是无法更改的。相反,在创建另一个集群并迁移工作负载时,您必须选择不同的设置。
节点的子网要求
您可以将节点和 Kubernetes 资源部署到您在创建集群时指定的相同子网。但是,这并不是必要的。这是因为,您还可以将节点和 Kubernetes 资源部署到您在创建集群时未指定的子网。如果您将节点部署到不同的子网,Amazon EKS 不会在这些子网中创建集群网络接口。您向其中部署节点和 Kubernetes 资源的任何子网必须满足以下要求:
-
子网必须有足够的可用 IP 地址才能将所有节点和 Kubernetes 资源部署到其中。
-
如果您想让 Kubernetes 分配
IPv6
地址到 Pods 和服务,您必须拥有一个IPv6
CIDR 块和一个与您的子网相关联的IPv4
CIDR 块。有关更多信息,请参阅《Amazon VPC 用户指南》中的将IPv6
CIDR 块与您的子网关联。您必须有 ICP 异常才能使用IPv6
,因为 AmazonIPv6
CIDR 来自公有 IP 地址范围。有关更多信息,请参阅 Download China ICP guide(下载中国 ICP 指南)。您可以在 Amazon Web Services Management Console 中启动该请求 。与子网关联的路由表必须包含到 IPv4
和IPv6
地址的路由。有关更多信息,请参阅《Amazon VPC 用户指南》中的路由。容器组(pod)只分配了IPv6
地址。但是,Amazon EKS 为您的集群和您的节点创建的网络接口被分配了IPv4
和IPv6
地址。 -
如果您需要从互联网入站访问您的 Pods,请确保至少有一个公有子网具有足够的可用 IP 地址,以便将负载均衡器和入口部署到其中。您可以将负载均衡器部署到公有子网。负载均衡器可以对私有或公有子网中的 Pods 进行负载均衡。我们建议尽可能将节点部署到私有子网。
-
如果您计划将节点部署到公有子网,则该子网必须自动分配
IPv4
公有地址或IPv6
地址。如果您将节点部署到具有关联的IPv6
CIDR 块的私有子网,则该私有子网还必须自动分配IPv6
地址。如果您使用 Amazon EKS Amazon CloudFormation 模板在 2020 年 3 月 26 日之后部署您的 VPC,此设置已启用。如果您在此日期之前使用模板部署 VPC,或者您使用自己的 VPC,则必须手动启用此设置。有关更多信息,请参阅《Amazon VPC 用户指南》中的修改您的子网的公有IPv4
寻址属性和修改您的子网的IPv6
寻址属性。 -
如果您将节点部署到的子网是私有子网,且其路由表不包含到网络地址转换(NAT)设备(
IPv4
)或仅限出口的网关(IPv6
)的路由,则添加使用 Amazon PrivateLink 的 VPC 端点到您的 VPC。您的节点和 Pods 需要与之通信的所有 Amazon Web Services 服务 都需要 VPC 端点。示例包括 Amazon ECR、Elastic Load Balancing、Amazon CloudWatch、Amazon Security Token Service 和 Amazon Simple Storage Service(Amazon S3)。端点必须包括节点所在的子网。并非所有 Amazon Web Services 服务 都支持 VPC 端点。有关更多信息,请参阅什么是 Amazon PrivateLink?和与 Amazon PrivateLink 集成的 Amazon 服务。有关更多 Amazon EKS 要求的列表,请参阅 部署具有有限互联网访问权限的私有集群。 -
如果要将负载均衡器部署到子网,则子网必须具有以下标签:
-
私有子网
键 值 kubernetes.io/role/internal-elb
1
-
公有子网
键 值 kubernetes.io/role/elb
1
-
当创建版本为 1.18
和更低版本的 Kubernetes 集群时,Amazon EKS 会将以下标签添加到指定的所有子网。
键 | 值 |
---|---|
kubernetes.io/cluster/ |
shared |
当您创建新 Kubernetes 集群时,Amazon EKS 不会将该标签添加到您的子网中。如果标签位于以前版本低于 1.19
的集群使用的子网上,则当该集群更新为较新版本时,不会自动从子网上移除该标签。版本 2.1.1
或更低版本的 Amazon Load Balancer Controller 需要此标签。如果您使用的是较新版本的负载均衡器控制器,则可以删除该标签,而不会中断您的服务。
如果您使用 eksctl
或者任一 Amazon EKS Amazon CloudFormation VPC 模板部署了 VPC,则以下情况适用:
-
2020 年 3 月 26 日或之后 – 公有子网将公有
IPv4
地址自动分配给部署到公有子网的新节点。
此更改通过以下方式影响部署到公有子网的新节点组:
-
托管节点组 – 如果节点组在 2020 年 4 月 22 日或之后部署到公有子网,则该公有子网必须启用自动分配公有 IP 地址。有关更多信息,请参阅修改子网的公有
IPv4
寻址属性。 -
Linux、Windows 或 Arm 自行管理节点组 – 如果节点组在 2020 年 3 月 26 日或之后部署到公有子网,则该公有子网必须启用自动分配公有 IP 地址。或者,节点必须使用公有 IP 地址启动。有关更多信息,请参阅修改子网的公有
IPv4
寻址属性或在实例启动期间分配公有IPv4
地址。
共享子网要求和注意事项
您可以使用 VPC 共享与同一 Amazon Organizations 中的其他 Amazon 账户共享子网。您可以在共享子网中创建 Amazon EKS 集群,但要注意以下几点:
-
VPC 子网的拥有者必须与参与者账户共享一个子网,该账户才能在其中创建 Amazon EKS 集群。
-
您不能使用 VPC 的默认安全组启动资源,因为此安全组属于拥有者。此外,参与者无法使用其他参与者或拥有者拥有的安全组启动资源。
-
在共享子网中,参与者和拥有者分别控制各自账户中的安全组。子网拥有者可以看到参与者创建的安全组,但不能对其执行任何操作。如果子网拥有者想要删除或修改安全组,则创建安全组的参与者必须执行该操作。
-
如果集群是由参与者创建的,则要注意以下几点:
必须在该账户中创建集群 IAM 角色和节点 IAM 角色。有关更多信息,请参阅Amazon EKS 集群 IAM 角色 和Amazon EKS 节点 IAM 角色。
-
所有节点必须由同一个参与者创建,包括托管节点组。
-
共享 VPC 拥有者无法查看、更新或删除参与者在共享子网中创建的集群。这是对每个账户具有不同访问权限的 VPC 资源的补充。有关更多信息,请参阅 Amazon VPC 用户指南中的拥有者和参与者的责任和权限。
-
如果您使用 Amazon VPC CNI plugin for Kubernetes 的自定义网络功能,则需要使用拥有者账户中列出的可用区 ID 映射来创建每个
ENIConfig
可用区。有关更多信息,请参阅 使用自定义网络在备用子网中部署 pods。
有关 VPC 子网共享的更多信息,请参阅 Amazon VPC 用户指南中的与其他账户共享 VPC。