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

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.ʹࢥ͍Λ஘ͤΔ

    View Slide

  2. !BNTZ
    - Co-chair
    ੨ࢁ ਅ໵
    + CREATIONLINE - 技術アドバイザ
    + SAKURA Internet Research Center – 客員研究員
    + 3-shake 技術顧問
    + PLAID
    - Organizer
    - KaaS Product Owner - Publications
    Twitter: @amsy810

    View Slide

  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)

    View Slide

  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 の実装例

    View Slide

  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

    View Slide

  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

    View Slide

  7. !BNTZ

    View Slide

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

    View Slide

  9. !BNTZ
    IUUQTBQJDMBSJUZJPEPDT
    IUUQTHJUIVCDPNBQJDMBSJUZXBTNGJMUFST
    HTTP Traffic を外部のバックエンドに
    転送する WASM Filter を利用 *2
    API Clarity と Proxy-WASM

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  14. !BNTZ
    IUUQTBQJDMBSJUZJPEPDT
    IUUQTHJUIVCDPNBQJDMBSJUZXBTNGJMUFST
    HTTP Traffic を外部のバックエンドに
    転送する WASM Filter を利用 *2
    API Clarity と Proxy-WASM

    View Slide

  15. !BNTZ
    その他の WASM module による拡張

    View Slide

  16. !BNTZ

    View Slide

  17. !BNTZ
    • 唯⼀ CNCF の Sandbox プロジェクトに採択された WASM ランタイム
    • ネットワーク機能や外部連携機能を持ち、実質的には WASM 向けプラットフォーム
    • 開発者がデフォルトで安全なビジネスロジックをすばやく実装できるように作られている
    Wasmcloud とは︖

    View Slide

  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)

    View Slide

  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

    View Slide

  20. !BNTZ
    Wasmcloud が⽬指す領域
    είʔϓʹଟڌ఺ΛؚΉ

    View Slide

  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%,:,

    View Slide

  22. !BNTZ

    View Slide

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

    View Slide

  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 – カーネル空間のイベントをフックしてアラート発報

    View Slide

  25. !BNTZ
    まとめ
    eBPF や WebAssembly を利⽤した拡張機能や性能改善などが推進
    2022 年はプロダクションでの利⽤や新規プロダクトの登場に期待⼤
    HJIZPKQٕज़ධ࿦ࣾ ৽य़ಛผاը ʙ೥ʹ஫໨͍ͨ͠$MPVE/BUJWFؔ࿈ٕज़ʙ
    IUUQTHJIZPKQBENJODPMVNOOFXZFBSDMPVEOBUJWFQSPTQFDU

    View Slide