現在、私が構築したKubernetesクラスターの1つのワーカー上で、140本のeBPFプログラムがLinuxカーネル内で実行されています— すべてのパケットをルーティングし、デバイスアクセスを制御し、メトリクスを収集しています。カーネルを再コンパイルしたり、モジュールをロードしたりしていません
。その文が、私がeBPF From Scratchを書いた全体の理由です:無料の、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
それが何が違うのか
- すべては実際のハードウェアでテストされています — Kubernetesクラスターがkernel 6.17とCilium 1.19(kube-proxyなし、数百のBPFプログラムが実行されます)で動作しています。実験室全体がそのものです。曖昧な図はありません;実際に実行されているプログラムを解析します
- 公式ドキュメントに基づいています — 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:一度コンパイルすれば、すべてのカーネルで実行
第二部 — 追跡
- bpftraceを一行でマップ、カウント、ヒストグラムに
- uprobe、USDT、ホストからポッドを検査する
第III部 — 実際のツールの書き方
- libbpf + CO-RE: 自分でeBPFツールを書く(C)
- cilium/ebpf: GoからeBPFをロード
第IV部 — ネットワーク
- XDP: 最も早いポイントでパケットを処理する — ファイアウォールの書き方
- tc/sched_cls とライブ Cilium データパスの解析
- tc プログラムを自分で書く:
__sk_buffと tcx チェーン
第 V 篇 — セキュリティ
- LSM BPF: カーネル内で直接セキュリティを強制
- seccomp-bpf: 各コンテナでシステムコールをフィルタリング
- テトラゴン方式:
bpf_send_signal
で観察から強制へ__JHSNS_SEG_809e5eff_60__第 VI 篇 — 可観測性
- perf_eventを使用したCPUプロファイリング(フラメングラフの基礎)
- CPU外とスケジューラ遅延
- Hubbleの内部:eBPFイベントからクラスター全体のネットワークフローへ
第VII部 — 全部まとめて
- 事例研究:CiliumのeBPFデータパスを通るパケット
- 締めくくり:
connmonというノード全体のTCP接続モニターライティング
対象者
バックエンド / プラットフォーム / SRE / セキュリティ関係者で「CiliumはeBPFでそれをやる」と聞きっぱなしで、実際に理解し — そして書く — ことができるようにしたい人。Linuxのコマンドラインで快適である必要がある;他のことはゼロから構築される。
何か読んでいただければ、本当にフィードバックを喜びます — 明確だったこと、不明確だったこと。それが役立ったら、⭐をリポジトリはとても役立ちます.
ここから始めてください→ https://kkloudtarus.net/en/blog/series/ebpf-from-scratch












