阻止 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 字符串不是空终止的。
我们使用 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 字符串不是空终止的。