【问题标题】:Building Envoy WASM network filter构建 Envoy WASM 网络过滤器
【发布时间】: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


    【解决方案1】:

    是的,我已经为 Envoy 实现了一个有效的 NETWORK_FILTER。需要https://github.com/solo-io/proxy-runtime/commit/0b7fec73a36a979b53a05393b3868f1661af8dff 才能在 AssemblyScript 中工作。提交消息描述了我与 Istio 风格的 Envoy 一起使用的 YAML 配置,但这取决于您使用的 Envoy 版本。每种语言的运行时可能支持也可能不支持,但如果您不想使用 AssemblyScript,C++ 运行时肯定支持。

    另见https://www.envoyproxy.io/docs/envoy/latest/configuration/listeners/network_filters/wasm_filter.html

    【讨论】:

      猜你喜欢
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 1970-01-01
      相关资源
      最近更新 更多