第29周:Cilium 与 eBPF 生态
目标:理解 Cilium 等 eBPF 生态项目,掌握 eBPF 在生产环境的实际应用。
1. eBPF 生态概览
1.1 主流 eBPF 项目
1 | eBPF 生态: |
1.2 工具链生态
1 | 工具链: |
2. Cilium 架构
2.1 核心组件
1 | Cilium 架构: |
2.2 关键功能
1 | Cilium 提供的核心能力: |
3. Cilium 数据路径详解
3.1 入站路径
1 | 入站(client → server pod): |
3.2 出站路径
1 | 出站(pod → external): |
4. Cilium 关键 BPF 代码片段
4.1 XDP 处理入口
1 | // 节选自 bpf_xdp.c(Cilium 源码,简化版) |
4.2 服务负载均衡(XDP)
1 | // 节选自 bpf_xdp.c(XDP 阶段的服务负载均衡) |
4.3 TC 入口策略
1 | // 节选自 bpf_netdev.c(TC ingress 策略执行) |
4.4 关键 Map 类型
1 | // === 端点信息 === |
5. Cilium 部署实践
5.1 快速安装
1 | # === Kubernetes + Cilium(kind)=== |
5.2 替代 kube-proxy
1 | # kube-proxy 模式 |
5.3 观察 XDP 与 TC 加载
1 | # 查看 Cilium 加载的 BPF 程序 |
6. 替代方案对比
6.1 Cilium vs 其他 CNI
| 特性 | Cilium | Calico | Flannel |
|---|---|---|---|
| 数据面 | eBPF (XDP/TC) | iptables + eBPF | VxLAN |
| 性能 | 极优 | 中等 | 中等 |
| 策略 | L3/L4/L7 | L3/L4 | 无 |
| 加密 | WireGuard/IPSec | IPsec | 无 |
| 可观测性 | Hubble | 基础 | 无 |
| 替换 kube-proxy | 支持 | 有限 | 不支持 |
| 资源占用 | 中等 | 中等 | 极低 |
| 学习曲线 | 陡 | 中等 | 平缓 |
6.2 eBPF vs iptables
1 | 性能对比(10GbE,64B 包): |
7. Tetragon(Cilium 安全)
7.1 Tetragon 概述
1 | Tetragon:基于 eBPF 的安全可观测平台 |
7.2 Tetragon 安装
1 | # 安装 |
8. 其他 eBPF 项目
8.1 Katran(Facebook 负载均衡)
1 | Katran: |
8.2 Pixie(可观测性)
1 | Pixie(New Relic): |
8.3 其他
| 项目 | 用途 | 关键特性 |
|---|---|---|
| bcc | BPF 工具集 | Python/Lua 前端 |
| bpftrace | 高级 BPF 脚本语言 | 单行命令跟踪 |
| Falco | 运行时安全 | 系统调用监控 |
| OpenTelemetry | 分布式追踪 | eBPF 自动插桩 |
| Parca | 持续分析 | 火焰图、低开销 |
9. eBPF 性能优化技巧
9.1 编写高性能 XDP 程序
1 | // === 优化 1:避免不必要的工作 === |
9.2 Map 选择
| Map 类型 | 用例 |
|---|---|
| HASH | 通用 key-value |
| PERCPU_ARRAY | 计数(避免锁) |
| LRU_HASH | 自动淘汰 |
| LPM_TRIE | IP 路由 |
| RINGBUF | 事件传递(推荐) |
| ARRAY_OF_MAPS | 复杂场景 |
9.3 验证器友好
1 | // ✅ 静态循环 |
10. eBPF 学习路径总结
1 | 入门路径: |
- 本文作者: CoderSong
- 本文链接: https://jack-song-gif.github.io/2026/06/10/第29周:Cilium 与 eBPF 生态/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!