Cilium 1.20 已正式发布。该版本提供了更广泛的 Kubernetes Gateway API 支持、可扩展的 eBPF 数据路径,并在无 sidecar 的双向 TLS 方面取得了新的进展。该版本还使得在运行不同 Linux 内核版本的 Kubernetes 集群中引入较新的 netkit 网络设备变得更简单。

在发布公告"中,Cilium 工程师 Nico Vibert 和 Donia Chaiehloudj 将 1.20 版本中的 Gateway API 描述为“一个范围更广的流量管理层”。Cilium 从 Gateway API 1.4 升级至 1.6,新增了 ExternalAuth、ListenerSets、CORS 过滤、TCPRoute 和 UDPRoute。这些新增功能将 HTTP 身份验证以及数据库和 DNS 等非 HTTP 服务纳入了与 Web 和 gRPC 流量相同的 Kubernetes API 之下。

据 Vibert 和 Chaiehloudj 所述",ExternalAuth 允许 HTTPRoute 在向应用程序发送请求之前,先请求外部授权服务。根据响应结果不同,网关可以转发请求、将用户重定向至登录页面,或拒绝该请求。授权方还可以将身份标识头传递给应用程序。在面对纯四层流量时,TCPRoute 和 UDPRoute 的存在使其不必再回退到 LoadBalancer 或 NodePort 服务。

ListenerSets 解决了另一个所有权方面的问题。应用程序团队可以从自己的命名空间中添加监听器,而平台团队则保留对共享网关的控制权,并决定哪些命名空间可以扩展该网关。在 LinkedIn 上,平台工程师 Mohamed Salem BEN ATAIA 写道",ListenerSets 填补了拥有路由的团队与因新主机名或端口而需要集中变更的团队之间的空白。在他看来,“这消除了平台的一个瓶颈。”

Gateway API 已经成为一个范围更广的流量管理层。Nico Vibert 和 Donia Chaiehloudj"

这一方向与其他 Kubernetes 网络方面的工作一致。InfoQ 此前曾经报道过",随着各组织逐步淘汰已退役的 Ingress NGINX 控制器,Kubernetes 社区推荐采用 Gateway API。亚马逊云科技也已正式宣布其负载均衡控制器(Load Balancer Controller)支持 Gateway API,包括通过应用负载均衡器(Application Load Balancer)支持 HTTP 和 gRPC,以及通过网络负载均衡器(Network Load Balancer)支持 TCP 和 UDP。Cilium 的实现方式有所不同,同一个项目即可提供 CNI、服务网络和网关功能。

第二项变更将 Cilium 的 eBPF 数据路径向第三方插件开放。此前,需要自定义监控或网络行为的云服务提供商必须将更改贡献给上游,或者维护一个分支。现在,插件作为独立的进程运行,可以独立进行构建、版本控制和升级。Cilium 通过一个小型自定义资源和一个 gRPC 接口与之通信。

由谷歌开发的 Datapath 插件,使 Cilium 不再像一个封闭的网络设备,而更像一个网络操作系统。Nico Vibert 和 Donia Chaiehloudj"

该插件机制尚处于 Beta 测试阶段,并非面向普通集群用户的通用扩展系统。Cilium 的文档"指出,该机制旨在供对 Cilium 内部机制有深入了解的运维人员使用。文档还警告称,该插件可能会导致 Cilium 故障或削弱安全性,而且随着 Cilium 内部架构的变化,维护者可能需要更新其代码。

Cilium 1.20 还引入了 Pod 数据路径的自动选择功能"。将 bpf.datapathMode 设置为 auto 后,每个代理(agent)会在启动时检测其主机环境:若内核支持,则使用 netkit;否则会回退到传统的 veth 对。Netkit 需要 Linux 6.8 或更高版本。默认模式仍然是 veth,因此除非运维人员主动启用,否则现有部署不会发生变化。Vibert 和 Chaiehloudj 表示,这样就不会仅仅因为选择数据路径模式而将混合集群拆分为独立的节点池。

第四个主要领域是 ztunnel,这是 Cilium 1.19 中针对无 sidecar 模式双向 TLS 引入的 per-node 代理(proxy)。1.20 版本允许用户在内部证书颁发机构与 SPIRE 签发的工作负载身份之间进行选择,同时提供了用于注册和连接健康状况监控的 Prometheus 指标。ztunnel 会在通过 HBONE 隧道建立 TLS 1.3 连接的同时维持新连接,从而可以避免 Cilium 早期双向认证设计中可能出现的“首包丢失”问题,并对同一节点上 Pod 之间受支持的 TCP 流量进行了加密。

这与 Istio 的环境模式"(ambient mode)有相似之处,而 Cilium 的实现是基于最初为 Istio 创建的 ztunnel 项目。Cilium ztunnel 目前仍然处于 Beat 测试状态,其旧版双向认证功能现在已经弃用。考虑升级的运维人员还应该查阅下 1.20 版本的发布说明",对于旧版双向认证、Kafka 支持策略、Envoy Go 扩展、自定义 CNI 配置以及若干已弃用的 API,其中列出了用户可能需要采取的措施。

原文链接:https://www.infoq.com/news/2026/10/cilium-120-kubernetes-networking/"