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

eBPF Introduction

eBPF Introduction

Oracle Cloud Hangout Cafe Season7 #6 資料

oracle4engineer

November 08, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. eBPF Introduction Oracle Cloud Hangout Café Season7 #6 Yutaka Ichikawa

    Oracle Corporation Japan Solutions Architect Nov 8, 2023
  2. Copyright © 2023, Oracle and/or its affiliates 2 Profile Name

    • Yutaka Ichikawa/市川 豊 Belong • Solutions Architect Role • Principal Cloud Solution Engineer SNS • X/GitHub/Qiita:cyberblack28 Blog • https://cyberblack28.hatenablog.com/ Materials • https://speakerdeck.com/cyberblack28/ Community • Oracle Cloud Hangout Cafe #ochacafe • CloudNative Days Tokyo #cndt #o11y2022 Certified • Certified Kubernetes Administrator • Certified Kubernetes Application Developer • Certified Kubernetes Security Specialist • Kubernetes and Cloud Native Associate Publications 12/11-12 ハイブリッド開催 https://event.cloudnativedays.jp/cndt2023
  3. Copyright © 2023, Oracle and/or its affiliates 3 ThinkIT +

    Oracle Cloud Hangout Cafe Oracle Cloud Hangout Café ダイジェスト • 第1回「CI/CD最新事情」 2023年1月 (公開中) • 第2回「マイクロサービスの認証・認可とJWT」 2023年2月(公開中) • 第3回「Kubernetes Operator 超入門」 2023年3月(公開中) • 第4回「Kubernetes のセキュリティ」 2023年4月(公開中) • 第5回「実験!カオスエンジニアリング」 2023年5月(公開中) • 第6回「Service Mesh がっつり入門!」 2023年6月(公開中) https://thinkit.co.jp/series/10728
  4. Copyright © 2023, Oracle and/or its affiliates 4 ThinkIT +

    Oracle Cloud Hangout Cafe Oracle Cloud Hangout Café ダイジェスト • 第1回「Kubernetes 超入門」 2023年12月 • 第2回「IaC のベストプラクティス」 2023年1月 • 第3回「Kubernetesのネットワーク」 2023年2月 • 第4回「Pythonで作るAPIサーバー」 2023年3月 • 第5回「Observability 再入門」 2023年4月 • 第6回「Kubernetes のオートスケーリング」 2023年5月 第二弾 連載開始
  5. Copyright © 2023, Oracle and/or its affiliates 5 1. What’s

    eBPF • eBPF とは? • カーネルモジュールと eBPF • BPF と eBPF • eBPF 開発 Agenda 2. eBPF 事情 • KubeCon + CloudNativeCon EU 2023 • 「Past, Present, and Future of eBPF in Cloud Native Observability」 • 「Life Without Sidecars - ls eBPF's Promise Too Good to Be True ?」 3. eBPF をベースとしたプロダクト 3. Networking / Security / Observability 4. Scalable Secure High Performance CNI Plugin 5. Sidecar - free Mesh & Ingress 6. Network Observability 7. Security Observability Runtime Enforcement 8. Runtime Enforcement 9. Runtime Security and Forensics using eBPF 10. Open Source Kubernetes observability for developers
  6. Copyright © 2023, Oracle and/or its affiliates 7 What’s eBPF

    ? eBPF とは? eBPF(Extended Berkeley Packet Filter)は、 Linux カーネルのソースコードの変更やモジュールを追加することなく Linux カーネル内部でプログラムを実行できる技術
  7. Copyright © 2023, Oracle and/or its affiliates 8 What’s eBPF

    ? eBPF とは? 出典 : Brendan Gregg's Blog https://www.brendangregg.com/blog/2019-01-01/learn-ebpf-tracing.html eBPF does to Linux what JavaScript does to HTML. 訳:JavaScript が HTML に対して行うのと同じように、eBPF は Linux に対して行います。 eBPF には、Linux カーネルの拡張を書くた めのフレームワークがある
  8. Copyright © 2023, Oracle and/or its affiliates 9 What’s eBPF

    ? カーネルモジュールと eBPF Linux カーネル空間で稼働し、Linux カーネルの機能を拡張する技術 Linux カーネルに直接ロードされて、新しい機能の追加、 既存機能を変更するプログラム Linux カーネルのサブセットとして、Linux カーネルの拡 張や制御を実行できるプログラム • プログラミングのハードルが高い • 後方互換性を担保しないガバナンスによりメンテナンスが厳しい • レビュー条件や開発者交渉などが厳しく、アップストリームのハー ドルが高い • アップストリームからディストリビューションのリリースまで時間が長い • カーネルモジュールプログラミングに比べて、ハードルが低い • eBPF プログラムは後方互換性を担保されている • 後方互換性担保によるアップストリームの不要 • アップストリーム不要のため、リリースも早くできる
  9. Copyright © 2023, Oracle and/or its affiliates 10 What’s eBPF

    ? BPF と eBPF 2014年 Linux カーネル 3.14 から BPF をより汎用的にするための拡張として eBPF が誕生 BPF ※現在では BPF といえば、 eBPF を示すことが多く、以前の BPF は、classic BPF (cBPF) ともいわれる Linux カーネル 2.1.75 に移植されて、 ネットワークにおけるパケットフィルタリングや キャプチャーを中心としていた eBPF ではネットワークだけでなく様々なカーネル 内のイベントをフックして処理できるようになった
  10. Copyright © 2023, Oracle and/or its affiliates 11 What’s eBPF

    ? eBPF 開発 eBPF は、C 言語でプログラミングして、Clang というコンパイラを利用して、bytecode というプログラムを生成する bytecode は、Linux カーネル内で動作する独自のレジスタマシンと命令セットを持ち、 アーキテクチャ非依存な仮想マシン。
  11. Copyright © 2023, Oracle and/or its affiliates 12 What’s eBPF

    ? eBPF 開発 bytecode を Linux カーネルにロード 主要なライブラリ - libbpf (C) - cilium/ebpf (Go) - libbpf-rs (Rust) ELFファイルを加工して、最終的に Syscall に渡す=ロード ※ユーザスペースでELFフォーマット のファイルをカーネルが読み込めるよ うにする処理
  12. Copyright © 2023, Oracle and/or its affiliates 13 What’s eBPF

    ? eBPF 開発 ロードされた bytecode を Verifier で検証、JIT Compiler で各CPUの命令に合わせて、bytecode を変換 bytecode を Verifier で検証
  13. Copyright © 2023, Oracle and/or its affiliates 14 What’s eBPF

    ? eBPF 開発 bytecode の実行は、フックからイベントドリブンに呼び出されて実行 主なフック • Socket : socket のデータ入出力を契 機にフィルタする • Syscall : システムコールの呼び出しを 契機にトレースやフィルタする • Kprobe / ftrace : カーネルの関数の呼 び出しを契機にトレースなど行う • TC / XDP : NIC のパケット入出を契 機にパケットに対する処理を行う etc Program types : https://github.com/iovisor/bcc/blob/master/docs/kernel- versions.md#program-types
  14. Copyright © 2023, Oracle and/or its affiliates 15 What’s eBPF

    ? eBPF 開発 Linux Extended BPF (eBPF) Tracing Tools BCC (BPF Compiler Collection) bpftrace https://github.com/iovisor/bcc https://github.com/iovisor/bpftrace BCC および bpftrace ツールからも分かるように eBPF では多くのイベントを取得できる
  15. Copyright © 2023, Oracle and/or its affiliates 18 What’s eBPF

    ? eBPF 開発 eBPF Maps は、ユーザプログラムとカーネルプログラムの間でデータを共有する仕組み Key &Value ペアのデータ構造をベースに配列やハッシュテーブルなどのタイプ を利用して、ユーザプログラムとカーネルプルグラム間でデータを共有、読み取り、 更新が可能 Maps types : https://github.com/iovisor/bcc/blob/master/docs/kernel- versions.md#map-types
  16. Copyright © 2023, Oracle and/or its affiliates 21 eBPF 事情

    KubeCon + CloudNativeCon EU 2023 https://kccnceu2023.sched.com/event/1Hyak/past-present-and- future-of-ebpf-in-cloud-native-observability-frederic-branczyk- polar-signals-natalie-serrino-new-relic
  17. Copyright © 2023, Oracle and/or its affiliates 22 eBPF 事情

    「Past, Present, and Future of eBPF in Cloud Native Observability」 キャズムを超える どうやってここまで来たのか? Present Past
  18. Copyright © 2023, Oracle and/or its affiliates 23 eBPF 事情

    「Past, Present, and Future of eBPF in Cloud Native Observability」 2014年、eBPF は新しく、非常に強力ではあるが、いくつかの 難点がある • eBPF のプログラムを書くことは、技術的に難しい • それはまだ比較的に不明瞭 • 大抵の人は、eBPFをパケットフィルターとして捉える • eBPF のプログラムを書くハードルが下がった • 多くの人が試し始める • ネットワークを超えたユースケースが認識されつつある
  19. Copyright © 2023, Oracle and/or its affiliates 24 eBPF 事情

    「Past, Present, and Future of eBPF in Cloud Native Observability」 Meta, Google, Cloudflare, Netflix, Dropbox, Android, Alibaba, Datadog, Trip.com, Microsoft, Seznam, CapitalOne, Apple, Sky, Walmart, Huawei, Ikea 導入の爆発的増加
  20. Copyright © 2023, Oracle and/or its affiliates 25 eBPF 事情

    「Past, Present, and Future of eBPF in Cloud Native Observability」 パフォーマンス: 大量のデータを読み取り、広範な調査を効 率的にサポート アクセシビリティ: 何を、どこで、どのように計測するかを特定 分析: 生データの低レベルでの大量の解釈 次に取り組む可能性のあるフロンティアは何か? eBPF をベースとした広範囲なオブザバビリティの実現 Future
  21. Copyright © 2023, Oracle and/or its affiliates 26 eBPF 事情

    「Life Without Sidecars - ls eBPF's Promise Too Good to Be True ?」 https://kccnceu2023.sched.com/event/1HyZd
  22. Copyright © 2023, Oracle and/or its affiliates 27 eBPF 事情

    Service Meshについて アプリケーションとプロキシ機能の分離 アプリケーションプロセスごとに専用のプロキシをサ イドカーとして配置、そのプロキシにネットワーク周 りを対応させる App Proxy container container Pod プロキシ機能の中央管理 プロキシ機能は大量になるのでコンフィグレーションの管理コスト が増加。中央にプロキシ機能を管理するコントロールプレーンを 配置して効率的に管理。 補足
  23. Copyright © 2023, Oracle and/or its affiliates 28 eBPF 事情

    サイドカーモデル サイドカーレスモデル 全てのトラフィックは、 サイドカー経由する プロキシが必要なトラフィックのみ Envoy Proxy を経由 各 Pod に Envoy Proxy がある 各 Node に Envoy Proxy がある サイドカーとしてのプロキシコンテナが無 いことで起動時間やノードのリソース消 費を低減 ユーザ空間とカーネル空間切り替えの オーバヘッドも低減 Service Mesh における Ciliumをベースとしたサイドカーレスの特徴 補足
  24. Copyright © 2023, Oracle and/or its affiliates 29 eBPF 事情

    Pod App Pod App Pod App Pod App Pod App Pod App Pod App Pod App Pod App Node Pod App Pod App Pod App Node Pod App Pod App Pod App Pod App Pod App Pod App サイドカーモデル サイドカーレスモデル サイドカーとしてのプロキシコンテナが無いことで起動時間やノードのリソース消費を低減 補足
  25. Copyright © 2023, Oracle and/or its affiliates 30 eBPF 事情

    https://isovalent.com/blog/post/cilium-service-mesh/ 補足 Isovalent 社による Cilium / Cilium + Envoy / Cilium + Istio でのパフォーマンス比較表
  26. Copyright © 2023, Oracle and/or its affiliates 31 eBPF 事情

    「Life Without Sidecars - ls eBPF's Promise Too Good to Be True ?」 • カーネルをプログラム可能にするためのインターフェース • イベント駆動型、カーネル空間で実行 • 効率 - 開発者はユーザー空間へのデータ転送を回避し、 コンテキストの切り替えを最小限に抑える • 安全 - プログラムは厳格な要件に従うため、カーネルを 停止することは不可能です eBPF 概要
  27. Copyright © 2023, Oracle and/or its affiliates 32 eBPF 事情

    「Life Without Sidecars - ls eBPF's Promise Too Good to Be True ?」 Traditional reverse proxy & Drawbacks • シスコールのコスト • 遅延発生 • データコピーコスト
  28. Copyright © 2023, Oracle and/or its affiliates 33 eBPF 事情

    「Life Without Sidecars - ls eBPF's Promise Too Good to Be True ?」 Sockmap • eBPF の sock map は、このシナリオをカバーするデータ 構造 • ソケットへの参照を保存し、eBPF プログラムが TCP パ ケットを完全にカーネル空間へのリダイレクトを可能にする • リバースプロキシとロードバランサを高速化するために使用 可能
  29. Copyright © 2023, Oracle and/or its affiliates 34 eBPF 事情

    「Life Without Sidecars - ls eBPF's Promise Too Good to Be True ?」 Sockmap based proxy & Advantages • カーネルからユーザー空間へのデータのコピーが無い • コンテキスト切り替えが無い • 柔軟性がある
  30. Copyright © 2023, Oracle and/or its affiliates 35 eBPF 事情

    「Life Without Sidecars - ls eBPF's Promise Too Good to Be True ?」 The sidecar is going away ? (サイドカーは不要 ?)
  31. Copyright © 2023, Oracle and/or its affiliates 36 eBPF 事情

    「Life Without Sidecars - ls eBPF's Promise Too Good to Be True ?」 eBPF プログラム • ブロックできない • ループ制限 • 命令数の制限 • 実行できる全てのパスを知る必要がある • 状態管理の制限 難しいこと • mTLS ハンドシェイク • リトライ、タイムアウト、サーキットブレーキング • L7 プロトコル解析 • デバッグ eBPF だけでは、 サービスメッシュの実装はできない サイドカーレスの Cilium サービスメッシュも Envoy を利用 A Service mesh needs a proxy サービスメッシュにはプロキシが必要
  32. Copyright © 2023, Oracle and/or its affiliates 37 eBPF 事情

    「Life Without Sidecars - ls eBPF's Promise Too Good to Be True ?」 ノードごとにプロキシを共有 • リソースを大量に消費するプロキシを使用すれば、より効率的になる • リソース不足と公平性への懸念 • リソースを最適化する精度が弱い • 機密情報を隔離できない • 問題が発生した場合の影響範囲が大きい
  33. Copyright © 2023, Oracle and/or its affiliates 38 eBPF 事情

    「Life Without Sidecars - ls eBPF's Promise Too Good to Be True ?」 サイドカー優位性 • リソースの消費量はアプリケーションに応じて変化 • プロキシの障害は特定のインスタンスに限定される • メンテナンスが容易でリスクが軽減される • セキュリティ境界が非常に明確であり、隔離性が非常に 高い • シンプルモデル
  34. Copyright © 2023, Oracle and/or its affiliates 39 eBPF 事情

    「Life Without Sidecars - ls eBPF's Promise Too Good to Be True ?」 よく言われること • サイドカーは、リソースを消費する • 余分な遅延が発生する • サービスメッシュは、まもなくカーネルに組み込まれる • マルチテナントプロキシーの将来性 • Linkerd のプロキシは、特にサイドカーとして機能するように最適化 されており、リソース消費を抑える • サイドカーによって発生するレイテンシは、大抵アプリがサイドカーの 利用を妨げる場合に比べれば少ない • カーネルに組み込むことはできても、メッシュ利用は難しいと思われる • マルチテナントプロキシは前進すると思うが、プロキシの操作が難しく、 セキュリティと安定性に懸念がある
  35. Copyright © 2023, Oracle and/or its affiliates 40 eBPF 事情

    「Life Without Sidecars - ls eBPF's Promise Too Good to Be True ?」 結論 • eBPF は適切なスタック レベルで多くの利点をもたらす • 我々はすでにそこにいる • サイドカーはこれからも続く
  36. Copyright © 2023, Oracle and/or its affiliates 41 eBPF 事情

    サイドカー、サイドカーレス、どちらがということもなく共存していくようにも思えるので、 適材適所として選択する方向もあるのではという感想(個人意見)
  37. Copyright © 2023, Oracle and/or its affiliates 45 eBPF をベースとしたプロダクト

    Networking / Security / Observability こうした仕組みを軸に eBPF ベースの セキュリティやオブザバビリティプロダクトを 利用する流れが KubeCon + Cloud Native Con などで注目されている • 高いパフォーマンス カーネルレベルで動作するため、オーバーヘッドが小さい • セキュリティの向上 ネットワークポリシーやトラフィック制御、プロセス監視などによるクラスタ全体のセキュリティ向上 • 柔軟な可観測性 詳細なメトリクスやネットワークトラフィックの観測が可能で、問題の特定と解決が容易
  38. Copyright © 2023, Oracle and/or its affiliates 46 eBPF をベースとしたプロダクト

    Networking / Security / Observability Observability Security Networking
  39. Copyright © 2023, Oracle and/or its affiliates 47 eBPF をベースとしたプロダクト

    Scalable Secure High Performance CNI Plugin iptables が kube-proxy 経由で実行していたことを効率的なハッシュテーブルを使用して eBPF が代替 • eBPF をベースにしたネットワーク、オブザバビリティ、セキュリティソリューション • L3/L4/L7プロトコルに対応 • Pod 間、外部サービス間のロードバランシングやネットワークポリシーを強制
  40. Copyright © 2023, Oracle and/or its affiliates 48 eBPF をベースとしたプロダクト

    2023年10月11日 CNCF は、Cilium の卒業を発表 • 2021年10月に Incubating CNCF プロジェクト • 現在は7つの異なる企業からのメンテナ、800人以上のコントリビューター • Bell Canada、Bloomberg、DB Schenker、S&P Global、Sky、および The New York Times を含む企業から の46の公開ケーススタディ • コミット数の点で、Kubernetes のみに次ぐ、CNCF プロジェクトとして2番目にアクティブ https://www.cncf.io/announcements/2023/10/11/cloud-native-computing-foundation-announces-cilium-graduation/
  41. Copyright © 2023, Oracle and/or its affiliates 49 eBPF をベースとしたプロダクト

    認定資格 https://training.linuxfoundation.org/ja/certification/cilium-certified-associate-cca/
  42. Copyright © 2023, Oracle and/or its affiliates 50 eBPF をベースとしたプロダクト

    iptables iptabels kube-proxy が iptables の設定(Service A の ルーティングルール) ServiceA Source Pod Destination Pod を ServiceA で公開 ServiceA ⇒ xx.xx.xx.xx:8080 ServiceA ⇒ xx.xx.xx.xx:8080 ServiceA ⇒ xx.xx.xx.xx:8080 xx.xx.xx.xx:8080 xx.xx.xx.xx:8080 xx.xx.xx.xx:8080 以下のいずれかへ送信(DNAT) xx.xx.xx.xx xx.xx.xx.xx xx.xx.xx.xx iptables は、Service の IP から Destination Pod の IP アドレスへの変換をシーケンシャルに行うため、テーブ ル情報に比例してオーバヘッドが発生し、ボトルネックに なり得る Destination Pod
  43. Copyright © 2023, Oracle and/or its affiliates 51 eBPF をベースとしたプロダクト

    Cilium ServiceA Source Pod Agent 以下のいずれかへ送信(DNAT) xx.xx.xx.xx:8080 xx.xx.xx.xx:8080 xx.xx.xx.xx:8080 Cilium Agent が Service を管理 Service Map Conntrack Map Destination Pod を ServiceA (xx.xx.xx.xx:80) で公開 xx.xx.xx.xx:8080 xx.xx.xx.xx:8080 xx.xx.xx.xx:8080 ID Frontend Type Backend ID Backend IP 1 xx.xx.xx.xx:80 ClusterIP 1 xx.xx.xx.xx:8080 1 xx.xx.xx.xx:80 ClusterIP 2 xx.xx.xx.xx:8080 1 xx.xx.xx.xx:80 ClusterIP 3 xx.xx.xx.xx:8080 Service Map: • 定義されたサービスとそれに関連するバックエンドのマッピング 情報を持つeBPFのマップ • 「どのサービスがどのバックエンド( Pod やコンテナ)に関連し ているか」を知る Conntrack Map: • 通信の状態やメタデータを追跡するためのeBPFのマップ • 「特定の通信や接続の状態は何か」という情報を追跡する カーネル内のプログラムによる ID をベースとしたフィルタリングでパ フォーマンスが向上
  44. Copyright © 2023, Oracle and/or its affiliates 52 eBPF をベースとしたプロダクト

    Sidecar - free Mesh & Ingress • eBPF と Istio の統合 • Sidecar-free によるサービスメッシュレイヤーの複雑さとオーバーヘッドを低減 • 様々なコントロールプレーンやオブザバビリティプロダクトをサーポート
  45. Copyright © 2023, Oracle and/or its affiliates 53 eBPF をベースとしたプロダクト

    Network Observability Cilium と Hubble から取得できる情報からサービス間通信の依存関係を可視化 Cilium • L3/L4 の TCP コネクション • L7 通信や HTTP リクエスト etc Hubble • L3/L4/L7 のサービス間通信状況 • DNS クエリの通信状況 • Network Policy の拒否状況 etc
  46. Copyright © 2023, Oracle and/or its affiliates 54 eBPF をベースとしたプロダクト

    Security Observability Runtime Enforcement Kubernetes のワークロードに紐づけてランタイムセキュリティとオブザバビリティを強化 Linux カーネルの情報や イベント情報を収集 Tetragon Agent から Metrics や Log などに 出力 •Tetragonとは?: • Cilium Project が開発する OSS。 • 「セキュリティの可観測性」と「リアルタイム制御」を提供。 • eBPF 技術を利用し、低オーバーヘッドでカーネル情報を収集。 •主な機能: • プロセス、システムコール、ネットワーク、ファイル I/O のイベント検出。 • イベント情報のログやメトリクスへの出力。 • リアルタイムでの実行制御。 •Kubernetesとの連携: • Pod 情報、ラベル、Namespace、コンテナイメージ名などのメタデータとイベント紐付け。 • 複雑なマイクロサービス環境でも高度なポリシー定義と情報収集。 •セキュリティの利点: • Tetragon の検知したイベントを SIEM にエクスポート可能。 • セキュリティ担当者が Kubernetes クラスタ内のイベントを監視・追跡。 • セキュリティに関する意思決定をサポート。 ※ SIEM(シーム)とは、Security Information and Event Management の略称で、ネットワーク製品やセキュリティ製品を含むあらゆる IT 機器のログを一元管理・解析し、インシデントにつながる脅威を検知するセキュリティ製品
  47. Copyright © 2023, Oracle and/or its affiliates 55 eBPF をベースとしたプロダクト

    Runtime Enforcement 予期せぬアプリケーションの挙動を検知し、ランタイムレベルで脅威をアラートするランタイムセキュリティツール カーネルからのシステムコールを解析して、定義したルールに違反した意図しない振る舞いを検知 Go or C++ の SDK で動 的共有ライブラリを生成し て読み込ませることで、 libsinsp/libscapを拡張 https://falco.org/
  48. Copyright © 2023, Oracle and/or its affiliates 56 eBPF をベースとしたプロダクト

    参考 https://www.youtube.com/watch?v=ipsXkjWPYLY 「Kubernetes のセキュリティ」で Falco のデモを実施 https://thinkit.co.jp/article/21709
  49. Copyright © 2023, Oracle and/or its affiliates 57 eBPF をベースとしたプロダクト

    Runtime Security and Forensics using eBPF eBPF ベースのランタイムセキュリティツール、カスタムルールでは Go や Rego を利用した独自のルールも定義できる tracee-ebpf: eBPF で取得したイベントデータの収集、トレーシング から加工、変換、キャプチャなどを行い、イベントデータを tracee-rules に送信する tracee-rules: 受け取ったイベントデータを定義したルールに従って評価 し、不正なイベントを検知して、出力する https://aquasecurity.github.io/tracee/dev/
  50. Copyright © 2023, Oracle and/or its affiliates 58 eBPF をベースとしたプロダクト

    Open Source Kubernetes observability for developers eBPF をベースとした、Kubernetes アプリケーション用のオープンソースのオブザバビリティツール 自動テレメトリー: eBPF を使用して、フルボディ リクエスト、リソースとネット ワークのメトリック、アプリケーション プロファイルなどのテレメ トリー データを自動的に収集 クラスタ内エッジ コンピューティング: すべてのテレメトリ データをクラスタ内でローカルに収集、保 存。 使用するクラスター CPU は 5% 未満で、ほとんどの 場合 2% 未満。 スクリプタビリティ: Pixie の柔軟な Python クエリ言語である PxL は、 UI、 CLI、およびクライアント API で使用可能 https://px.dev/
  51. Copyright © 2023, Oracle and/or its affiliates 59 eBPF をベースとしたプロダクト

    Network Monitoring Infrastructure Health Service Performance Database Query Profiling Request Tracing Continuous Application Profiling https://github.com/pixie-io/pixie
  52. Copyright © 2023, Oracle and/or its affiliates 61 Get Started

    1 デモ環境の構築手順 https://github.com/oracle-japan/ochacafe-s7-6
  53. Copyright © 2023, Oracle and/or its affiliates 62 Get Started

    1 Install PIXIE CLI on OCI Cloud Shell $ curl -o px https://storage.googleapis.com/pixie-dev-public/cli/latest/cli_linux_amd64 Download the latest Pixie linux binary. $ chmod +x px Make it executable. px command excute. $ mkdir $home/bin $ export PATH="$PATH:$home/bin" $ px version Pixie CLI 0.8.2+Distribution.401c92c.20230530183620.1.jenkins
  54. Copyright © 2023, Oracle and/or its affiliates 63 Get Started

    1 Install PIXIE on OKE $ px deploy Deploy the Pixie Platform in your K8s cluster https://docs.px.dev/installing-pixie/requirements/ https://work.withpixie.ai:443 Webブラウザからアクセス
  55. Copyright © 2023, Oracle and/or its affiliates 64 Get Started

    1 事前にアカウントの作成が必要
  56. Copyright © 2023, Oracle and/or its affiliates 65 Get Started

    1 HTTP Service Map/Nodes/Namespaces Services/Pods
  57. Copyright © 2023, Oracle and/or its affiliates 66 Get Started

    1 Install Sock Shop on OKE $ px demo deploy px-sock-shop Example: deploy Weaveworks' "sock-shop". $ kubectl -n px-sock-shop get svc front-end --watch NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE front-end LoadBalancer 10.96.70.72 193.122.xxx.xx 80:30001/TCP 24m Webブラウザからアクセス
  58. Copyright © 2023, Oracle and/or its affiliates 67 Get Started

    1 https://docs.px.dev/about-pixie/what-is-pixie/ コンポーネント全体図 Pixie Edge Module (PEM): ノードごとにインストールされるPixie のエージェント。 PEM はeBPF を使用してデータを収集し、データはノード上 にローカルに保存。 Vizier: Pixie のコレクター。クラスターごとにインストールされます。 クエリの実行とPEM の管理を担当。 Pixie Cloud: ユーザー管理、認証、データプロキシに使用されます。ホス ト型またはセルフホスト型が可能。 Pixie CLI: Pixie をデプロイするために使用。クエリの実行やAPI キーな どのリソースの管理にも使用。 Pixie クライアントAPI: Pixie へのプログラムによるアクセスに使用。
  59. Copyright © 2023, Oracle and/or its affiliates 68 Get Started

    1 コンポーネント 概要 ① Pixie Edge Module (PEM) ノードごとにインストールされる Pixie のエージェント。 PEM は eBPF を使用してデータを収集し、データはノード上にローカルに保存。 ② Vizier Pixie のコレクター。クラスターごとにインストールされる。クエリの実行と PEM の管理を担当。 ① ②
  60. Copyright © 2023, Oracle and/or its affiliates 70 Get Started

    1 Observability & Profile オブザバビリティ(可観測性)の3つの柱としてのメトリクス、ログ、トレース • メトリクス:CPU使用率やメモリ使用量などの数値データ(何が起きているのか) • ログ:正常及び異常な状態など、タイムスタンプと共に出力されるテキストデータ(何が起きたのか) • トレース:個々のアプリケーションを伝播する特定のリクエストの追跡データ(どこで起きたのか) この3種類のデータだけでは不十分 • プロファイル:スタックトレースおよびスタックトレースに関連するCPU使用率やメモリ使用率のデータ • 例外:エラーおよびエラーを引き起こした入力値データ • イベント:サービスに対するアクションのデータ(例:商品サイトで商品購入、チケットサイトで席予約など) さらにもう3種類のデータ 参考 TEMPLE: Six Pillars of Observability (https://medium.com/@YuriShkuro/temple-six-pillars-of-observability-4ac3e3deb402)
  61. Copyright © 2023, Oracle and/or its affiliates 71 Get Started

    1 Observability & Profile Profile Profileは、コードのパス、関数、スレッドなど消費したリソース(CPU, メモリ, I/O, ロックなど)を一定の期間でサンプリン グした統計データ (例) 関数: 関数の呼び出しでどのくらいのリソースを消費しているかなどを計測 スレッド: 複数あるスレッドのうち、あるスレッドがロックした場合に、他の待たされているスレッドの時間を計測
  62. Copyright © 2023, Oracle and/or its affiliates 72 Get Started

    1 Observability & Profile Profiler Profilerは、Profileを取得するツール 主な Profiler • perf • Dtrace • SystemTap • pprof (Go) • JFR (Java) プログラミング言語側からの提供されている Profiler
  63. Copyright © 2023, Oracle and/or its affiliates 73 Get Started

    1 Observability & Profile Frame Graph Frame Graph を利用することで、スタックトレースの Profile を可視化できる Frame Graph は、Google Chrome のデベロッパーツールにある Performance タブで描画できる • 横軸がある一定期間でのリソース使用料 • 縦軸が内訳となる関数名(コールスタック) 読み込んでいる JavaScript の関数ごと に消費している時間
  64. Copyright © 2023, Oracle and/or its affiliates 76 Get Started

    1 Observability & Profile Continuous Profiling Tool https://www.cncf.io/blog/2022/05/31/what-is-continuous-profiling/
  65. Copyright © 2023, Oracle and/or its affiliates 77 Get Started

    1 Observability & Profile Continuous Profiling Tool https://www.cncf.io/blog/2022/05/31/what-is-continuous-profiling/ • コード内のパフォーマンスの問題とボトルネックを見つける • カーディナリティの高いタグ/ラベルを使用してアプリケーションを分析する • CPU 使用率が高い問題を解決する • メモリ リークを追跡する • アプリケーションのコール ツリーを理解する • プロファイリング データをトレースにリンクするようにコードを自動計測する Grafana Pyroscope オープン ソースの継続的なプロファイリング プラットフォーム https://github.com/grafana/pyroscope
  66. Copyright © 2023, Oracle and/or its affiliates 78 Get Started

    1 Observability & Profile 分散トレーシングとの比較 分散トレーシング プロファイル イベントベースにボトルネックになっているサービスを特定で きるので、レイテンシの改善などに役立つ 時間ベースにサービス内のボトルネックを特定できるので、 スループットの改善などに役立つ 『Cloud Profilerによるワーカープロセスのパフォーマンス改善』 Observability Conference 2022 https://onl.la/H2re14C
  67. Copyright © 2023, Oracle and/or its affiliates 79 Get Started

    1 Sock Shop shipping Pod のフレームグラフ https://docs.px.dev/tutorials/pixie-101/profiler/ • Pixie プロファイラーは10ミリ秒ごとに CPU のスタックトレースをサンプリング • 30秒間のウィンドウで集約して共通の関数に基づいてグループ化 • フレームグラフにおいて、幅が広いスタックトレースはその関数に多くの処理時間が割り当てられている フレームグラフの色 • 濃紺:K8s メタデータ • 淡青色:ユーザー領域のアプリ ケーションコード • 緑:カーネルコード
  68. Copyright © 2023, Oracle and/or its affiliates 81 Get Started

    2 デモ環境概要図 VM.Standard.E4.Flex OCPU x 1 MEM 16GB Canonical Ubuntu 22.04 kind-control-plane kind-worker kind-worker2 kind-worker3 • L3/L4/L7 のサービス間通信状況 • Network Policy の拒否状況 • Sock Shop の状況 • Process lifecycle • Filename access • Network observability Container Runtime Security kubectl v1.28.1 構築手順等 https://github.com/oracle-japan/ochacafe-s7-6 Sample App
  69. Copyright © 2023, Oracle and/or its affiliates 82 Get Started

    2 Cilium & Hubble Cilium • L3/L4 の TCP コネクション • L7 通信や HTTP リクエスト Hubble • L3/L4/L7 のサービス間通信状況 • Network Policy の拒否状況 • Sock Shop 状況
  70. Copyright © 2023, Oracle and/or its affiliates 83 Get Started

    2 Cilium & Hubble Demo kind-control-plane kind-worker kind-worker2 kind-worker3 org = empire class = deathstar deathstar org = empire class = tiefighter tiefighter org = alliance class = xwing xwing Namespace: default
  71. Copyright © 2023, Oracle and/or its affiliates 84 Get Started

    2 Cilium & Hubble Demo Observability of Hubble tiefighter to deathstar forward xwing to deathstar forward
  72. Copyright © 2023, Oracle and/or its affiliates 85 Get Started

    2 L4 Policy with Cilium and Kubernetes org = empire class = deathstar deathstar org = empire class = tiefighter tiefighter org = alliance class = xwing xwing Namespace: default kind-control-plane kind-worker kind-worker2 kind-worker3
  73. Copyright © 2023, Oracle and/or its affiliates 86 Get Started

    2 L4 Policy with Cilium and Kubernetes Network Policy
  74. Copyright © 2023, Oracle and/or its affiliates 87 Get Started

    2 L4 Policy with Cilium and Kubernetes Observability of Hubble xwing to deathstar dropped Filter of Dropped
  75. Copyright © 2023, Oracle and/or its affiliates 88 Get Started

    2 L7 Policy with Cilium and Kubernetes org = empire class = deathstar deathstar org = empire class = tiefighter tiefighter org = alliance class = xwing xwing Namespace: default tiefighter to deathstar Access Deny HTTP PUT /v1/exhaust-port tiefighter to deathstar forward HTTP POST /v1/request-landing kind-control-plane kind-worker kind-worker2 kind-worker3 xwing to deathstar dropped
  76. Copyright © 2023, Oracle and/or its affiliates 89 Get Started

    2 L7 Policy with Cilium and Kubernetes Network Policy
  77. Copyright © 2023, Oracle and/or its affiliates 90 Get Started

    2 L7 Policy with Cilium and Kubernetes Observability of Hubble tiefighter to deathstar Access Deny HTTP PUT /v1/exhaust-port tiefighter to deathstar forward HTTP POST /v1/request-landing xwing to deathstar dropped
  78. Copyright © 2023, Oracle and/or its affiliates 91 Get Started

    2 Monitoring of Sock Shop by Hubble Sock Shop install $ kubectl create -f https://raw.githubusercontent.com/microservices-demo/microservices-demo/master/deploy/kubernetes/complete-demo.yaml Port-forward Sock Shop $ kubectl get pods -n sock-shop NAME READY STATUS RESTARTS AGE ・ ・<省略> ・ front-end-5d7b595bcd-2crfh 1/1 Running 0 11m ・ ・<省略> ・ $ kubectl port-forward front-end-5d7b595bcd-2crfh -n sock-shop 8079:8079 http://localhost:8079/ ブラウザアクセス
  79. Copyright © 2023, Oracle and/or its affiliates 93 Get Started

    2 Monitoring of Sock Shop by Hubble http://localhost:12000/ ブラウザアクセス後、sock-shop をクリックすると hubble でリアルタイムの状況を確認できる
  80. Copyright © 2023, Oracle and/or its affiliates 95 Get Started

    3 Container Runtime Security コンテナランタイムセキュリティ • コンテナ実行時のセキュリティ • ランタイムにおける振る舞いを動的にスキャン、異常な振る舞いを検知 あらかじめ設定したルールに適合するかを判断して、適合した場合にアラート出力 コンテナ 攻撃者 侵入 ファイルダウンロード マルウェア 検知 検知 コンテナランタイムセキュリティ コンテナホスト アラート送信
  81. Copyright © 2023, Oracle and/or its affiliates 96 Get Started

    3 - eBPF - based Security Observability & Runtime Enforcement セキュリティイベントの検知と防止 定義したポリシーに従ってリアルタイムに検知、検知後、SIGKILL を送信してプロセスを停止 プラガブルなポリシー定義 ポリシー定義において、以下の形式をサポート • Kubernetes CRD • JSON API • OPA
  82. Copyright © 2023, Oracle and/or its affiliates 97 Get Started

    3 The Four Golden Signals of Security Observbability Security Observability with eBPF では、コンテナのセキュリティ可観測性におけるゴールデンシグナ ルとして以下の4つ定義しています。 https://isovalent.com/blog/post/2022-04-oreilly-security/ • プロセス実行 • ネットワークソケット(TCP・UDP・Unix) • ファイルアクセス • L7ネットワークアイデンティティ Tetragon では、このシグナルを Kubernetes のメタデータと紐づけて記録できる
  83. Copyright © 2023, Oracle and/or its affiliates 98 Get Started

    3 CustomeResource によるポリシー設定 • Tetragon はデフォルト動作としてプロセス実行のシグナルを記録、それ以外のシグナルは TracingPolicy CustomResource で設定可能 • TracingPolicy CustomResource では、kprobe と tracepoints という2つのフィールドがあり、各フックポイントで eBPF プログラムをロードする仕組み 任意の関数・システムコールに対してフックポイント Linux カーネルに予め定義されたフックポイント kprobe tracepoints
  84. Copyright © 2023, Oracle and/or its affiliates 99 Get Started

    3 Install Tetragon $ helm repo add cilium https://helm.cilium.io $ helm repo update $ helm install tetragon cilium/tetragon -n kube-system $ kubectl rollout status -n kube-system ds/tetragon -w Waiting for daemon set "tetragon" rollout to finish: 0 of 3 updated pods are available... Waiting for daemon set "tetragon" rollout to finish: 1 of 3 updated pods are available... Waiting for daemon set "tetragon" rollout to finish: 2 of 3 updated pods are available... daemon set "tetragon" successfully rolled out
  85. Copyright © 2023, Oracle and/or its affiliates 100 Get Started

    3 $ tetra version tetra command excute. Install Tetragon CLI $ GOOS=$(go env GOOS) $ GOARCH=$(go env GOARCH) $ curl -L --remote-name-all https://github.com/cilium/tetragon/releases/latest/download/tetra-${GOOS}-${GOARCH}.tar.gz{,.sha256sum} $ sha256sum --check tetra-${GOOS}-${GOARCH}.tar.gz.sha256sum $ sudo tar -xzvf tetra-${GOOS}-${GOARCH}.tar.gz $ rm tetra-${GOOS}-${GOARCH}.tar.gz{,.sha256sum} CLI version: v0.11.0 Install Tetragon CLI
  86. Copyright © 2023, Oracle and/or its affiliates 101 Get Started

    3 Use case 1: Monitoring Process Execution $ kubectl create -f https://raw.githubusercontent.com/cilium/cilium/v1.11/examples/minikube/http-sw-app.yaml $ kubectl get pods NAME READY STATUS RESTARTS AGE deathstar-7848d6c4d5-f7g8m 1/1 Running 0 57m deathstar-7848d6c4d5-npd4b 1/1 Running 0 57m tiefighter 1/1 Running 0 57m xwing 1/1 Running 0 57m Sample Application Deploy Deploy Confirm Process execution
  87. Copyright © 2023, Oracle and/or its affiliates 102 Get Started

    3 Process execution deathstar tiefighter xwing Namespace: default kind-control-plane kind-worker kind-worker2 kind-worker3 deathstar ② kubectl exec コマンドで xwing Pod のコンテナに 入ってから、whoami コマンドを実施 ① kubectl logs & tetra コマンドを連携して、コンテナ 内で実行される状況を出力する A B ③ whoami コマンドが実行される状況をウォッチする A カーネルのイベントハンドラである process_exec と process_exit を利用し てプロセスの実行と終了を観測する
  88. Copyright © 2023, Oracle and/or its affiliates 103 Get Started

    3 $ kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | tetra getevents -o compact --namespace default --pod xwing ① Console A Flag --namespace has been deprecated, please use --namespaces instead Flag --pod has been deprecated, please use --pods instead 🚀 process default/xwing /usr/bin/netserver -D 🚀 process default/xwing /usr/bin/curl http://cilium.io 🔌 connect default/xwing /usr/bin/curl tcp 10.0.10.175:43500 -> 104.198.14.52:80 📤 sendmsg default/xwing /usr/bin/curl tcp 10.0.10.175:43500 -> 104.198.14.52:80 bytes 73 🧹 close default/xwing /usr/bin/curl tcp 10.0.10.175:43500 -> 104.198.14.52:80 💥 exit default/xwing /usr/bin/curl http://cilium.io 0 $ kubectl exec -it xwing -- /bin/bash ② Console B bash-4.3# whoami root A B
  89. Copyright © 2023, Oracle and/or its affiliates 104 Get Started

    3 $ kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | tetra getevents -o compact --namespace default --pod xwing Console A Flag --namespace has been deprecated, please use --namespaces instead Flag --pod has been deprecated, please use --pods instead 🚀 process default/xwing /usr/bin/netserver -D 🚀 process default/xwing /usr/bin/curl http://cilium.io 🔌 connect default/xwing /usr/bin/curl tcp 10.0.10.175:43500 -> 104.198.14.52:80 📤 sendmsg default/xwing /usr/bin/curl tcp 10.0.10.175:43500 -> 104.198.14.52:80 bytes 73 🧹 close default/xwing /usr/bin/curl tcp 10.0.10.175:43500 -> 104.198.14.52:80 💥 exit default/xwing /usr/bin/curl http://cilium.io 0 🚀 process default/xwing /bin/bash 🚀 process default/xwing /usr/bin/whoami 💥 exit default/xwing /usr/bin/whoami 0 A
  90. Copyright © 2023, Oracle and/or its affiliates 105 Get Started

    3 $ kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | jq 'select(.process_exec.process.pod.name=="xwing" or .process_exit.process.pod.name=="xwing")' 出力されるイベントログの詳細は JSON 形式で確認可能 Process Exit Event の一部
  91. Copyright © 2023, Oracle and/or its affiliates 106 Get Started

    3 Privileged Execution deathstar tiefighter xwing Namespace: default kind-control-plane kind-worker kind-worker2 kind-worker3 deathstar A B hostPID: true, hostNetwork: true, securityContext privileged: true の test-pod を展開して、CAP_SYS_ADMIN を使用して実行している Pod を観測 test-pod ① 事前に tetragon-config (configmap)を 更新して、tetragon をリスタート # change "enable-process-cred" "true" # change "enable-process-ns" "true" ② test-pod をデプロイ B ③ kubectl logs & tetra コマンドを連携して、 CAP_SYS_ADMIN の状況を観測
  92. Copyright © 2023, Oracle and/or its affiliates 107 Get Started

    3 Privileged Execution $ kubectl edit cm -n kube-system tetragon-config # change "enable-process-cred" from "false" to "true" # change "enable-process-ns" from "false" to "true" # then save and exit Console B $ kubectl rollout restart -n kube-system ds/tetragon $ kubectl apply -f https://raw.githubusercontent.com/cilium/tetragon/main/testdata/specs/testpod.yaml Restart the Tetragon daemonset Apply the privileged PodSpec:
  93. Copyright © 2023, Oracle and/or its affiliates 108 Get Started

    3 Use case 2: Privileged Execution Console A $ kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | tetra getevents –o compact --namespace default --pod test-pod 🚀 process default/test-pod /usr/bin/runc --systemd-cgroup --root=/run/runc create --bundle /run/containers/storage/overlay- containers/985efa094308160475b7202193509582a338377c89e121c6e230f4b0fe95fc61/userdata --pid-file /run/containers/storage/overlay- containers/985efa094308160475b7202193509582a338377c89e121c6e230f4b0fe95fc61/userdata/pidfile 985efa094308160475b7202193509582a338377c89e121c6e230f4b0fe95fc61 🛑 CAP_SYS_ADMIN 🚀 process default/test-pod /proc/self/exe init 🛑 CAP_SYS_ADMIN 🚀 process default/test-pod /dev/fd/6 init 🛑 CAP_SYS_ADMIN 💥 exit default/test-pod /dev/fd/6 init 0 🛑 CAP_SYS_ADMIN 💥 exit default/test-pod /usr/bin/runc --systemd-cgroup --root=/run/runc create --bundle /run/containers/storage/overlay- containers/985efa094308160475b7202193509582a338377c89e121c6e230f4b0fe95fc61/userdata --pid-file /run/containers/storage/overlay- containers/985efa094308160475b7202193509582a338377c89e121c6e230f4b0fe95fc61/userdata/pidfile 985efa094308160475b7202193509582a338377c89e121c6e230f4b0fe95fc61 0 🛑 CAP_SYS_ADMIN 🚀 process default/test-pod /bin/sleep 365d 🛑 CAP_SYS_ADMIN 💥 exit default/test-pod /bin/sleep 365d SIGTERM 🛑 CAP_SYS_ADMIN
  94. Copyright © 2023, Oracle and/or its affiliates 109 Get Started

    3 Generic tracing - File Access - deathstar tiefighter xwing Namespace: default kind-control-plane kind-worker kind-worker2 kind-worker3 deathstar A B Kubernetes ワークロード内のプロセスが /etc/ ディレクトリで読み取りまたは書き込み を実行するかどうかを観測 ① 事前に次スライドにあるトレーシングポリシーを 適用する B ② kubectl exec コマンドで xwing Pod のコンテナに 入ってから、vi コマンドで /etc/passwd ファイルを更 新する ③ kubectl logs & tetra コマンドを連携して、コンテナ 内で実行される状況を確認する B ④ 適用したトレーシングポリシーを削除 する
  95. Copyright © 2023, Oracle and/or its affiliates 110 Get Started

    3 カーネル関数が実行されたタイミングでフックされて、Tetragon がイベントを検 知する仕組み
  96. Copyright © 2023, Oracle and/or its affiliates 111 Get Started

    3 kprobe hook 概要 security_file_permission このフックは、ファイルへの読み書きアクセスを監視するために使用される。多くの異なるシステムコール (例:read, write, copy_file_range, sendfile)がこの種のアクセスで使用されるため、このフック はそれらすべてのシステムコールに共通の実行ポイントとなる。 security_mmap_file アプリケーションがファイルを直接、その仮想アドレス空間にマッピングする場合、このフックでそのマッピン グ操作を監視する。具体的なアクセスを捉えるのが困難なため、ファイルが仮想メモリにマッピングされ た時点での監視が行われる。 security_path_truncate ファイルのサイズを変更する操作、たとえば truncate システムコールなど、が行われるときにこのフックが 使用される。このような操作は、ファイルの内容を間接的に変更する可能性がある。 これらのフックを使用することで、ファイルへの様々なタイプのアクセスを効率的に監視することができる。
  97. Copyright © 2023, Oracle and/or its affiliates 112 Get Started

    3 $ kubectl apply -f https://raw.githubusercontent.com/cilium/tetragon/main/examples/tracingpolicy/sys_write_follow_fd_prefix.yaml Apply the following TracingPolicy Generic tracing - File Access - Console B tracingpolicy.cilium.io/sys-read-follow-prefix created $ kubectl exec -it xwing -- /bin/bash kubectl exec into the xwing pod bash-4.3# vi /etc/passwd
  98. Copyright © 2023, Oracle and/or its affiliates 113 Get Started

    3 $ kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | tetra getevents -o compact --namespace default --pod xwing Monitoring the events from the xwing pod Console A 🚀 process default/xwing /usr/bin/vi /etc/passwd 📬 open default/xwing /usr/bin/vi /etc/passwd 📪 close default/xwing /usr/bin/vi 📬 open default/xwing /usr/bin/vi /etc/passwd 📝 write default/xwing /usr/bin/vi /etc/passwd 1274 bytes 📪 close default/xwing /usr/bin/vi 💥 exit default/xwing /usr/bin/vi /etc/passwd 0 Generic tracing - File Access -
  99. Copyright © 2023, Oracle and/or its affiliates 114 Get Started

    3 $ kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | jq 'select(.process_kprobe.process.pod.name=="xwing" or .process_kprobe.process.pod.name=="xwing")' 出力されるイベントログの詳細は JSON 形式で確認可能 Process Kprobe Event の一部
  100. Copyright © 2023, Oracle and/or its affiliates 115 Get Started

    3 $ kubectl delete -f https://raw.githubusercontent.com/cilium/tetragon/main/examples/tracingpolicy/sys_write_follow_fd_prefix.yaml To disable the TracingPolicy run Console B tracingpolicy.cilium.io "sys-read-follow-prefix" deleted Generic tracing - File Access -
  101. Copyright © 2023, Oracle and/or its affiliates 116 Get Started

    3 Generic tracing - Network Observability - deathstar tiefighter xwing Namespace: default kind-control-plane kind-worker kind-worker2 kind-worker3 deathstar A B kprobe フックを使用して TCP 接続を観測 ① 事前に次スライドにあるトレーシングポリシーを 適用する B ② kubectl exec コマンドで xwing Pod のコンテナに 入ってから、curl コマンドで http://cilium.io/ へアク セスする ③ kubectl logs & tetra コマンドを連携して、コンテナ 内で実行される状況を確認する B ④ 適用したトレーシングポリシーを削除 する
  102. Copyright © 2023, Oracle and/or its affiliates 117 Get Started

    3 カーネル関数が実行されたタイミングでフックされて、Tetragon がイベントを検知する仕組み tcp_sedmsg 関数 args フィールドで引数情報を定義 int tcp_sendmsg(strct sock *sk, struct msghdr *msg, size_tsize) sk (index: 0) size (index: 2)
  103. Copyright © 2023, Oracle and/or its affiliates 118 Get Started

    3 Generic tracing - Network Observability - $ kubectl apply -f https://raw.githubusercontent.com/cilium/tetragon/main/examples/tracingpolicy/tcp-connect.yaml Apply the example TCP connect TracingPolicy Console B tracingpolicy.cilium.io/connect created $ kubectl exec -it xwing -- curl http://cilium.io kubectl exec into the xwing pod Redirecting to https://cilium.io/
  104. Copyright © 2023, Oracle and/or its affiliates 119 Get Started

    3 $ kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | tetra getevents -o compact --namespace default --pod xwing Monitoring the events from the xwing pod Console A 🚀 process default/xwing /usr/bin/curl http://cilium.io 🔌 connect default/xwing /usr/bin/curl tcp 10.0.10.175:38386 -> 104.198.14.52:80 📤 sendmsg default/xwing /usr/bin/curl tcp 10.0.10.175:38386 -> 104.198.14.52:80 bytes 73 🧹 close default/xwing /usr/bin/curl tcp 10.0.10.175:38386 -> 104.198.14.52:80 💥 exit default/xwing /usr/bin/curl http://cilium.io 0 Generic tracing - Network Observability -
  105. Copyright © 2023, Oracle and/or its affiliates 120 Get Started

    3 $ kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | jq 'select(.process_kprobe.process.pod.name=="xwing" or .process_kprobe.process.pod.name=="xwing")' 出力されるイベントログの詳細は JSON 形式で確認可能 Process Kprobe Event の一部
  106. Copyright © 2023, Oracle and/or its affiliates 121 Get Started

    3 $ kubectl delete -f https://raw.githubusercontent.com/cilium/tetragon/main/examples/tracingpolicy/tcp-connect.yaml To disable the TracingPolicy run Console B tracingpolicy.cilium.io "connect" deleted Generic tracing - Network Observability -
  107. Copyright © 2023, Oracle and/or its affiliates 123 参考資料 eBPF

    は何が嬉しいのか? https://speakerdeck.com/yutarohayakawa/ebpfhahe-gaxi-siinoka KubeCon + CloudNativeCon EU 2022 Recap https://speakerdeck.com/masayaaoyama/k8sjp51-kubecon-eu-2022-recap https://speakerdeck.com/tobachi/container-runtime-security-with-ebpf eBPF で実現するコンテナランタイムセキュリティ https://speakerdeck.com/chikuwait/learn-ebpf 「おいしくてつよくなる」 eBPF のはじめかた https://speakerdeck.com/cloudace/saidokahurina-service-mesh-dearu-cilium- gaqi-ninarunodeyusukesuwokao-etemita サイドカーフリーな Service Mesh である Cilium が気になる のでユースケースを考えてみた。
  108. Copyright © 2023, Oracle and/or its affiliates 125 書籍紹介 入門

    eBPF Linuxカーネルの可視化と機能拡張 Learning eBPF Programming the Linux Kernel for Enhanced Observability, Networking, and Security 2023/12/19 発売