$30 off During Our Annual Pro Sale. View Details »

eBPFは何が嬉しいのか?

 eBPFは何が嬉しいのか?

Kubernetes Meetup Tokyo #55 (https://k8sjp.connpass.com/event/267620/) での発表

発表動画: https://www.youtube.com/watch?v=wlYHa1gKfBI

Yutaro Hayakawa

December 23, 2022
Tweet

More Decks by Yutaro Hayakawa

Other Decks in Technology

Transcript

  1. Self Introduction • 早川侑太朗 (@YutaroHayakawa) • Isovalent (2022 ~) ◦

    Ciliumの開発 (Datapathチーム) ◦ マルチクラスタ (ClusterMesh), BGP, SRv6, etc… • LINE Corporation (2019 ~ 2021) ◦ 内製ロードバランサの開発・運用 ◦ 大規模LBaaSの成長期に体験した二つの問題
  2. Hook / Event カーネルの中でeBPFを実行できる場所 何かしらのイベントを契機にeBPFが実行される 代表的なフック - Socket => socketに対するデータの入出力をフィルタする

    - Syscall => システムコールの呼び出しをトレース・フィルタ - kprobe / ftrace => カーネルの関数呼び出しなどをトレース - TC / XDP => NIC入ったパケットを書き換え・ドロップ - TCPの輻輳制御, スケジューラ, etc
  3. eBPF Map eBPFプログラムとユーザ空間から読み書きできるデータ構造 => Hash, Array, Trie, Per-CPU Array, etc…

    ユーザ空間とeBPFの情報のやりとりに使える (例えるならRedisのようなもの?)
  4. カーネル開発のつらみ - プログラミング - カーネル空間は色んな意味で「安全」ではない Cプログラミングそのものの辛み (メモリ管理等) メモリアクセス違反 => マシンそのものが停止

    ハング (デッドロック、無限ループ) => マシンそのものが停止 メモリリーク => 誰もリークしたメモリを回収しない セキュリティホールを作る => 権限Maxな状態で攻撃に晒される
  5. eBPFで作られているのはユーザにとって重要か? 重要だと言える カーネル開発のつらみと結局は関係している • プログラミングの難易度が高い => バグや脆弱性が紛れ込みやすい • 互換性が担保されない =>

    カーネルのアップデートがリスク、メンテされなくなれば 短い期間ですぐ使えなくなってしまう • デリバリが遅い => 欲しい機能がすぐ手に入らない
  6. ケーススタディ - Falco - FalcoはなぜカーネルモジュールからeBPFベースの 実装に移行しているのか? • Falcoのイベントコレクタはカーネールモジュー ルベースだった •

    ユーザからのフィードバックとして安定性、セ キュリティ、互換性への懸念が示された • Sysdig and Falco now powered by eBPF
  7. まとめ eBPFは何が嬉しいのか? 開発者目線 • 安全なカーネル開発ができるようになる • カーネル拡張の保守が楽になる • 開発・デリバリのスピードが上がる エンドユーザ目線

    • カーネル拡張の導入がより「安全」になる • 互換性やプロダクトの持続性に対する懸念が軽減される • 欲しい機能が素早く手に入る