本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
正在运行 IPv6 EKS 集群
IPv6 模式下的 EKS 解决了大规模 EKS 集群中经常出现的 IPv4 精疲力尽挑战。EKS 的支持侧重 IPv6 于解决因 IPv4 地址空间有限而导致的 IPv4 耗尽问题。这是我们的许多客户提出的一个重大问题,与 Kubernetes IPv4/IPv6
在 IPv6 EKS 集群中,Pod 和服务将接收 IPv6 地址,同时保持与传统 IPv4 终端节点的兼容性。这包括外部 IPv4 终端节点访问集群内服务的能力,以及 Pod 访问外部 IPv4 端点的能力。
Amazon EKS IPv6 支持利用原生 VPC IPv6 功能。每个 VPC 都分配了一个 IPv4 地址前缀(CIDR 块大小可以介于 /16 到 /28 之间)和来自 Amazon GUA(全球单播 IPv6 地址)的唯一 /56 地址前缀(固定);您可以为 VPC 中的每个子网分配一个 /64 地址前缀。 IPv4 路由表、网络访问控制列表、对等互连和 DNS 解析等功能在 IPv6 启用的 VPC 中的工作方式相同。然后,VPC 被称为双栈 VPC,按照双栈子网,下图描述了支持IPv6 基于 EKS/ 的 IPV4IPv6 集群的 VPC 基础模式:

在 IPv6 世界上,每个地址都可以通过互联网进行路由。默认情况下,VPC 会从公共 GUA 范围内分配 IPv6 CIDR。 VPCs 不支持从 RFC 4193(fd00:: /8 或 fc00:: /8 或 fc00:: /8)定义的唯一本地地址 (ULA)

在 VPC 用户指南中可以找到实现 IPv6 子网的最佳实践。
在 E IPv6 KS 集群中,节点和 Pod 接收公有 IPv6 地址。EKS 根据唯一的本地 IPv6 单播 IPv6 地址 (ULA) 为服务分配地址。不同的是 IPv4, IPv6 集群的 ULA 服务 CIDR 是在集群创建阶段自动分配的,无法指定。下图描绘了基于 EKS/ 的集群控制平面数据计划IPv6 基础模式:

概览
IPv6 仅在前缀模式(VPC-CNI 插件 ENI IP 分配模式)中支持 EKS/。了解有关前缀模式的更多信息。
前缀分配仅适用于基于 Nitro的 EC2 实例,因此只有当集群数据平面使用 EC2 基IPv6 于 Nitro的实例时,才支持 EKS/。
简而言之, IPv6 前缀 /80(每个工作节点)将产生大约 10^14 个 IPv6 地址,限制因素将不再 IPs 是 Pod 密度(资源方面)。
IPv6 前缀分配仅在 EKS 工作节点引导时发生。众所周知,这种行为可以缓解由于旨在及时分配私 IPv4 有地址的 VPC CNI 插件 (ipamd) 生成的 API 调用受限,Pod 流失率高 EKS/ IPv4 集群经常在 Pod 调度中延迟的情况。众所周知,VPC-CNI 插件的高级旋钮会不必要地调整 WARM_IP/ENI、MINIMUM_IP。
下图放大了 IPv6 工作节点弹性网络接口 (ENI):

每个 EKS 工作节点都分配了 IPv4 和 IPv6 地址以及相应的 DNS 条目。对于给定的工作节点,只消耗双栈子网中的一个 IPv4 地址。EKS 对的支持 IPv6 使您能够通过高度自以为是的仅限出口的模式与 IPv4 终端节点(AWS、本地、互联网)进行通信。 IPv4 EKS 实现了一个主机本地 CNI 插件,该插件是 VPC CNI 插件的辅助插件,后者为 Pod 分配和配置地址。 IPv4 CNI 插件为 169.254.172.0/22 范围内的 Pod 配置主机特定的不可路由 IPv4 地址。分配给 Pod IPv4 的地址对工作节点来说是唯一的,不会在工作节点之外公布。169.254.172.0/22 提供多达 1024 个可以支持大型实例类型的唯一地址。 IPv4
下图描绘了 IPv6 Pod 连接到集群边界以外的 IPv4 终端节点(非互联网)的流程:

在上图中,Pod 将对终端节点执行 DNS 查找,在收到 IPv4 “A” 响应后,Pod 的仅限节点的唯一 IPv4 地址通过源网络地址转换 (SNAT) 转换为连接到 Worker-Node 的主网络接口的私有 (VP IPv4 C) 地址。 EC2
EKS/ IPv6 Pod 还需要使用公共 IPv4 地址通过互联网连接到 IPv4 端点,以实现类似的流量。下图描绘了 IPv6 Pod 连接到集群边界之外的 IPv4 终端节点(互联网可路由)的流程:

在上图中,Pod 将对终端节点执行 DNS 查找,在收到 IPv4 “A” 响应后,Pod 的仅限节点的唯一 IPv4 地址通过源网络地址转换 (SNAT) 转换为连接到 Worker-Node 的主网络接口的私有 (VP IPv4 C) 地址。 EC2 然后,Pod IPv4 地址(来源 IPv4: EC2 主 IP)被路由到 IPv4 NAT 网关,在那里将 EC2 主 IP (SNAT) 转换为有效的互联网可路由 IPv4 公有 IP 地址(NAT 网关分配的公有 IP)。
所有跨节点的 Pod-to-Pod通信始终使用 IPv6 地址。VPC CNI 将 iptables 配置为在阻止任何连接的 IPv6 同时进行处理。 IPv4
Kubernetes 服务将仅接收来自唯一本地单播地址 IPv6 (ULA) 的地址 (clusterIP)。 IPv6

使用 AWS 负载均衡器将服务公开到互联网。负载均衡器接收公共 IPv6 地址 IPv4 和地址,也就是双栈负载均衡器。对于访问 IPv6 集群 kubernetes 服务的 IPv4 客户端,负载均衡器会 IPv4 进行转换。 IPv6
Amazon EKS 建议在私有子网中运行工作节点和 Pod。你可以在公有子网中创建公有负载均衡器,对私有子网中节点上运行的 Pod 的流量进行负载均衡。下图描绘了互联网 IPv4 用户访问基于 EKS/In IPv6 gress 的服务:

注意
上述模式需要部署最新版本
EKS 控制平面数据平面通信
EKS 将在双堆栈模式 ENIs (IPv4/ENIs) 下配置跨账户 (X-IPv6)。Kubernetes 节点组件(例如 kubelet 和 kube-proxy)被配置为支持双堆栈。Kubelet 和 kube-proxy 在 HostNetwork 模式下运行, IPv4 并绑定到节点主网络接口 IPv6 的地址。Kubernetes api 服务器通过 X-is 基础与 Pod 和节点组件进行通信。ENIs IPv6 Pod 通过 X-与 api 服务器通信ENIs,而 Pod 到 api 服务器的通信始终使用模式。 IPv6

建议
保持对 IPv4 EKS 的访问权限 APIs
EKS IPv4 只能通过 APIs 以下方式访问。这还包括集群 API 终端节点。您将无法 APIs 从 IPv6 仅有的网络访问集群终端节点。您的网络必须支持 (1) 一种 IPv6 过渡机制,例如 NAT64/DNS64 ,用于促进 IPv6 和 IPv4 主机之间的通信,以及 (2) 支持 IPv4 端点转换的 DNS 服务。
基于计算资源的时间安排
单个 IPv6 前缀足以在单个节点上运行多个 Pod。这也有效地消除了对节点上最大 Pod 数量的 ENI 和 IP 限制。尽管 IPv6 消除了对 Max-Pods 的直接依赖,但在使用具有较小实例类型(例如 m5.large)的前缀附件时,您很可能会在耗尽实例的 IP 地址之前很久就耗尽实例的 CPU 和内存资源。如果您使用的是自管理节点组或带有自定义 AMI ID 的托管节点组,则必须手动设置 EKS 推荐的最大 Pod 值。
您可以使用以下公式来确定在 E IPv6 KS 集群的节点上可以部署的最大 Pod 数量。
((Number of network interfaces for instance type (number of prefixes per network interface-1)* 16) + 2
((3 ENIs)_((10 secondary IPs per ENI-1)_ 16)) + 2 = 460 (real)
托管节点组会自动为您计算 Pod 的最大数量。避免更改 EKS 对最大 Pod 数量的建议值,以避免由于资源限制而导致的 Pod 调度失败。
评估现有自定义网络的用途
如果当前启用了自定义联网
EKS/Cluster 中的 Fargate 吊舱 IPv6
EKS IPv6 支持在 Fargate 上运行的 Pod。在 Fargate 上运行的 Pod 将消耗 IPv6 从 VPC CIDR 范围划分的 VPC 可路由私有 IPv4 地址 ()。IPv4 IPv6简而言之 EKS/Fargate Pods cluster wide density will be limited to the available IPv4 and IPv6 addresses. It is recommended to size your dual-stack subnets/VPC CIDRs ,你是为了未来的增长。如果底层子网不包含可用地址,则无论可用 IPv4 地址如何,都无法安排新的 Fargate Pod。 IPv6
部署 AWS Load Balancer 控制器 (LBC)
上游的树内 Kubernetes 服务控制器不支持。 IPv6我们建议使用最新版本"alb.ingress.kubernetes.io/ip-address-type: dualstack"
"alb.ingress.kubernetes.io/target-type: ip"
AWS Network Load Balancer 不支持双栈 UDP 协议地址类型。如果您对低延迟、实时流媒体、在线游戏和物联网有强烈的需求,我们建议您运行 IPv4 集群。要了解有关管理 UDP 服务的运行状况检查的更多信息,请参阅 “如何将 UDP 流量路由到 Kub