WebAssembly written in GO and used with Envoy to check HTTP request header and do not allow request if a certain header is not present
In this, we are checking for header x-header1
to be present. The web-assembly code is called as filter in Envoy
brew install envoy
brew tap tinygo-org/tools
brew install tinygo
# work on main.go - it has the actual logic for webassembly filter in GO
# build web-assembly
tinygo build -o ./hello.wasm -scheduler=none -target=wasi ./main.go
# work on envoy.yaml - here the custom webassembly filter is added to envoy
# run envoy
envoy -c envoy.yaml -l debug
output when header present -> Hello World!
reetasingh-ltm8:~ reetasingh$
reetasingh-ltm8:~ reetasingh$ curl localhost:8085/hello --header "x-header1:abc"
Hello World!reetasingh-ltm8:~ reetasingh$
reetasingh-ltm8:~ reetasingh$
reetasingh-ltm8:~ reetasingh$
reetasingh-ltm8:~ reetasingh$
reetasingh-ltm8:~ reetasingh$
output when header is not present -> request is paused
reetasingh-ltm8:~ reetasingh$ curl localhost:8085/hello
https://tufin.medium.com/extending-envoy-proxy-with-golang-webassembly-e51202809ba6