阻止 Envoy 修改分片键

Prevent Envoy from modifying the sharding key

我们使用 two-layer Envoy 设置。

[front-end] -> E -> [middleware] -> E -> [backend]

中间件应该从 HTTP 元数据中获取分片键,并且 re-transmit 在与后端对话时使用它。

我们注意到 Envoy 修改了 HTTP header,这导致我们在 gRPC 中的服务崩溃。

E1016 11:19:45.808599731      19 call.cc:912]                validate_metadata: {"created":"@1602847185.808584663","description":"Illegal header value","file":"external/com_github_grpc_grpc/src/core/lib/surface/validate_metadata.cc","file_line":44,"offset":56,"raw_bytes":"36 37 36 38 33 61 34 34 36 35 36 35 37 30 34 33 36 66 36 34 36 35 34 31 34 39 33 61 36 35 36 33 36 63 36 39 37 30 37 33 36 35 32 64 37 30 36 63 37 35 36 37 36 39 36 65 a5 '67683a44656570436f646541493a65636c697073652d706c7567696e.'\u0000"}
E1016 11:19:45.808619606      19 call_op_set.h:947]          assertion failed: false

有什么办法可以避免这种情况?

更新: 似乎只发生在 x- headers.

其实这个问题最终和Envoy无关。事实证明 gRPC 字符串不是空终止的。