envoy v3 关于 typed_config http 连接管理器的非法映射值

The*_*oth 5 docker grpc envoyproxy

我正在关注本教程,以便将 gRPC 服务转码为 HTTP。但是,它不是最新的,因为它使用 envoy API v2,但这不再可用(我收到一个错误说这个),他们现在使用 v3。因此,语法略有不同。

对于 v2,此代码段没有语法错误,但是,它引发了一个错误,指出 V2 不再可用(因此最终无法使用):

 - name: envoy.http_connection_manager
        config:
            ...
Run Code Online (Sandbox Code Playgroud)

根据这个例子,有一个 HTTP 连接管理器(它是 v3 兼容的)的方法是在envoy.yml配置文件中这样做(我们明确地告诉我们我们正在使用 v3):

- name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager

Run Code Online (Sandbox Code Playgroud)

但是,我收到一个Illegal map value错误指向"@type"error initializing configuration '/etc/envoy/envoy.yaml': yaml-cpp: error at line 15, column 17: illegal map value

我也试过强制 envoy 使用 V2,带有 flag --bootstrap-version 2,但是一直说 v2 不再使用,所以现在使用 envoy 的唯一方法就是使用 v3。你遇到过同样的问题吗?我的目标只是将 rGPC 服务转码为 HTTP。

如果你需要更多的材料来解决问题,我把整个项目上传到了GitHub

Pet*_*art 5

是的,它有点痛苦。有一个在线特使配置检查器,它有助于确定哪些版本放弃了向后兼容性。

您已正确地从旧版切换configtyped_config数据。

但是,您似乎无意中在最新配置(第 15 行)中包含了一个选项卡,导致illegal map value.

您还需要将clusters/hosts部分迁移到load_assignments这样:

load_assignment:
  cluster_name: grpc-backend-services
  endpoints:
  - lb_endpoints:
    - endpoint:
        address:
          socket_address:
            address: 127.0.0.1
            port_value: 53000
Run Code Online (Sandbox Code Playgroud)

当前的特使文档中有一个很好的例子:https : //www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/grpc_json_transcoder_filter