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
160
少しわかるCiliumのeBPFプログラム
Tomoya Terashima
February 17, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
170
見た目から始める生産性向上
ikumatadokoro
10
1.3k
Behind VS Code Extensions for JavaScript / TypeScript Linnting and Formatting
unvalley
6
1.1k
SwiftUIで使いやすいToastの作り方 / How to build a Toast system which is easy to use in SwiftUI
lovee
3
160
Build Apps for iOS, Android & Desktop in 100% Kotlin With Compose Multiplatform (mDevCamp 2024)
zsmb
0
420
Snowflakeで眠ったデータを起こそう!
estie
0
140
SIMD Parallel Programming with the Vector API
josepaumard
0
220
VS Code をプロダクトにどう取り込むか
onomax
1
640
ServerAction で Progressive Enhancement はどこまで頑張れるか? / progressive-enhancement-with-server-action
takefumiyoshii
6
400
Elm 0.19.0 Changes
bkuhlmann
0
500
Scalable Customer Journey Orchestration (CJO)
lewuathe
0
410
Implementing Design Systems in Swift
seyfoyun
1
440
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
29
6.4k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
123
39k
How STYLIGHT went responsive
nonsquared
92
4.8k
Thoughts on Productivity
jonyablonski
59
3.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
660
120k
Six Lessons from altMBA
skipperchong
22
3k
Faster Mobile Websites
deanohume
300
30k
Become a Pro
speakerdeck
PRO
12
4.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
32
46k
Side Projects
sachag
451
41k
Being A Developer After 40
akosma
66
580k
No one is an island. Learnings from fostering a developers community.
thoeni
16
2.1k
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