On Dec 10th, 2019, cloud native software company Solo.io released WebAssembly Hub, a service for building, deploying, sharing, and discovering WebAssembly (Wasm) extensions for the Envoy proxy. Extending Envoy with filters will allow customizations such as TLS inspection, TCP proxying, and HTTP request and response manipulation. The Solo.io team's goal for the WebAssembly Hub is to remove barriers for developing and sharing Wasm-based Envoy filters and enable users to configure and extend their service mesh.
According to Solo.io founder and CEO Idit Levine:
At Solo.io, we believe that extending the functionality of your service mesh should be simple and secure, this is why we're excited about integrating Wasm with Envoy Proxy. We built the WebAssembly Hub to help end users develop extensions and consume them.
The WebAssembly Hub is an image registry for Wasm extensions for Envoy. WebAssembly extensions can be built with any of the supported languages, such as C, Go, and .NET. Wasm is currently supported by Solo.io's Gloo Enterprise API gateway, and partially supported in the service mesh Istio and the Envoy Proxy itself. It is worth mentioning that the primary Envoy code repository (and corresponding release binaries) do not currently support Wasm, and instead all Envoy Wasm-based support work is occurring in a mirrored repository (envoy-wasm). Istio switched to using this mirror of Envoy earlier in the year. The expectation is that the two Envoy repositories will be merged at some point in 2020.
Users can create extensions, such as routing rules, written in any Wasm supported language. Extensions can be made available on the WebAssembly Hub and usable with the Solo.io CLI wasme. After writing an extension, users push the extension to the WebAssembly Hub registry with wasme. The extension can then be deployed to a Envoy environment by configuring the service to load the module from the WebAssembly Hub registry.
Extensions can be shared as modules by adding them to the catalog with wasme, which creates a pull request against the wasme Github repository. The PR will be reviewed by the WebAssembly Hub team and included in the catalog if accepted. Users can also explore and search for extensions on the WebAssembly Hub website. Current modules include the templating engine Inja Transformation, AWS Lambda authentication and routing, and a REST to SOAP translation tool. The WebAssembly Hub also provides the configuration updates needed to add an extension to Envoy-based products.
WebAssembly Hub Search, from the Solo.io blog
Solo.io selected Wasm for extending Envoy due to its speed and ability to dynamically add or modify extensions without needing to stop an Envoy process or recompile. Additionally, the Wasm community has developed compiler support for many popular languages. The Wasm extensions do not make changes directly to Envoy itself, which provides isolation to ensure if an extension crashes, Envoy is not negatively impacted. Solo.io's recent release of the Envoy-based API gateway, Gloo, also includes built-in support for Wasm.
Learn more and browse the available extensions at the WebAssembly Hub. To get started with creating extensions, visit the Solo.io documentation.