了解如何将 IPv6 地址分配给集群、pods 和服务 - Amazon EKS

了解如何将 IPv6 地址分配给集群、pods 和服务

适用于:使用 Amazon EC2 实例和 Fargate Pods 的 Pods

默认情况下,Kubernetes 将 IPv4 地址分配给您的 Pods 和 services。您可以将集群配置为向其分配 IPv6 地址,而不是将 IPv4 地址分配给 Pods 和 services。Amazon EKS 不支持双堆栈 Pods 或 services,即使 Kubernetes 的 1.23 版本及更高版本中支持此类堆栈也是如此。因此,您无法将 IPv4IPv6 地址同时分配给 Pods 和 services。

创建集群时,您可以选择要用于集群的 IP 系列。集群在创建之后无法更改系列。

有关部署 Amazon EKS IPv6 集群的教程,请参阅部署 Amazon EKS IPv6 集群和 Amazon Linux 托管节点

以下是使用该功能的注意事项:

IPv6 功能支持

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 地址的源网络地址。它使用互联网网关或仅出口互联网网关进行路由。

  • 节点:所有节点均已分配 IPv4IPv6 地址。

  • Fargate Pods :每个 Fargate Pod 都会收到来自为其部署的子网指定的 CIDR 的 IPv6 地址。运行 Fargate Pods 的底层硬件单元从分配给部署硬件单元的子网的 CIDR 获取唯一的 IPv4IPv6 地址。

如何将 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 地址

  • 配置 IPv4IPv6 地址:创建集群时,您指定的 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