Description
Title: Envoy WASM extensions in the present and its future (Proxy-Wasm)
Description:
Envoy current supports WASM extensions via the WASM filter. I am aware of the following warning:
The Wasm filter is experimental and is currently under active development. Capabilities will be expanded over time and the configuration structures are likely to change.
The documentation for the feature is fairly terse and I largely used articles like https://tetrate.io/blog/wasm-modules-and-envoy-extensibility-explained-part-1/ and there was Google Document proposal that I had read a while back but I'm now unable to find the document. We have hit a number of issues in terms of the documentation, extension development process and clear understanding of the adhered ABI spec and plans for that.
- The ABI that Envoy seems to have chosen is https://github.com/proxy-wasm. But if you look at the spec as it is defined today under https://github.com/proxy-wasm/spec/tree/main/abi-versions it is in-fact empty at this time. Envoy appears to use
v0.1.0
of the spec, although that isn't clear documented. Spec documentation for v0.1.0? proxy-wasm/spec#46 is a request for information on the spec and where it might be defined. Document Proxy-Wasm ABI v0.2.1. proxy-wasm/spec#42 appears to attempt to documentv0.2.1
of the spec but it is coming up on a year without that being merged. - The organization https://github.com/orgs/proxy-wasm/people only has one member (https://github.com/lizan) at this time. It does appear that the organization and hence the spec has been abandoned at this time.
- https://github.com/tetratelabs/proxy-wasm-go-sdk was what I used to get it all working. This is maintained outside the aforementioned organization and with https://github.com/tetratelabs. It also references the ABI spec for https://github.com/proxy-wasm which we have established isn't up-to-date or really documented.
- Kong even seems to have adopted Proxy-Wasm as they have https://github.com/Kong/ngx_wasm_module/. They actually had some good examples of writing filters which could largely be used with Envoy. Also see https://konghq.com/blog/engineering/proxy-wasm.
- Even Istio has a similar documentation for using WASM under https://istio.io/latest/docs/concepts/wasm/ but has the same documentation issues as Envoy but does refer to a decent set of examples under https://github.com/istio-ecosystem/wasm-extensions. There are lots of articles from the Istio community with announcements like https://opensource.googleblog.com/2020/03/webassembly-brings-extensibility-to.html and https://www.solo.io/blog/an-extended-and-improved-webassembly-hub-to-helps-bring-the-power-of-webassembly-to-envoy-and-istio/. Unfortunately, I get blocked from using their announced https://webassemblyhub.io/ and I'm not even sure if it is alive and used today.
- I noticed that Envoy Gateway 1.0 was announced (https://gateway.envoyproxy.io/news/blogs/1.0-release/1.0-release/). WASM extensions are part of its release and the documentation exists at https://gateway.envoyproxy.io/docs/tasks/extensibility/wasm/ but once again it really doesn't cover how to build an extension and doesn't even mention Proxy-Wasm.
There are many more references across the Internet with reference to WASM extensions for things that use Envoy under the hood or have decided to also adopt it as its ABI. But as I mentioned above the spec isn't really even defined in the public space and all work on it appears abandoned or stalled.
What I'm trying to determine is the following:
- Does Envoy in-fact use Proxy-Wasm and
v0.1.0
of the spec? - Since the spec doesn't exist in consumable form under https://github.com/proxy-wasm/spec/tree/main/abi-versions how can I determine the ABI that Envoy is using?
- Does Envoy intend to move to later versions of the spec, assuming they are documented and agreed upon at some point in the future?
- When products like https://gateway.envoyproxy.io refer to WASM extensibility I assume they are using Envoy under the hood and that in fact Envoy's WASM extensions are used. Is this a correct assumption?
- Does anyone have a good understanding of the future of WASM extensions in Envoy and what the support and evolution might look like?
Relevant Links:
- proposal: design Wasm ABI for tracing providers #10563
- https://github.com/proxy-wasm
- https://github.com/proxy-wasm/spec
- https://github.com/tetratelabs/proxy-wasm-go-sdk
- https://istio.io/latest/docs/concepts/wasm/
- https://github.com/istio-ecosystem/wasm-extensions
- https://webassemblyhub.io/
- https://gateway.envoyproxy.io/docs/tasks/extensibility/wasm/