istio如何做基于权重的tcp流量转移?

How istio do weight-based tcp traffic shifting?

offical doc 显示了基于权重的 tcp 流量路由,我很好奇 istio 是如何完成这项工作的,因为 tcp 是流数据,其中没有分隔符。 istio 不知道它将获得什么 tcp 数据。

所以我查看 example code 发现目标 go 服务器使用 byte('\n') 作为分隔符。这是否意味着 istio tcp 流量路由(不包括不需要检查数据内容的端口转发)要求用户 tcp 数据必须使用 '\n' 作为分隔符?

envoy 无法路由自定义的 L4 流量。它的L4流量路由仅用于http,作为http数据格式的定义,以\n结尾的字符串是合法的Simple-Request,这就是示例工作正常的原因。

custom defined filters 分别在 Envoy::Networks::ReadFilter::onDataEnvoy::Networks::WriteFilter::onWrite 中进行编码和解码。然而,这两个函数没有传递任何关于数据包知识的信息。这意味着特使不能对那些自定义的 tcp 流进行流量管理,例如,重定向到另一个 pod