目前,在我所建立的 Kubernetes 集群的一個工作節點上,140 個 eBPF 程序正在 Linux 内核中運行 — 路由每一個封包,控制設備存取,收集指標。沒有人重新編譯過內核。沒有人載入過模組.
這句話就是我寫作 eBPF 從頭開始 的整個原因:一個免費的、22 章節系列,將引導你從"eBPF 虛擬機器到底是什麼" 到 撰寫和載入你自己的 eBPF 程式 — 以 C 語言搭配 libbpf + CO-RE,以及從 Go 語言搭配 cilium/ebpf.
👉 免費閱讀(英文): https://kkloudtarus.net/en/blog/series/ebpf-from-scratch
💻 來源代碼: https://github.com/nghiadaulau/ebpf-from-scratch
是什麼讓它不同
- 所有內容均在實際硬體上進行測試 — 一個運行核心版本 6.17 和 Cilium 1.19 (無 kube-proxy, 數百個 BPF 程序運行) 的 Kubernetes 集群是整個實驗室。沒有模糊的圖表;我們分析正在實際運行的程序.
- 基於官方文件 — ebpf.io, kernel.org, libbpf, cilium. 声明會被驗證,不是直覺感受.
- 深入探討,不是表面 — 我們深入研究寄存器,驗證器的安全證明,JIT,映射,以及程序經歷的確切生命週期.
- 它還是全雙語(英文 + 越南文).
快速品嚐 — 每個 eBPF 概念都是你可以 看到 在實際節點上:
sudo bpftool prog show id 2871
2871: sched_cls name tail_no_service_ipv4 tag fe7bcb57c001d434 gpl
xlated 4920B jited 2778B memlock 8192B map_ids 171,631
btf_id 758
xlated = 驗證器接受後的字節碼。jited = 原生機器碼。map_ids = 它如何保持狀態。這是eBPF,不在幻燈片上 — 正在運行。
你將學到(7部分,22章)
第一部分 — 基礎
- eBPF 虛擬機:暫存器、指令集和位元碼
- 驗證器:為何 eBPF 不會讓內核崩潰
- 映射:記憶體和通往使用者空間的橋樑
- 程式類型和鉤子:你掛載的位置、你看到的内容
- BTF 和 CO-RE:一次編譯,跨所有內核執行
第二部分 — 追蹤
- 從一行指令到映射、計數和直方圖
- uprobe、USDT,以及從主機檢查Pod
第三部分 — 寫實際的工具
- libbpf + CO-RE:自己寫一個eBPF工具(C)
- cilium/ebpf:從Go載入eBPF
第四部分 — 網路
- XDP:在最早期處理封包 — 寫一個防火牆
- tc/sched_cls 和分析實時 Cilium 資料路徑
- 自行編寫 tc 程序:
__sk_buff和 tcx 鏈接
第五部分 — 安全性
- LSM BPF:在內核中實施安全性權限
- seccomp-bpf:過濾每個容器的系統調用
- Tetragon 方法:從觀察到實施,使用
bpf_send_signal
第六部分 — 可觀察性
- 使用perf_event進行CPU剖析(火焰圖的基礎)
- CPU離線與調度器延遲
- 深入Hubble:從eBPF事件到整個集群的網絡流量
第七部分 — 結合使用
- 案例研究:一個通過Cilium的eBPF數據路徑的封包
- 總結:編寫
connmon,一個節點範圍的TCP連接監控器
誰適合這個
後端 / 平台 / SRE / 安全人員,他們一直聽到「Cilium 用 eBPF 做這個」並且想真正理解——並 撰寫 這件事。你將需要對 Linux 命令列感到舒適;其他所有內容都是從零開始建立的。
如果你讀了任何內容,我真心希望得到回饋——什麼清晰,什麼不清晰。並且如果它有用,請在repo 很有用。
從這裡開始→ https://kkloudtarus.net/en/blog/series/ebpf-from-scratch












