Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

!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)

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

!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

Slide 6

Slide 6 text

!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

Slide 7

Slide 7 text

!BNTZ

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

!BNTZ

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

!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)

Slide 19

Slide 19 text

!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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

!BNTZ

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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