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
1.3k
少しわかるCiliumのeBPFプログラム
Tomoya Terashima
February 17, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
SQL Server 2025 LT
odashinsuke
0
120
re:Invent 2025 トレンドからみる製品開発への AI Agent 活用
yoskoh
0
570
Go コードベースの構成と AI コンテキスト定義
andpad
0
150
AIエージェントの設計で注意するべきポイント6選
har1101
6
2.9k
Developing static sites with Ruby
okuramasafumi
1
340
The Art of Re-Architecture - Droidcon India 2025
siddroid
0
160
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
330
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.3k
GoLab2025 Recap
kuro_kurorrr
0
810
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
180
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
310
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
7
4.2k
Featured
See All Featured
How to build a perfect <img>
jonoalderson
1
4.8k
What's in a price? How to price your products and services
michaelherold
246
13k
How to make the Groovebox
asonas
2
1.9k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
[SF Ruby Conf 2025] Rails X
palkan
0
680
Discover your Explorer Soul
emna__ayadi
2
1k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
44
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
130
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
A Modern Web Designer's Workflow
chriscoyier
698
190k
GitHub's CSS Performance
jonrohan
1032
470k
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