拡張および改良されたWebAssemblyHubがEnvoyとIstioにWebAssemblyの力を提供

Solo.ioによるIstio向けWasmのコミュニティパートナーツール。

2020年3月25日 | Idit Levine - Solo.io

元々はSolo.ioブログに投稿されました。

組織がマイクロサービス間の通信における課題を解決するためにIstioのようなEnvoyベースのインフラストラクチャを採用するにつれて、組織の制約に適合させるためにそのインフラストラクチャの一部をカスタマイズする必要性が必然的に出てきます。WebAssembly (Wasm)は、プラットフォーム拡張のための安全で、セキュアで、動的な環境として台頭してきました。

最近のIstio 1.5の発表において、Istioプロジェクトは、人気のEnvoyプロキシにWebAssemblyをもたらすための基盤を築きました。Solo.ioは、GoogleおよびIstioコミュニティと協力して、EnvoyとIstioへのWebAssembly拡張機能の作成、共有、およびデプロイの全体的なエクスペリエンスを簡素化しています。それほど昔ではありませんが、Googleや他の企業がコンテナの基盤を築き、Dockerはそれを利用しやすい優れたユーザーエクスペリエンスを構築しました。同様に、この取り組みは、Istio上でWebAssemblyのための最高のユーザーエクスペリエンスを構築することにより、Wasmを利用可能にします。

2019年12月、Solo.ioは、WebAssembly Hubを発表することでWebAssemblyのための優れた開発者エクスペリエンスを提供する取り組みを開始しました。WebAssembly Hubを使用すると、開発者はC++で新しいWebAssemblyプロジェクトを非常に迅速にスピンアップ(この言語の選択肢は拡大しています。下記参照)、DockerでBazelを使用してビルドし、OCI準拠のレジストリにプッシュすることができます。そこから、オペレーターはモジュールをプルし、ディスクからロードするようにEnvoyプロキシ自体を構成する必要がありました。Envoy上に構築されたAPIゲートウェイであるGlooのベータサポートにより、モジュールを宣言的かつ動的にロードすることが可能になり、Solo.ioチームは、Istioのような他のEnvoyベースのフレームワークにも同じ手軽で安全なエクスペリエンスを提供したいと考えました。

この分野の革新には多くの関心が寄せられており、Solo.ioチームはWebAssembly Hubとそのサポートするワークフローの機能をさらに向上させるために努力してきました。Istio 1.5と同時に、Solo.ioは、本番環境でのEnvoyによるWebAssemblyの有効性を進化させ、開発者エクスペリエンスを向上させ、IstioでEnvoyによるWasmの使用を合理化するWebAssembly Hubの新機能強化を発表できることを嬉しく思っています。

本番環境への進化

Envoyコミュニティは、Wasmサポートをアップストリームプロジェクトに取り込むために懸命に努力しており(現在は動作中の開発フォーク上に存在)、IstioはWasmサポートをアルファ機能として宣言しています。Gloo 1.0でも、初期の非本番環境サポートを発表しました。 Glooとは何か?Glooは、レガシーモノリス、マイクロサービス/Kubernetes、サーバーレス関数への着信トラフィックのルーティングとセキュリティをサポートする、(Envoy Proxy上に構築された)最新のAPIゲートウェイおよびIngressコントローラーです。開発および運用チームは、外部エンドユーザー/クライアントからバックエンドアプリケーションサービスへのトラフィックパターンを形成し制御することができます。GlooはKubernetesおよびIstioネイティブのイングレスゲートウェイです。

各個々のプロジェクトで成熟しつつありますが、コミュニティとして、本番環境サポートの基盤を改善するためにできることがあります。

最初の分野は、EnvoyのWebAssembly拡張機能の外観を標準化することです。Solo.io、Google、およびIstioコミュニティは、WebAssemblyモジュールをOCIイメージとしてバンドルおよび配布するためのオープン仕様を定義しました。この仕様は、Envoy拡張機能を含むあらゆるタイプのWasmモジュールの配布のための強力なモデルを提供します。

これはコミュニティに公開されています - 取り組みへの参加

次の分野は、本番環境で実行されているEnvoyベースのフレームワークへのWasm拡張機能のデプロイのエクスペリエンスを改善することです。Kubernetesエコシステムでは、本番環境では、クラスタ構成の管理に宣言型のCRDベースの構成を使用することがベストプラクティスと考えられています。新しいWebAssembly Hub Operatorは、Kubernetesクラスタ内で実行されているEnvoyプロキシにWasmフィルターを自動的にデプロイおよび構成する単一の宣言型のCRDを追加します。このオペレーターにより、GitOpsワークフローとクラスタの自動化により、人間の介入や命令型のワークフローなしでWasmフィルターを管理できます。オペレーターに関する詳細情報は、今後のブログ投稿で提供します。

最後に、Wasm拡張機能の開発者とそれらをデプロイするチーム間の相互作用には、何らかの役割ベースのアクセス、組織管理、およびこれらの拡張機能を共有、検出、および使用するための機能が必要です。WebAssembly Hubには、権限、組織、ユーザー管理、共有などを含むチーム管理機能が追加されています。

開発者エクスペリエンスの向上

開発者がより多くの言語とランタイムをターゲットにすることを望むため、エクスペリエンスはできるだけシンプルで生産的なものにしておく必要があります。複数言語のサポートとランタイムABI(アプリケーションバイナリインターフェース)ターゲットは、ツールで自動的に処理する必要があります。

Wasmの利点の1つは、多くの言語でモジュールを記述できることです。Solo.ioとGoogleの連携により、C++、Rust、AssemblyScriptで記述されたEnvoyフィルターのすぐに使えるサポートが提供されます。さらに多くの言語のサポートを追加していきます。

Wasm拡張機能は、デプロイされるEnvoyプロキシ内のアプリケーションバイナリインターフェース(ABI)を使用します。WebAssembly Hubは、Envoy、Istio、Gloo間で強力なABIバージョン管理保証を提供し、予期しない動作やバグを防ぎます。心配する必要があるのは拡張コードの記述だけです。

最後に、Dockerと同様に、WebAssembly HubはWasm拡張機能をOCIイメージとして保存および配布します。これにより、Dockerコンテナと同じように簡単に拡張機能をプッシュ、プル、実行できます。Wasm拡張イメージはバージョン管理されており、暗号化的に安全であるため、本番環境と同じようにローカルで安全に拡張機能を実行できます。これにより、ビルドとプッシュだけでなく、イメージをプルダウンしてデプロイするときにソースを信頼することもできます。

Istioを使用したWebAssembly Hub

WebAssembly Hubは、KubernetesにインストールされているIstio(Gloo API Gatewayのような他のEnvoyベースのフレームワークも同様)にWasm拡張機能をデプロイするプロセスを完全に自動化します。このデプロイ機能により、WebAssembly Hubは、オペレーターやエンドユーザーがIstioサービスメッシュ内のEnvoyプロキシを手動で構成してWebAssemblyモジュールを使用する必要性をなくします。

WebAssemblyとIstioを始めるのがいかに簡単であるかを示す次のビデオをご覧ください。

開始方法

WebAssembly Hubが、コミュニティがWasm拡張機能を共有、検出、および配布するための出会いの場になることを願っています。優れたユーザーエクスペリエンスを提供することにより、Wasmの開発、インストール、および実行をより簡単でやりがいのあるものにすることを願っています。WebAssembly Hubに参加し、拡張機能とアイデアを共有し、今後のウェビナーに参加してください。

この記事を共有する