wasm
使用wasm扩展envoy
envoy wasm 介绍
WebAssembly是一种沙盒技术,可用于扩展Istio代理(Envoy)。Proxy-Wasm沙箱API取代了Mixer作为Istio中的主要扩展机制。
WebAssembly沙箱目标:
效率 -扩展增加了低延迟,CPU和内存开销。
功能 -扩展可以执行策略,收集遥测和执行有效载荷突变。
隔离 -一个插件中的编程错误或崩溃确实会影响其他插件。
配置 -使用与其他Istio API一致的API配置插件。扩展名可以动态配置。
Operator -可以扩展扩展并将其部署为仅日志,失败打开或失败关闭。
扩展开发人员 -该插件可以用几种编程语言编写。
istio社区基于官方envoy的基础上fork 了https://github.com/istio/envoy,在wasm分支以实现istio wasm支持,当前官方envoy暂未支持wasm
架构
筛选器服务提供程序接口(SPI),用于为筛选器构建Proxy-Wasm插件。
Envoy中嵌入了Sandbox V8 Wasm Runtime。
headers, trailers 和 metadata的host api。
调出用于gRPC和HTTP调用的API。
Stats和Logging API,用于度量和监视

通过js生成wasm实现envoy header的修改
代码实现
使用 solo.io提供的proxy-runtime 通过js来实现wasm逻辑
修改package.json
修改依赖为 proxy-runtime的本地路径
该示例判断配置的header value是否存在,不存在设置则添加 hello: worldheader, 设置则为 hello: configvalue 通过逻辑实现:
编译
配置envoy
我们配置了一个返回admin接口的listener,在filter中添加了我们的 add_header wasm plugin
测试访问
我们将编译好的文件通过volume挂在进容器
通过curl测试访问:
可以看到返回的header已经包含 hello: what ever you want
Last updated
Was this helpful?