云原生网络 · CNCF 毕业项目 · Apache-2.0
第 145 期 · 把 kube-proxy 换成 eBPF:Cilium 重写 Kubernetes 网络数据面
一、Cilium 是做什么的
Cilium 是一个基于 eBPF 的网络、安全与可观测项目,作为 CNI 插件为 Kubernetes 提供三层能力:
- 网络与策略:用「基于身份」的 L3–L7 网络策略替代传统「基于 IP」的规则,安全模型与地址解耦;
- 负载均衡:用 eBPF 哈希表做分布式负载均衡,可以完整替换 kube-proxy;
- 可观测:自带 Hubble,从同一条 eBPF 路径上吐出结构化流日志(源/目的身份、verdict、延迟、HTTP 状态、DNS);
- 进阶:无 sidecar 的服务网格、多集群互联(ClusterMesh)、节点间 WireGuard / IPsec 加密、BGP 对等。
它的底层是一个叫 eBPF 的 Linux 内核技术:把字节码动态挂到网络 IO、socket、tracepoint 等内核挂载点,安全地实现网络与安全逻辑,无需改动内核源码。
二、怎么装、怎么用
前置条件(官方系统要求):宿主机架构为 AMD64 或 AArch64;Linux 内核 >= 5.10(RHEL 8.10 上 >= 4.18 也可);脱离 K8s 单独运行时还需 etcd >= 3.1.0,原生进程模式还需 clang+LLVM >= 18.1。
推荐用 Helm 装到 kube-system(官方示例版本):
helm install cilium cilium/cilium --version 1.19.4 --namespace kube-system
或用 Cilium CLI 一行拉起并自检:
cilium install cilium status
想开 Hubble 可观测(官方示例,开启 relay 与 UI):
helm install cilium cilium/cilium --version 1.19.4 --namespace kube-system --set hubble.relay.enabled=true --set hubble.ui.enabled=true
三、优点
- 内核级 eBPF 数据面,省掉用户态代理开销,转发按身份而非 IP;
- 完整替换 kube-proxy,告别 iptables 规则爆炸;
- Hubble 流日志与策略 verdict 同源,排障不用 tcpdump 考古;
- CNCF 毕业项目,社区与长期维护性稳;
- 无 sidecar 服务网格、多集群互联、加密、BGP 一把梭。
四、坑与风险点(动手前必须知道)
| 风险点 | 说明 |
|---|---|
| 内核门槛 | 要求 >= 5.10(RHEL 8.10 上 >= 4.18),老 LTS 或混版本集群会让部分节点加载不了 eBPF 程序、数据面行为不一致。 |
| 运维心智负担 | 排障要走 bpftool、cilium monitor、Hubble,不能 strace BPF;需要一定的 Linux 网络底子。 |
| 连接跟踪表内存 | CT map 按节点常驻内核内存,连接风暴下会写满并丢弃/失败新连接,需手动调 bpf-ct-global-tcp-max。 |
| 迁移非 trivial | 从 iptables 类 CNI 切过来要逐节点灰度,不能一把梭。 |
| 单节点单数据面 | 内核崩溃或 verifier bug 会一次性带走本节点所有 Pod,不是 sidecar 那种一个一个挂。 |
| 权限与内核模块 | 节点 agent 需要 CAP_BPF / CAP_SYS_ADMIN;L7 策略依赖 xt_socket 内核模块,缺模块的内核走降级路径、损失部分性能。 |
| 大集群内存 | eBPF map 随集群规模与策略复杂度增长,万级 Pod 时可能吃掉数 GB 内核内存,要调 bpf.mapMaxSize 等。 |
五、最终效果:适合谁、不适合谁
适合:自托管 Kubernetes、能控制内核升级与节点 agent 的团队;需要内核级 L3–L7 策略、高包速率、深度数据面可观测的负载;想用无 sidecar 服务网格或多集群互联的。
不适合:节点内核 < 5.10 或无法升级;禁止加载 eBPF / 跑特权 agent 的强受限托管环境;团队没有 Linux 网络经验、只想用最简单 CNI;小集群、网络需求简单。
动手前先确认内核 >= 5.10、确认 CONFIG_BPF / CONFIG_BPF_JIT 等内核选项已开;先在 staging 用 cilium status 跑通再灰度到生产;CT map 与 eBPF map 内存按规模预留。
下期预告:eBPF 数据面三选一——Cilium 与 Calico、kube-router 的取舍,以及什么时候其实 iptables 就够了。
