【发布时间】:2021-05-18 03:35:24
【问题描述】:
我正在尝试为 Envoy 构建一个 tcp 级别的 WASM 过滤器。我正在使用以下过滤器链进行测试:
filter_chains:
- filters:
- name: envoy.filters.wasm
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.wasm.v3.Wasm
config:
name: "myfilter"
vm_config:
runtime: "envoy.wasm.runtime.v8"
code:
local:
filename: "/opt/envoy/filter.wasm"
allow_precompiled: true
- name: envoy.filters.network.echo
我的 cpp 代码编译正常,并且 envoy 启动正常,但即使只是
FilterStatus MyFilterContext::onNewConnection() {
LOG_DEBUG("onNewConn");
return FilterStatus::StopIteration;
};
FilterStatus MyFilterContext::onDownstreamData(size_t, bool) {
LOG_DEBUG("onDownstream");
return FilterStatus::StopIteration;
}
我希望连接永远不会到达 echo 服务,但它每次都会这样做,并且在 envoy 日志中没有从 wasm 过滤器端记录任何内容,除了显示 wasm 始终返回相同逻辑值的跟踪级别日志:
[29][trace][wasm] [source/extensions/common/wasm/wasm_vm.cc:40] [host->vm] proxy_on_new_connection(2)
[29][trace][wasm] [source/extensions/common/wasm/wasm_vm.cc:40] [host<-vm] proxy_on_new_connection return: 0
虽然 HTTP 过滤器有很多,但我无法找到任何 network 过滤器实现的示例,这让我想知道是否有人有这个工作,如果有,具体是如何工作的。 p>
我也尝试在 rust 中实现它,但在编译时没有成功,但是在 envoy 中它失败了
Function: proxy_on_context_create failed: Uncaught RuntimeError: unreachable
Proxy-Wasm plugin in-VM backtrace:
0: 0x164c - __rust_start_panic
有人真的为 Envoy 实现了一个有效的 network 过滤器吗?一个示例代码会很棒,因为我发现的所有示例都是针对对我没有好处的 HTTP 过滤器。
【问题讨论】:
标签: c++ rust webassembly envoyproxy