The power of WebAssembly Proxy Extensions on Kong API Gateway
WasmX for Kong API Gateway enables developers to write Wasm packet filters in their preferred language and deploy them to both Kong or Envoy based dataplanes.
The Wasm System Interface (WASI) project extended Wasm beyond the browser by establishing the needed Application Binary Interface (ABI) standardization effort to formally build ecosystems of server-side Wasm applications.
Wasm extensions depend on a proxy exposing an embedded Wasm runtime. First featured in the Envoy Proxy, Wasm for Proxies defines a standard integration spec to facilitate communication between the proxy host program and data filter extensions over the Wasi ABI.
The following steps will demonstrate a very basic Wasm packet header extension running in the WasmX module on Kong API Gateway with docker.
The plugin will add the following headers to the response packet:
Cowsay: Hello World Powered-By: proxy-wasm
Make sure you have all dependencies
bash -c "cat <<EOF | bash -es --
Clone a proxy-wasm filter repo:
git clone https://github.com/Kong/proxy-wasm-hello-world wasm
Run Kong API Gateway:
curl -Ls https://get.konghq.com/quickstart | bash -s -- -i incubator -t gateway-wasmer-22.214.171.124 \
-e "KONG_WASM=on" -e "KONG_WASM_MODULES=/wasm/proxy_wasm_hello_world.wasm" -v $(pwd)/wasm:/wasm
http POST :8001/services/ name="mockbin" host="mockbin.com" path="/bin/ccb2968e-08e8-43af-babd-878c9f269486" protocol="http"
http POST :8001/services/mockbin/routes name="mockbin" "paths=/mockbin"
proxy_wasm_hello_worldon the mockbin route:
http POST :8001/services/mockbin/plugins name="proxy-wasm" "config[filters][name]=proxy_wasm_hello_world"
Check for header:
Cowsay: Hello World
http GET :8000/mockbin
HTTP/1.1 200 OK Connection: keep-alive Content-Length: 15 Cowsay: Hello World Date: Wed, 21 Sep 2022 22:46:01 GMT Powered-By: proxy-wasm Server: nginx Via: kong/126.96.36.199-enterprise-edition X-Kong-Proxy-Latency: 340 X-Kong-Upstream-Latency: 0 Hello, World!