了解如何将 IPv6 地址分配给集群、pods 和服务
适用于:使用 Amazon EC2 实例和 Fargate Pods 的 Pods
默认情况下,Kubernetes 将 IPv4
地址分配给您的 Pods 和 services。您可以将集群配置为向其分配 IPv6
地址,而不是将 IPv4
地址分配给 Pods 和 services。Amazon EKS 不支持双堆栈 Pods 或 services,即使 Kubernetes 的 1.23
版本及更高版本中支持此类堆栈也是如此。因此,您无法将 IPv4
和 IPv6
地址同时分配给 Pods 和 services。
创建集群时,您可以选择要用于集群的 IP 系列。集群在创建之后无法更改系列。
有关部署 Amazon EKS IPv6
集群的教程,请参阅部署 Amazon EKS IPv6 集群和 Amazon Linux 托管节点。
以下是使用该功能的注意事项:
IPv6
功能支持
-
无 Windows 支持:WindowsPods 和 services 不受支持。
-
需要基于 Nitro 的 EC2 节点:您只能将 AWS 与
IPv6
基于 Nitro 的 Amazon EC2 节点或 Fargate 节点结合使用。 -
支持 EC2 和 Fargate 节点:您可以将
IPv6
与具有 Amazon EC2 节点和 Fargate 节点的 将安全组分配到单个 pods 结合使用。 -
不支持 Outposts:您不能将
IPv6
与 使用 AWS Outposts 在本地部署 Amazon EKS 结合使用。 -
不支持 FSx for Lustre:不支持 使用适用于 Lustre 的 FSx 存储高性能应用程序。
-
不支持实例元数据服务:Amazon EKS 不支持使用 Amazon EC2 实例元数据服务
IPv6
端点。 -
不支持自定义联网:如果您以前使用过使用自定义网络在备用子网中部署 pods帮助缓解 IP 地址耗尽,您可以改用
IPv6
。您不能将自定义联网与IPv6
结合使用。如果您使用自定义联网进行网络隔离,则可能需要为集群继续使用自定义联网和IPv4
系列。
IP 地址分配
-
Kubernetes 服务:仅为 Kubernetes 服务分配一个
IPv6
地址。系统不会为其分配 IPv4 地址。 -
容器组(pod):将为容器组(pod)分配一个 IPv6 地址和一个主机本地 IPv4 地址。主机本地 IPv4 地址是使用与 VPC CNI 关联的主机本地 CNI 插件分配的,并且该地址不会报告给 Kubernetes 控制面板。仅在有容器组需要与其他 Amazon VPC 或互联网中的外部 IPv4 资源通信时才会使用该地址。主机本地 IPv4 地址将(由 VPC CNI)SNAT 转换为 Worker 节点的主 ENI 的主 IPv4 地址。
-
容器组(pod)和服务:Pods和services仅分配
IPv6
地址。系统不会为其分配IPv4
地址。由于 Pods 能够通过实例本身上的 NAT 与IPv4
端点通信,因此不需要 DNS64 和 NAT64。如果流量需要公有 IP 地址,则流量将源网络地址转换为公有 IP。 -
路由地址:在 VPC 之外通信时,Pod 的源
IPv6
地址并非转换为节点IPv6
地址的源网络地址。它使用互联网网关或仅出口互联网网关进行路由。 -
节点:所有节点均已分配
IPv4
和IPv6
地址。 -
Fargate Pods :每个 Fargate Pod 都会收到来自为其部署的子网指定的 CIDR 的
IPv6
地址。运行 Fargate Pods 的底层硬件单元从分配给部署硬件单元的子网的 CIDR 获取唯一的IPv4
和IPv6
地址。
如何将 IPv6
与 EKS 结合使用。
-
创建新集群:您必须创建新集群并指定该集群要使用
IPv6
系列。您无法为从前一版本更新的集群启用IPv6
系列。有关如何创建新集群的说明,请参阅“注意事项”。 -
使用最新的 VPC CNI:部署 Amazon VPC CNI 版本
1.10.1
或更高版本。默认情况下,会部署此版本或更高版本。部署附加组件后,您无法在不先删除集群所有节点组中的所有节点的情况下将 Amazon VPC CNI 附加组件版本降级到1.10.1
版以下。 -
为
IPv6
配置 VPC CNI:如果您使用 Amazon EC2 节点,则必须使用 IP 前缀委派和IPv6
配置 Amazon VPC CNI 附加组件。如果您在创建集群时选择IPv6
系列,则1.10.1
版的附加组件默认采用此配置。自行管理或 Amazon EKS 附加组件均为属于此种情况。有关 IP 前缀委派的更多信息,请参阅 为带前缀的 Amazon EKS 节点分配更多 IP 地址。 -
配置
IPv4
和IPv6
地址:创建集群时,您指定的 VPC 和子网必须具有分配给您指定的 VPC 和子网的IPv6
CIDR 块。您还必须为其分配一个IPv4
CIDR 块。这是因为,即使您只想使用IPv6
,VPC 仍然需要IPv4
CIDR 块才能正常工作。有关更多信息,请参阅 Amazon VPC 用户指南中的关联 IPv6 CIDR 块与 VPC。 -
自动将 IPv6 地址分配非节点:创建节点时,必须指定配置为自动分配
IPv6
地址的子网。否则,您无法部署节点。默认情况下,将禁用此配置。有关更多信息,请参阅 Amazon VPC 用户指南中的修改子网的 IPv6 寻址属性。 -
设置路由表以使用
IPv6
:分配给子网的路由表必须有IPv6
地址的路由。有关更多信息,请参阅 Amazon VPC 用户指南中的迁移到 IPv6。 -
为
IPv6
设置安全组:您的安全组必须允许IPv6
地址。有关更多信息,请参阅 Amazon VPC 用户指南中的迁移到 IPv6。 -
设置负载均衡器:使用 AWS Load Balancer Controller 版本
2.3.1
或更新版本,对 HTTP 应用程序(通过使用 使用应用程序负载均衡器路由应用程序和 HTTP 流量)或流向IPv6
Pods 的网络流量(通过在 IP 模式下借助负载均衡器使用 使用网络负载均衡器路由 TCP 和 UDP 流量,实例模式不受支持)进行负载均衡。有关更多信息,请参阅 使用 AWS 负载均衡器控制器路由互联网流量。 -
添加
IPv6
IAM 策略:您必须将IPv6
IAM 策略附加到节点 IAM 或 CNI IAM 角色。在两者之间,我们建议您将其附加到 CNI IAM 角色。有关更多信息,请参阅 为使用 IPv6 系列的集群创建 IAM policy 和 步骤 1:创建 Amazon VPC CNI plugin for Kubernetes IAM 角色。 -
评估所有组件:在部署
IPv6
集群之前对集成的应用程序、Amazon EKS 附加组件和 AWS 服务进行全面的评估。这是为了确保IPv6
的所有功能按预期运行。 -
添加
BootstrapArguments
自行管理的节点组:在集群中创建使用IPv6
系列的自行管理节点组时,用户数据必须包含在节点启动时运行的 bootstrap.sh文件的以下 BootstrapArguments
。将your-cidr
替换为您集群 VPC 的IPv6
CIDR 范围。--ip-family ipv6 --service-ipv6-cidr your-cidr
如果您不知道集群的
IPv6
CIDR
范围,可以使用以下命令查看(需要 AWS CLI 的2.4.9
版本或更高版本)。aws eks describe-cluster --name my-cluster --query cluster.kubernetesNetworkConfig.serviceIpv6Cidr --output text