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

ebpfとWASMに思いを馳せる2022 / techfeed-conference-2022-ebpf-wasm-amsy810

ebpfとWASMに思いを馳せる2022 / techfeed-conference-2022-ebpf-wasm-amsy810

https://techfeed.io/events/techfeed-conference-2022#containers-trend

TechFeed Conference 2022
「エンジニアの祭典」へようこそ。エキスパート50名による大LT大会、全セッション永久保存版!
前代未聞、日本を代表するテックエキスパート50名による大LT大会、全セッション書き起こし!
コロナ禍でもエンジニアコミュニティを元気にすべく、TechFeedが総力を上げて実現する「エンジニアの祭典」、ここに開催!

【BIO】
『Kubernetes完全ガイド』著者。Cloud Native Days TokyoのCo-chair。Kubernetes Meetup TokyoのOrganizer。CyberAgentのDeveloper ExpertsKubernetes/CloudNative 領域

【セッション概要】
eBPFやWASMも徐々に成熟し、新たなプロダクトも出てきています。このセッションではそれらのプロダクトを紹介し、2022年に思いを馳せたいと思います。

More Decks by Masaya Aoyama (@amsy810)

Other Decks in Programming

Transcript

  1. !BNTZ .BTBZB"PZBNB $ZCFS"HFOU *OD F#1'ͱ 8"4.ʹࢥ͍Λ஘ͤΔ

  2. !BNTZ - Co-chair ੨ࢁ ਅ໵ + CREATIONLINE - 技術アドバイザ +

    SAKURA Internet Research Center – 客員研究員 + 3-shake 技術顧問 + PLAID - Organizer - KaaS Product Owner - Publications Twitter: @amsy810
  3. !BNTZ WASM(WebAssembly) WebAssembly はもともと Web ブラウザ向けに作られたバイナリフォーマット 様々な⾔語で関数を実装し、WASM binaryとしてビルドする Browser WASM

    binary 様々な⾔語(+SDK)から ビルド可能 WASI Host System WASM binary WASM Runtime Proxy Proxy-WASM WASM binary WASM (WebAssembly) WASI (WebAssembly System Interface) Proxy-WASM WASM Runtime (VM)
  4. !BNTZ # tinygo build -o ./my-filter.wasm -target=wasi ./main.go Proxy-WASM interface

    で定義された WASM 関数の override Proxy-WASM interface で定義された Host 関数の利用 WASM Runtime Proxy Proxy-WASM WASM binary tiny-go + proxy-wasm-go-sdk の実装例
  5. !BNTZ Proxy 側から WASM 側が呼び出される関数 @TUBSU QSPYZ@BCJ@WFSTJPO@9@:@; QSPYZ@PO@NFNPSZ@BMMPDBUF QSPYZ@PO@DPOUFYU@DSFBUF QSPYZ@PO@EPOF

    QSPYZ@PO@MPH QSPYZ@PO@EFMFUF QSPYZ@PO@WN@TUBSU QSPYZ@PO@DPOGJHVSF QSPYZ@PO@UJDL QSPYZ@PO@OFX@DPOOFDUJPO QSPYZ@PO@EPXOTUSFBN@EBUB QSPYZ@PO@EPXOTUSFBN@DMPTF QSPYZ@PO@VQTUSFBN@EBUB QSPYZ@PO@VQTUSFBN@DMPTF QSPYZ@PO@IUUQ@SFRVFTU@IFBEFST QSPYZ@PO@IUUQ@SFRVFTU@CPEZ QSPYZ@PO@IUUQ@SFRVFTU@USBJMFST QSPYZ@PO@IUUQ@SFRVFTU@NFUBEBUB QSPYZ@PO@IUUQ@SFTQPOTF@IFBEFST QSPYZ@PO@IUUQ@SFTQPOTF@CPEZ QSPYZ@PO@IUUQ@SFTQPOTF@USBJMFST QSPYZ@PO@IUUQ@SFTQPOTF@NFUBEBUB QSPYZ@PO@IUUQ@DBMM@SFTQPOTF QSPYZ@PO@HSQD@DBMM@SFTQPOTF@IFBEFS@NFUBEBUB QSPYZ@PO@HSQD@DBMM@SFTQPOTF@NFTTBHF QSPYZ@PO@HSQD@DBMM@SFTQPOTF@USBJMFS@NFUBEBUB QSPYZ@PO@HSQD@DBMM@DMPTF QSPYZ@PO@RVFVF@SFBEZ WASM Runtime Proxy Proxy-WASM WASM binary 関数が呼び出されるタイミング • イベントの発⽣時 • Proxyが特定のステータスに遷移時 Ref: https://github.com/proxy-wasm/spec/tree/master/abi-versions/vNEXT
  6. !BNTZ WASM 側から Proxy 側を呼び出す関数 QSPYZ@MPH QSPYZ@HFU@DVSSFOU@UJNF QSPYZ@TFU@FGGFDUJWF@DPOUFYU QSPYZ@EPOF QSPYZ@TFU@UJDL@QFSJPE

    QSPYZ@HFU@CVGGFS QSPYZ@TFU@CVGGFS QSPYZ@HFU@NBQ QSPYZ@TFU@NBQ QSPYZ@HFU@NBQ@WBMVF QSPYZ@TFU@NBQ@WBMVF QSPYZ@BEE@NBQ@WBMVF QSPYZ@SFNPWF@NBQ@WBMVF QSPYZ@HFU@QSPQFSUZ QSPYZ@TFU@QSPQFSUZ QSPYZ@SFTVNF@EPXOTUSFBN QSPYZ@SFTVNF@VQTUSFBN QSPYZ@SFTVNF@IUUQ@SFRVFTU QSPYZ@SFTVNF@IUUQ@SFTQPOTF QSPYZ@TFOE@IUUQ@SFTQPOTF QSPYZ@EJTQBUDI@IUUQ@DBMM QSPYZ@EJTQBUDI@HSQD@DBMM QSPYZ@PQFO@HSQD@TUSFBN QSPYZ@TFOE@HSQD@DBMM@NFTTBHF QSPYZ@DBODFM@HSQD@DBMM QSPYZ@DMPTF@HSQD@DBMM QSPYZ@HFU@TIBSFE@EBUB QSPYZ@TFU@TIBSFE@EBUB QSPYZ@SFHJTUFS@TIBSFE@RVFVF QSPYZ@SFTPMWF@TIBSFE@RVFVF QSPYZ@EFRVFVF@TIBSFE@RVFVF QSPYZ@FORVFVF@TIBSFE@RVFVF QSPYZ@SFNPWF@TIBSFE@RVFVF QSPYZ@EFGJOF@NFUSJD QSPYZ@HFU@NFUSJD QSPYZ@SFDPSE@NFUSJD QSPYZ@JODSFNFOU@NFUSJD QSPYZ@SFNPWF@NFUSJD QSPYZ@DBMM@GPSFJHO@GVODUJPO WASM Runtime Proxy Proxy-WASM WASM binary 関数を呼び出すタイミング • Proxy に対して命令を⾏う場合 • Proxy 側の機能を利⽤する場合 Ref: https://github.com/proxy-wasm/spec/tree/master/abi-versions/vNEXT
  7. !BNTZ

  8. !BNTZ Shadow/Zonbie API の検知・OpenAPI specの再構成 API Clarity とは︖

  9. !BNTZ IUUQTBQJDMBSJUZJPEPDT IUUQTHJUIVCDPNBQJDMBSJUZXBTNGJMUFST HTTP Traffic を外部のバックエンドに 転送する WASM Filter を利用

    *2 API Clarity と Proxy-WASM
  10. !BNTZ HTTPリクエストの Body 受付時に呼び出される WASM関数 他にも様々なフックポイントでcontext を取り回して情報を収集する IUUQTHJUIVCDPNBQJDMBSJUZXBTNGJMUFSTCMPCNBTUFSTSDUSBDFNBJOHP HTTPリクエストのBodyを取得する Host関数

  11. !BNTZ HTTPリクエスト終了時に 呼び出される WASM関数 終了時にデータを送る関数を 呼び出し IUUQTHJUIVCDPNBQJDMBSJUZXBTNGJMUFSTCMPCNBTUFSTSDUSBDFNBJOHP

  12. !BNTZ 任意のClusterに対して HTTPリクエストを送る Host関数 IUUQTHJUIVCDPNBQJDMBSJUZXBTNGJMUFSTCMPCNBTUFSTSDUSBDFNBJOHP

  13. !BNTZ EnvoyFilter CR から WASM module を組み込み

  14. !BNTZ IUUQTBQJDMBSJUZJPEPDT IUUQTHJUIVCDPNBQJDMBSJUZXBTNGJMUFST HTTP Traffic を外部のバックエンドに 転送する WASM Filter を利用

    *2 API Clarity と Proxy-WASM
  15. !BNTZ その他の WASM module による拡張

  16. !BNTZ

  17. !BNTZ • 唯⼀ CNCF の Sandbox プロジェクトに採択された WASM ランタイム •

    ネットワーク機能や外部連携機能を持ち、実質的には WASM 向けプラットフォーム • 開発者がデフォルトで安全なビジネスロジックをすばやく実装できるように作られている Wasmcloud とは︖
  18. !BNTZ • ⾮機能要件は Capability Provider を利⽤し、ビジネスロジックのみを実装 • Capability Provider の実装は

    Redis, Memcached など変更可能 • Contract model sql blobstore httpclient 8"4. NPEVMF DBQBCJMJUZ QSPWJEFS redis … psql … JNQM s3 … keyvalue httpserver http server Bussiness logic 外部連携機能(Capability Provider)
  19. !BNTZ NATS を利⽤した Actor model での実装 NATS (Queue) Actor A3

    Actor B2 Actor D1 Actor D2 Actor E1 Actor A1 Actor B1 Actor C1 Actor A2 Actor C2 Wasmcloud Networking
  20. !BNTZ Wasmcloud が⽬指す領域 είʔϓʹଟڌ఺ΛؚΉ

  21. !BNTZ NATS Supercluster による Mesh Lattice Network Actor A1 Actor

    A3 Actor B2 Actor D1 Actor D Actor E1 Actor B1 Actor C1 ctor A2 Actor C2 3FGIUUQTXXXZPVUVCFDPNXBUDI WJ9%LQ(MJTU1-KIZ[:.0,O48TO[)S600W%,:,
  22. !BNTZ

  23. !BNTZ eBPF カーネルのソースコードの変更やカーネルモジュールの組み込みなしに 任意のプログラム(制限あり)をカーネルに組み込む機能 eBPF プログラムはイベント駆動で 特定のフックポイントで実⾏される • System calls

    • Function entry / exit • Kernel tracepoints • Network events • etc IUUQTFCQGJP
  24. !BNTZ eBPF の活⽤プロダクト Networking Calico CNI – kube-proxy 不要で Kubernetes

    Service の実現 Cillium CNI / Sidecar-less Service Mesh – Service Mesh の機能を eBPF で実現(⼀部機能のために Per-node Envoy も併⽤) Observability Pixie – カーネル空間とユーザ空間双⽅のデータ取得による O11y の確保 Security Falco – カーネル空間のイベントをフックしてアラート発報
  25. !BNTZ まとめ eBPF や WebAssembly を利⽤した拡張機能や性能改善などが推進 2022 年はプロダクションでの利⽤や新規プロダクトの登場に期待⼤ HJIZPKQٕज़ධ࿦ࣾ ৽य़ಛผاը

    ʙ೥ʹ஫໨͍ͨ͠$MPVE/BUJWFؔ࿈ٕज़ʙ IUUQTHJIZPKQBENJODPMVNOOFXZFBSDMPVEOBUJWFQSPTQFDU