在整个集群中传播传入服务网格的标头

问题描述

我已在 istio 集群上设置了启用 kubernetes 的微服务架构。

我的 istio-ingressgateway 由 Cloudflare 代理。

后者生成特定标头,即 cf-ray支持对与 cloudflare 相关的问题进行故障排除。

我的问题是如何启用我的服务网格,即在边缘(即 istio-ingressgateway)和所有边车中传播 cf-ray id 标头。

istio 关于 VirtualService 资源的文档,在关于 HeaderOperationssection 中,列出了 3 个可用操作,即 setaddremove

addremove 似乎与我要执行的操作更无关,但是 set 似乎也要求设置特定值。

我只想要一个传递/传播类型的操作,其中 istio 在看到 cf-ray 标头时会传递它

a) 在集群中(当它关于入口网关时)

b) 从每个 sidecar 到主容器(不用说,在这种情况下,主容器的应用程序有责任从那时起继续传播)

解决方法

您没有边车传播标题的问题,因为边车默认这样做。就像您必须在 Istio 中配置跟踪一样。您只需生成并传播一些标头,无需对边车做任何事情。

关于生成部分,其实你要使用的字段是addset 将通过其他方式更改标头值(例如,您有 setfoo: bar,如果您收到带有 foo: baz 的请求,它将设置为 {{1} })。另一方面,foo: bar 会将 add 添加到您的请求中。

关于如何让请求进入集群的部分,在边缘应该没有问题,通过cf-ray你不用配置headers。所以,它只会传递给服务。

示例

Gateway