eBPF 知识总览(应用型)
一句话定位
eBPF(extended Berkeley Packet Filter)是 Linux 内核提供的沙箱化字节码执行机制——无需改内核源码、无需加载内核模块,就能在特权上下文(系统调用、网络栈、调度器)里安全地运行用户编写的小程序。
eBPF 是现代云原生基础设施的”统一原语”。本 vault 里 Cilium 的零开销数据面、cgroup v2 移除的 net_cls/devices 控制器、网络调优里 iptables/conntrack 的替代方案,底层全是它。
为什么值得学(结合你的 vault)
学习路线(本目录覆盖应用型第 1 档)
graph LR
A[核心机制与安全] --> B[性能模型]
A --> C[工具链实战]
C --> D[与 Cilium K8s 实战]
C --> E[排障实战]
D --> E
- 第 1 档(应用型,本目录):看懂角色、会用 Cilium/bpftrace/bpftool 排障、理解 KPR 减负原理。目标读者就是你。
- 第 2 档(开发型):自己写 C 的 BPF 程序、libbpf 引导、CO-RE、XDP 自建 DDoS 防护——按需再学,不在本目录。
核心概念速查
| 概念 | 一句话 |
|---|
| Verifier | 加载前静态校验字节码,拒绝越界/无限循环,保证”要么拒绝要么安全” |
| JIT | 校验后编译成本地机器码,性能接近原生 C |
| BPF Map | 内核态↔用户态唯一数据通道(KV 存储),程序本身无状态 |
| Hook 点 | kprobe/tracepoint/XDP/TC/cgroup/socket/LSM,程序挂载处 |
| XDP | 网卡驱动最早收包点,可做 LB/丢包/过滤,不过协议栈 |
| TC | 网络栈 ingress/egress,容器网络策略主战场 |
| socket LB | 在 socket 层做 DNAT 重定向,Cilium KPR 核心 |
| KPR | kube-proxy replacement,eBPF 替代 iptables 做 Service 转发 |
| Hubble | Cilium 基于 eBPF 的可观测性组件 |
| bpftool | 内核自带,审计已加载的 eBPF 程序/map/挂载 |
| bpftrace | 一行式 tracing 语言,排障神器 |
本目录笔记地图
07-Knowledge/linux/ebpf/
├── eBPF 知识总览.md ← 你在这里(MOC 索引)
├── eBPF 核心机制与安全.md 原理:verifier/JIT/Map/Hook 点全景
├── eBPF 性能模型.md 为什么快 / 与传统方案对比
├── eBPF 工具链实战.md bpftool + bpftrace 脚本库 + BCC
├── eBPF 与 Cilium K8s 实战.md Cilium 数据面 / KPR / NetworkPolicy / Hubble
└── eBPF 排障实战.md 审计流程 / Walkthrough / 生产反模式
工具链总览
| 工具 | 角色 | 应用型用法 |
|---|
| bpftool | 内核自带多功能 CLI | 审计程序/map/挂载 |
| bpftrace | 一行式 tracing | 临时排障脚本 |
| Cilium / cilium-cli | CNI,eBPF 数据面 | cilium status/bpf lb list |
| BCC | Python 封装 eBPF 工具集 | execsnoop/biosnoop/tcplife |
| libbpf | C 生产级加载框架 | 开发型才用 |
参考资源
学习时间
| 阶段 | 时间 | 备注 |
|---|
| 拆分重构 | 2026-07-16 | 单篇(350行)拆分为 6 篇,每篇加深 |