Cilium 1.20 发布:Gateway API 新增 ExternalAuth,ENI 模式支持 IPv6
Cilium 1.20 是该开源容器网络项目 2026 年的第二个大版本。入口侧加入 ExternalAuth 过滤器、CORS、ListenerSets 与 TCPRoute、UDPRoute;数据面带来 beta 阶段的 ENI IPAM IPv6 支持、自动数据面模式选择与第三方数据面插件,cilium-cni 插件体积从 76 MB 缩到 16 MB。
作者:核流编辑 · 栏目:资源
Cilium 1.20 已经发布,这是该项目 2026 年的第二个大版本,上一版为 1.19。按项目官方发布说明,这一版把南北向流量的管理面推进到 Gateway API v1.6。入口侧新增 ExternalAuth、CORS 过滤器与 ListenerSets,并补上面向非 HTTP 流量的 TCPRoute 和 UDPRoute;数据面一侧带来 beta 阶段的 ENI IPAM IPv6 支持、自动数据面模式选择和第三方数据面插件。 新增能力集中在网关、地址管理与策略 网关侧的变化最直接。ExternalAuth 过滤器挂到 HTTPRoute 上以后,每个匹配请求都要先经外部授权服务确认。授权方返回 200 才转发请求,返回 302 就把调用方引到登录页,返回 401 或 403 则由网关直接拦下。授权方还能注入身份头,让应用做最终的授权判断。浏览器会话、CI 任务的令牌、走 MCP 的 AI 代理可以共用同一个网关,各自接不同的身份提供方。鉴权都发生在流量进入应用之前。 TCPRoute 与 UDPRoute 让数据库、消息中间件、邮件服务、DNS 这类 L4 服务也能挂到 Gateway API 上,不必退回裸的 LoadBalancer 或 NodePort 服务; ListenerSets 把监听器的管理权下放给应用命名空间,网关对象仍由平台团队持有,平台只圈定哪些命名空间可以扩展; 服务流量分布新增 PreferSameZone 与 PreferSameNode,本地后端不健康时会退回集群中的其他后端;EndpointSlice 上的 service.cilium.io/weight 注解接受 0 到 65535 的相对权重,权重为 0 的端点保留已有连接、不再接收新流量; ClusterNetworkPolicy 分 Admin 与 Baseline 两层,Admin 层优先于命名空间内的 NetworkPolicy,动作取 Accept、Deny 或 Pass;Hubble 开始为审计裁决补齐策略字段,能看出哪条策略会拦下某个流量; MCS-API 支持升到稳定级别,跨集群服务可以用标准域名访问;AWS ENI IPAM 模式下,operator 通过前缀委派给节点 ENI 挂上 IPv6 /80 前缀,agent 从中给 Pod 分配地址,EKS 上的 Pod 能双栈启动。 数据面侧的改动偏向运维效率。bpf.datapathMode=auto 让每个 agent 启动时探测本机内核,能跑 netkit 就用 netkit,跑不了就安静回退到 veth,默认值仍是 veth。按发布说明,netkit 已在 Meta 的数百万个容器上运行,字节跳动在相近规模部署后报告测试中取得 10% 的性能提升。数据面插件处于 beta,第三方代码以独立进程接入,可以按自己的镜像与版本节奏发布,插件崩溃也不会带走 agent。 每个节点都会安装的 cilium-cni 从 76 MB 缩到 16 MB。源 IP 校验改成按 Pod 选择,命名空间注解与 Pod 注解要同时放行,改注解的权限得用 RBAC 收紧;旧的无边车双向认证被标记为弃用,接替它的 ztunnel 仍是 beta。 获取与升级路径 功能细节从官方文档取:各项能力的说明分散在项目文档的 v1.20 目录下,ENI IPAM 的 IPv6 部分位于 IPAM 章节,ExternalAuth 另有配套实验环境可以照着动手。多数新能力以独立资源或可选开关交付,默认行为保持不变,已经运行 1.19 或更早版本的集群可以按自己的节奏逐项启用。 升级时要留意的弃用项 从 cluster-pool IPAM 迁到 multi-pool IPAM 现在支持原地完成,用 operator 选项 enable-cluster-pool-to-multi-pool-migration 切换,不需要重建集群或重新分配地址; agent 内的 cilium-dbg bgp 子命令与本地 REST BGP 接口在本版标记为弃用,改用 cilium-dbg shell -- bgp/peers、bgp/routes 与 bgp/route-policies;面向用户的 cilium bgp 命令行不受影响; ENI IPAM 的 IPv6、数据面插件与 ztunnel 都还是 beta,生产启用前先读官方文档列出的限制; 这一版适合已经把 Cilium 当作集群 CNI、并打算把入口流量、双栈地址与多集群服务发现收进同一套 API 的团队;只需要解决单一问题的团队,按需打开对应开关即可,不必整体调整。文档入口、功能说明与版本发布信息见下方参考资料,上述内容依据项目官方发布说明整理。 官方文档里的启用条件与边界 官方文档写明,ENI IPAM 模式可以同时分配 IPv4 与 IPv6 地址,双栈与仅 IPv6 两种集群配置都在支持范围内。启用 IPv6 需要节点位于双栈子网,operator 会按需给 ENI 分配一个 /80 的委派前缀,agent 再从该前缀里给 Pod 分配地址。委派前缀按原生 CIDR 保存,IPv4 为 /28,IPv6 为 /80,两者分别发布在默认地址池的 ipv4-addrs 与 ipv6-addrs 下。 这一项仍是 beta:官方文档在 IPv6 使用说明处直接标注 beta 状态,并在项目仓库的 issue 18405 跟踪后续进展。节点级开关 spec.eni.disable-prefix-delegation 只作用于 IPv4,IPv6 的开关与限制需要按文档单独确认,生产启用前建议先在非关键集群验证。 参考资料 CNCF Blog:Cilium 1.20: Gateway API ExternalAuth, TCPRoute/UDPRoute, ENI IPAM for IPv6, and more Cilium 官方文档:ENI IPAM (Cilium 1.20 documentation)