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

Illegal map value with envoy v3 about typed_config http connection manager

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

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

 - name: envoy.http_connection_manager
        config:
            ...

根据这个 example,拥有 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

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

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

如果您需要更多资料来解决问题,我已将整个项目上传到 GitHub

是的,有点痛苦。 有一个在线特使 config checker 可以帮助确定哪些版本放弃了向后兼容性。

您已正确地从旧版 config 切换到 typed_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

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