将 headers 传入服务网格传播到整个集群

Propagating headers incoming to service mesh throughout the cluster

我已经在 kubernetes 集群上设置了一个支持 istio 的微服务架构。

我的 istio-ingressgateway 由 Cloudflare 代理。

稍后,生成一个特定的 header,即 cf-ray 以支持解决 cloudflare-related 问题。

我的问题是如何启用我的服务网格,即在边缘(即 istio-ingressgateway)和所有 sidecars 传播 cf-ray id header.

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

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

我只想要 passthrough/propagation 类型的操作,其中 istio 在看到 cf-ray header 时会通过它

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

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

您不会遇到边车传播 header 的问题,因为边车默认会这样做。这就像您必须在 Istio 中配置跟踪一样。您只需生成并传播一些 headers,无需对 sidecars 做任何事情。

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

关于请求如何进入集群的部分,在边缘应该没有问题,通过Gateway你没有配置header。因此,它只会传递给服务。

示例

...
spec:
  hosts:
  - service.namespace.svc.cluster.local
  http:
  - headers:
      request:
        add:
          key: "value"
    route:
    - destination:
        host: service.namespace.svc.cluster.local
...