这篇文章已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已不正确。
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)。
双栈网络对您意味着什么?让我们来看看…
服务 API 更新
服务在 1.20 之前是单栈的,因此使用两个 IP 系列意味着每个 IP 系列创建一个服务。当服务被重新实现以允许两个 IP 系列时,在 1.20 中简化了用户体验,这意味着单个服务可以处理 IPv4 和 IPv6 工作负载。在运行任何 IPv4 和 IPv6 组合的服务之间,可以进行双栈负载平衡。
服务 API 现在有了新的字段来支持双栈,取代了单个 ipFamily 字段。
- 您可以通过将
ipFamilyPolicy
设置为三个选项之一来选择您的 IP 系列:SingleStack、PreferDualStack 或 RequireDualStack。服务可以在单栈和双栈之间更改(在某些限制内)。 - 将
ipFamilies
设置为分配的系列列表允许您设置使用的系列顺序。 clusterIPs
包括之前的clusterIP
,但允许多个条目,因此不再需要在两个 IP 系列中运行重复的服务。相反,您可以分配两个 IP 系列中的集群 IP 地址。
请注意,Pod 也是双栈的。对于给定的 Pod,不可能在同一系列中设置多个 IP 地址。
默认行为仍然是单栈
从 1.20 开始,随着双栈服务作为 alpha 版本的重新实现,无论集群是否配置了启用双栈的功能标志,Kubernetes 的底层网络都包含了双栈。
Kubernetes 1.23 删除了该功能标志,作为将该功能升级到稳定的过程的一部分。如果您想配置它,双栈网络始终可用。您可以将集群网络设置为作为单栈 IPv4、单栈 IPv6 或双栈 IPv4/IPv6 运行。
虽然服务是根据您配置的内容设置的,但 Pod 默认为 CNI 插件设置的内容。如果您的 CNI 插件分配单栈 IP,您将拥有单栈,除非 ipFamilyPolicy
指定 PreferDualStack 或 RequireDualStack。如果您的 CNI 插件分配双栈 IP,则 pod.status.PodIPs
默认为双栈。
即使双栈是可能的,但不是强制使用的。文档中的示例显示了 双栈服务配置中可能的各种情况。
立即尝试双栈
虽然上游 Kubernetes 现在支持 双栈网络作为 GA 或稳定功能,但每个提供商对双栈 Kubernetes 的支持可能会有所不同。需要为节点配置可路由的 IPv4/IPv6 网络接口。Pod 需要是双栈的。 网络插件是为 Pod 分配 IP 地址的组件,因此它需要集群使用的网络插件支持双栈。一些容器网络接口 (CNI) 插件支持双栈,kubenet 也是如此。
对双栈的生态系统支持正在增加;您可以使用 kubeadm 创建双栈集群,尝试使用 KIND 在本地创建双栈集群,并在云提供商中部署双栈集群(在检查 CNI 或 kubenet 可用性的文档后)。
参与 SIG 网络
SIG-Network 希望从社区在双栈网络方面的经验中学习,以了解更多关于不断变化的需求和您的用例。 KubeCon NA 2021 的 SIG 网络更新视频总结了 SIG 的最新更新,包括双栈在 1.23 中达到稳定状态。
GitHub 上当前的 SIG-Network KEP 和 问题说明了 SIG 的重点领域。 双栈 API 服务器是考虑贡献的一个地方。
SIG-Network 会议是一个友好的、欢迎的场所,您可以与社区联系并分享您的想法。期待您的来电!
致谢
双栈网络功能代表了许多 Kubernetes 贡献者的工作。感谢所有贡献代码、经验报告、文档、代码审查以及其他一切的贡献者。Bridget Kromhout 在 Kubernetes 中的双栈网络中详细介绍了这项社区工作。Tim Hockin 和 Khaled (Kal) Henidak 在 2019 年 (通往 IPv4/IPv6 双栈 Kubernetes 的漫长道路) 和 Lachlan Evenson 在 2021 年 (我们开始吧:Kubernetes 中的双栈网络) 的 KubeCon 主题演讲讲述了双栈的旅程,跨越五年和大量的代码行。