本文已超过一年。较旧的文章可能包含过时内容。请检查页面中的信息自发布以来是否仍正确。
Kubernetes 1.23:双栈 IPv4/IPv6 网络达到 GA
“Kubernetes 何时支持 IPv6?” 自 k8s v1.9 首次添加对 IPv6 的 Alpha 支持以来,这个问题被问到的频率越来越高。虽然 Kubernetes 自 v1.18 起就支持纯 IPv6 集群,但当时还无法从 IPv4 迁移到 IPv6。历经漫长等待,双栈 IPv4/IPv6 网络终于在 Kubernetes v1.23 中正式发布 (GA)。
双栈网络对您意味着什么?让我们一起来看看…
Service API 更新
在 1.20 之前,Service 是单栈的,因此要同时使用两种 IP 家族,意味着每个 IP 家族需要创建一个 Service。在 1.20 版本中,用户体验得到了简化,当时 Service 被重新实现以支持两种 IP 家族,这意味着单个 Service 可以处理 IPv4 和 IPv6 工作负载。在运行 IPv4 和 IPv6 任意组合的服务之间,双栈负载均衡成为可能。
Service API 现在有了支持双栈的新字段,取代了单一的 ipFamily 字段。
- 您可以通过将
ipFamilyPolicy
设置为以下三个选项之一来选择 IP 家族:SingleStack、PreferDualStack 或 RequireDualStack。Service 可以在单栈和双栈之间切换(在一定限制内)。 - 将
ipFamilies
设置为分配的 IP 家族列表,可以设置使用 IP 家族的顺序。 clusterIPs
包含了之前的clusterIP
,但允许存在多个条目,因此不再需要在两种 IP 家族中各运行一个重复的 Service。相反,您可以在两种 IP 家族中都分配集群 IP 地址。
请注意,Pod 也是双栈的。对于一个给定的 Pod,不可能在同一个 IP 家族中设置多个 IP 地址。
默认行为仍为单栈
从 1.20 版本将双栈 Service 作为 Alpha 特性重新实现开始,Kubernetes 的底层网络就已经包含了双栈能力,无论集群是否通过特性开关配置为启用双栈。
Kubernetes 1.23 作为将该特性升级到 Stable 的一部分,移除了该特性开关。如果您想配置它,双栈网络总是可用。您可以将集群网络设置为运行单栈 IPv4、单栈 IPv6,或者双栈 IPv4/IPv6。
虽然 Service 根据您的配置设置,但 Pod 默认使用 CNI 插件设置的 IP。如果您的 CNI 插件分配单栈 IP,除非 ipFamilyPolicy
指定 PreferDualStack 或 RequireDualStack,否则您将是单栈。如果您的 CNI 插件分配双栈 IP,则 pod.status.PodIPs
默认使用双栈。
即使双栈是可能的,也不是强制使用。文档中的示例展示了双栈 Service 配置的各种可能性。
立即尝试双栈
虽然上游 Kubernetes 现在支持双栈网络作为 GA 或 Stable 特性,但每个提供商对双栈 Kubernetes 的支持可能有所不同。节点需要配置可路由的 IPv4/IPv6 网络接口。Pod 需要是双栈的。网络插件负责为 Pod 分配 IP 地址,因此集群使用的网络插件需要支持双栈。一些 Container Network Interface (CNI) 插件支持双栈,kubenet 也支持。
双栈的生态系统支持正在增加;您可以使用 kubeadm 创建双栈集群,使用 KIND 在本地尝试双栈集群,并在云提供商中部署双栈集群(请查阅文档了解 CNI 或 kubenet 的可用性)。
加入 SIG Network
SIG-Network 希望从社区使用双栈网络的经验中学习,以了解不断变化的需求和您的用例。KubeCon NA 2021 的 SIG-network 更新视频总结了 SIG 最近的更新,包括双栈在 1.23 中升级到 Stable。
GitHub 上当前的 SIG-Network KEP 和议题展示了 SIG 的重点领域。双栈 API server 是一个可以考虑贡献的地方。
SIG-Network 会议是一个友好、开放的场所,您可以在这里与社区联系并分享您的想法。期待您的来信!
致谢
双栈网络特性凝聚了众多 Kubernetes 贡献者的心血。感谢所有贡献代码、经验报告、文档、代码审查以及其他一切的贡献者。Bridget Kromhout 在《Kubernetes 中的双栈网络》一文中详细介绍了社区的努力。Tim Hockin 和 Khaled (Kal) Henidak 在 2019 年 KubeCon 主题演讲 (通往 IPv4/IPv6 双栈 Kubernetes 的漫长之路) 以及 Lachlan Evenson 在 2021 年的主题演讲 (我们来了:Kubernetes 中的双栈网络) 都讲述了双栈之旅,历时五年,代码量巨大。