Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Recap: eBPF セッションつまみ食い / eBPF sessions @ KubeCo...

Takashi Kusumi
May 29, 2023
3.6k

Recap: eBPF セッションつまみ食い / eBPF sessions @ KubeCon EU 2023

Kubernetes Meetup Tokyo #58 KubeCon EU 2023 Recap の発表資料です。
https://k8sjp.connpass.com/event/282273/

Takashi Kusumi

May 29, 2023
Tweet

Transcript

  1. Kubernetes Meetup Tokyo Takashi Kusumi <[email protected]> KubeCon EU 2023 Recap

    ηογϣϯͭ·Έ৯͍ 写真: 筆者撮影 @ Tulip Experience Amsterdam
  2. $ whoami ▶ 久住 貴史 / KUSUMI Takashi ▶ ゼットラボ株式会社

    + k8s 上のストレージ(CSI)や GPU を担当 ▶ ログツール「stern」メンテナ ▶ 興味 👀 + オブザーバビリティ、デバッグ 2 eBPF の領域
  3. eBPF とは ▶ extended Berkeley Packet Filter (2014〜) ▶ Linux

    カーネル内で実⾏される仮想マシンの技術 + 検証機 (veri fi er) があり安全性が検証される ▶ tcpdump 等で使われていたパケットフィルタリングを拡張したもの + classic BPF (cBPF) とよばれる + 現在は cBPF も内部的に eBPF に変換されて実⾏される ▶ eBPF はパケットに限らずカーネルの様々な部分にアタッチできる + たとえば tracepoint は 2000 以上ある (Linux 5.15.0) 3 画像出典: https://github.com/ebpf-io/ebpf.io-website/blob/master/src/images/logo-black.svg 名前は「eBee」
  4. クラウドネイティブでの活⽤例 eBPF ベースのコンテナネットワーク(CNI) iptables の代わりに eBPF を使い⾼速・⾼機能を実現 サイドカー不要のサービスメッシュを提供 4 画像出典

    cilium ロゴ: https://cilium.io/brand/ pixie ロゴ: https://github.com/pixie-io/pixie/blob/main/.readme_assets/pixie-horizontal-color.png 他の活⽤例は https://ebpf.io/applications/ をご覧ください Kubernetes 上のアプリケーションの可視化ツール コードの変更やエージェントが不要で トラフィックの可視化や継続的なプロファイリングを実現
  5. Past, Present, and Future of eBPF in Cloud Native Observability

    7 ▶ 内容 + クラウドネイティブのオブザーバビリティ における eBPF の過去・現在・未来 + 適⽤例 Pixie, Parca の紹介 ▶ スピーカー + Natalie Serrino, New Relic + Frederic Branczyk, Polar Signals ▶ オリジナル資料 + 発表動画 / スライド / Sched 出典: https://www.youtube.com/watch?v=pb_eAVAWq2o
  6. eBPF の歴史 9 出典: https://static.sched.com/hosted_ fi les/kccnceu2023/f5/Past%2C%20Present%2C%20and%20Future%20of%20eBPF%20in%20Cloud%20Native%20Observability.pptx.pdf ▶ 〜2014 +

    Classic BPF の時代 + tcpdump, Wireshark ▶ 2014 + BPF が eBPF に + 汎⽤的で⾮常にパワフルに + ツールが充実してくる + libbpf, bpftrace, bcc ▶ 現在 + 様々なプロジェクトで利⽤ Linux Kernel 3.15 で eBPF が実装 ネットワーク (CNI) オブザーバビリティ セキュリティ オブザーバビリティ BPF Compiler Collection
  7. minikube で Pixie を試す ▶ px deploy で k8s にデプロイできる

    + この場合 Web UI はクラウド版 ▶ minikube で簡単に試せる + 📝 docker ドライバは⾮対応 + kvm2 (linux) / hyperkit (mac) を利⽤ ▶ デモアプリを簡単にデプロイできる 👍 + px demo deploy px-sock-shop + デモで有名な Sock Shop も⽤意 11
  8. ユーザ空間のトレース uprobe/uretprobe ▶ eBPF ではユーザ空間プロセスもトレースできる + uprobe / uretprobe という仕組み

    ▶ TLS も 暗号ライブラリのコールをフックすればトレース可 💀 + 📝 OpenSSL / Golang TLS (crypto/tls) など ▶ 多くのパッケージのバイナリはデバッグ情報を持たない ▶ debuginfod という仕組みで HTTP 経由でデバッグ情報を取得 + gdb, delve, bpftrace などのクライアントが対応 12
  9. eBPF オブザバビリティの未来 ▶ パフォーマンスの改善 ▶ アクセシビリティ + どこをどうやって計測するか? ▶ 分析

    + 今は低レイヤの知識が必要 13 ⌛タイムトラベルデバッガ https://engineering.fb.com/2021/04/27/developer-tools/reverse-debugging/
  10. eBPF 201 15 ▶ 内容 + eBPF 開発のベストプラクティス + 「eBPFとは?」

    の次のトピック + 📝 201 は⼤学の授業番号に由来 + ⼊⾨編を 101 という + 201 は 2 年⽬に学ぶこと ▶ スピーカー + Sanjeev Rampal, Red Hat + Donald Hunter, Red Hat ▶ オリジナル資料 + 発表動画 / スライド / Sched 出典: https://www.youtube.com/watch?v=9vUJhbqf4eo
  11. カーネル API の安定性 16 出典: https://static.sched.com/hosted_ fi les/kccnceu2023/58/ebpf201-kubecon2023.pdf ▶ カーネルの

    UAPI は⾮常に安定している + UAPI = User-space API + 基本 API が削除されることはない ▶ eBPF で利⽤する kfunc やトレースポイント は UAPI に含まれない + 安定したインタフェースではない点に注意
  12. eBPF 開発のベストプラクティス 1/2 ▶ 対象とする Linux カーネルの最⼩バージョンを決める + その最⼩バージョンのヘッダを使って開発 +

    バージョンによって使える eBPF の機能が違う ▶ プログラミングスタックを決める + C: libxdp, libbpf (ネイティブライブラリ) + Go: cilium/ebpf, libbpfgo + Rust: Aya, libbpf-rs 17 開発機 対象システム Kernel 5.6 Kernel 5.2 headers Kernel 5.2 Kernel 5.16 app1.c app1.bpf.c Debian RHEL9 図の原案 https://static.sched.com/hosted_ fi les/kccnceu2023/58/ebpf201-kubecon2023.pdf
  13. eBPF 開発のベストプラクティス 2/2 ▶ ポータブルなカーネル定義を使う + 最⼩バージョンの vmlinux.h から必要なものだけを残して定義 +

    ▶ カーネルのバージョンや各機能の有効性をチェック ▶ eBPF プログラムの管理インフラを使う + Red Hat の開発している bpfd の紹介 + 複数の eBPF プログラムの扱いや権限の問題を解決 18 出典 https://static.sched.com/hosted_ fi les/kccnceu2023/58/ebpf201-kubecon2023.pdf
  14. Life Without Sidecars - Is eBPF's Promise Too Good to

    Be True? 20 ▶ 内容 + eBPF はサイドカーを置き換えるか? + スピーカーは Linkerd の開発者 + サービスメッシュは今でもサイド カー形式が最適という結論 + サイドカーの利点がまとまっている ▶ スピーカー + Zahari Dichev, Buoyant ▶ オリジナル資料 + 発表動画 / スライド / Sched 出典: https://www.youtube.com/watch?v=onQuRBy5rgo
  15. eBPF の制限 ▶ ブロックできない ▶ ループの制限 ▶ 命令数の制限 ▶ 状態管理が限られる

    21 eBPF だけではサービスメッシュは実装できない 😢 📝 サイドカーレスの Cilium サービスメッシュも Envoy を利⽤ 画像出典: https://github.com/isovalent/ebeedex/blob/main/images/new-bee.png
  16. ノード上の共有プロクシーモデル 22 出典 https://static.sched.com/hosted_ fi les/kccnceu2023/f7/zahari-dichev-ebpf-talk.pdf ▶ ノード上のプロクシーを共有 + Cilium

    サービスメッシュはこれ ▶ Pod →プロクシーは eBPF でカー ネル内で処理できる + ユーザ空間のコピーが⾛らない ▶ ⽋点: 分離されていない + 公平性やリソース枯渇時の問題 + セキュリティ上の課題 + 問題が起きたときの影響
  17. Tales from an eBPF Program’s Murder Mystery 25 ▶ 内容

    + eBPF 周りで起きたトラブルのデバッグ + eBPF を使うCilium と Datadog Agent の TC のレースが原因 + デバッグ時に⾒るべきポイントがわかる ▶ スピーカー + Hemanth Malla, Datadog + Guillaume Fournier, Datadog ▶ オリジナル資料 + 発表動画 / スライド / Sched 出典: https://www.youtube.com/watch?v=YK7GyEJdJGo
  18. Veri fi able GitHub Actions with eBPF 26 ▶ 内容

    + eBPF を使ったセキュリティツール Tracee で GitHub Action の悪意ある PR の実⾏を防⽌・検出 ▶ スピーカー + Jose Donizetti, Aqua ▶ オリジナル資料 + 発表動画 / スライド / Sched 出典: https://www.youtube.com/watch?v=6vNt9JMU9p4 出典 https://github.com/aquasecurity/tracee/blob/main/docs/images/tracee.png
  19. The Next Log4jshell?! Preparing for CVEs with eBPF! 27 ▶

    内容 + eBPF を使ったセキュリティツール Tetragon の紹介 + Cilium プロジェクトの⼀部 ▶ スピーカー + Natalia Reka Ivanko, Isovalent + John Fastabend, Isovalent ▶ オリジナル資料 + 発表動画 / スライド 出典: https://www.youtube.com/watch?v=u8HKg5pENj4 出典 https://github.com/cilium/tetragon/blob/main/docs/content/en/docs/logo.png
  20. まとめ ▶ buzzword から具体的な課題解決の技術へ ▶ eBPF の適⽤範囲が固まってきた + ネットワーク +

    オブザーバビリティ + セキュリティ ▶ eBPF の課題・制限等の知⾒が共有されてきた + 互換性の問題 + eBPF プログラム間の⼲渉 + eBPF のサイドカーレス vs. 従来のサイドカー 29 出典: https://github.com/isovalent/ebeedex/blob/main/images/webinar-bee.png