Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
少しわかるCiliumのeBPFプログラム
Search
Tomoya Terashima
February 17, 2024
Programming
2
1k
少しわかるCiliumのeBPFプログラム
Tomoya Terashima
February 17, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
Vue 3.6 時代のリアクティビティ最前線 〜Vapor/alien-signals の実践とパフォーマンス最適化〜
hiranuma
2
350
AI駆動開発カンファレンスAutumn2025 _AI駆動開発にはAI駆動品質保証
autifyhq
0
100
TransformerからMCPまで(現代AIを理解するための羅針盤)
mickey_kubo
7
5.8k
エンジニアに事業やプロダクトを理解してもらうためにやってること
murabayashi
0
100
マイベストのシンプルなデータ基盤の話 - Googleスイートとのつき合い方 / mybest-simple-data-architecture-google-nized
snhryt
0
110
Go言語はstack overflowの夢を見るか?
logica0419
0
670
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
1k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
120
20251016_Rails News ~Rails 8.1の足音を聴く~
morimorihoge
3
900
Introduce Hono CLI
yusukebe
6
3.3k
外接に惑わされない自システムの処理時間SLIをOpenTelemetryで実現した話
kotaro7750
0
140
AsyncSequenceとAsyncStreamのプロポーザルを全部読む!!
s_shimotori
1
220
Featured
See All Featured
Building an army of robots
kneath
306
46k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
116
20k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
[RailsConf 2023] Rails as a piece of cake
palkan
57
6k
Making Projects Easy
brettharned
120
6.4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
GraphQLとの向き合い方2022年版
quramy
49
14k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Typedesign – Prime Four
hannesfritz
42
2.8k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
The World Runs on Bad Software
bkeepers
PRO
72
11k
Transcript
少しわかるCiliumのeBPFプログラム eBPF & コンテナ情報交換会 @ 福岡 寺嶋 友哉 1
⾃⼰紹介 ▌寺嶋友哉(てらしま ともや) ▌お仕事 n サイボウズのオンプレKubernetesクラスタの開発運⽤ n Network関連のコンポーネントを主に担当 ▌趣味 n
Network関連ソフトウェアの⾃作 n github.com/terassyi n 将棋観戦 2
⽬次 1. ⽬的 2. Ciliumとは 3. サイボウズでのCiliumの活⽤ 4. Ciliumの通信の仕組み 5.
CiliumのeBPFプログラム 6. eBPFプログラムの処理の追い⽅ 7. まとめ 3
⽬的 ▌対象 n Ciliumやネットワーク分野でのeBPFに興味がある⼈ ▌⽬的 n CiliumがどのようにeBPFを活⽤しているかなんとなくわかる n Ciliumの内部構造の雰囲気を掴む 4
Cilium ▌CNIプラグイン ▌eBPFベースの⾼速かつ柔軟なネットワーク機能を提供 n Network Policy n L4LB n kube-proxy
replacement n Service Mesh n etc… 5
サイボウズでのCiliumの活⽤ ▌⾃社開発のCNIプラグインCoilと組み合わせて利⽤ n https://blog.cybozu.io/entry/2020/10/28/194333 ▌Coil n IPAM + 経路広報 ▌Cilium
n Kube-proxy replacement n Network Policy n L4LB 6
サイボウズでのCiliumの活⽤ ▌現在はL4LB機能にパッチを当てて運⽤中 n CNDT 2023で発表 n CiliumにおけるGeneveプロトコルを⽤いたDSRの実装と導⼊ n 発表時は本番適⽤前だったが、現在は本番でも元気に動作中 ▌UpstreamにPullRequestを提出してマージされた
7 ソースコードレベルで調査する事も多い
Ciliumの通信の仕組み ▌Kube-proxy replacement n Kube-proxy(iptables)をeBPFで置き換えて⾼速な通信を実現 8 Replacing iptables with eBPF
in Kubernetes with Cilium
CiliumのeBPFプログラム概要 9 cil_from_container-<devname> はコンテナごとにアタッチされる cil_from(to)_netdev はノードごとにアタッチされる cilium_*デバイスはデフォルトでは現在使⽤さ れない
各プログラムの役割(ホスト側) ▌cil_from_netdev n ノード外部から来たパケットを最初に処理する n NodePort(LoadBalancer)関連の処理 n 関連公式ドキュメント n cilium/bpf/bpf_host.c#cil_from_netdev
▌cil_to_netdev n ノードから外に出るパケットを処理する n NodePort(LoadBalancer)関連の処理 n cilium/bpf/bpf_host.c#cil_to_netdev 10
各プログラムの概要(コンテナ側) ▌cil_from_container n cil_from_netdevからパケットを引き渡されてパケットを処理する n cilium/bpf/bpf_lxc.c#cil_from_container n Service経由の通信のバックエンド選択とDNAT n Connection
Trackingのエントリ管理 n Network Policyの適⽤ n Etc… 11
通信の追い⽅ ▌Hubbleを使って通信を可視化する n クラスタ内にhubble-relayがいれば全てのノードの通信を⾒れる n いなければ各ノードのcilium-agentに乗り込んでコマンド実⾏ 12 NodePort経由でPodに アクセスした時の通信 どのポイントで観測したか
ソースコードを軽くみてみる 13 ① ② ③ エントリーポイント Tail callして別関数へ Hubbleの観測⽤ に情報を記録
Tail call ▌関数呼び出しのように異なるeBPFプログラムに⾶ぶ n 通常の関数呼び出しと異なり呼び出し元に戻ってこない n 命令数制限を緩和する 14 https://ebpf.io/what-is-ebpf/
CiliumのeBPFコードを追っていくコツ ▌Tail call まみれの処理を追う n エディタの定義ジャンプが効かないのでキーワードで検索していく 15
まとめ ▌ホスト側デバイスに2つのeBPFプログラム n cil_to_netdev n cil_from_netdev ▌コンテナ側のデバイスに1つのeBPFプログラム n cil_from_container ▌どの機能がどのプログラムで処理されるかをなんとなくわかると⾯⽩い
▌Tail callが多いので⾶ぶ関数を⽂字列検索で探しながら読む 16
参考資料 ▌Life of a Packet in Cilium: Discovering the Pod-to-Service
Traffic Path and BPF Processing Logics ▌Replacing iptables with eBPF in Kubernetes with Cilium ▌CiliumにおけるGeneveプロトコルを⽤いたDSRの実装と導⼊ 17