Istio中x-b3-*类追踪头部是在哪个环节被过滤的?
Istio x-b3-* 追踪头过滤环节说明
x-b3-* 类 B3 格式追踪头的过滤逻辑发生在 Envoy Sidecar 代理处理响应流量的路由器过滤(Router Filter)阶段,具体原因如下:
- Istio 默认的链路追踪配置仅负责在请求链路的各节点转发过程中生成、透传追踪头,用于跨服务的链路上下文传递,没有默认配置将这类内部链路头写入响应返回给上游调用方。
- Envoy 的路由器过滤器在处理响应时,默认仅保留业务服务返回的原生响应头、以及 Istio 显式配置需要追加的公共响应头(比如
x-envoy-upstream-service-time这类默认暴露的性能统计头),B3 追踪头属于链路内部传递的上下文数据,不在默认返回白名单中。 - 你能通过 EnvoyFilter 访问到相关头部,是因为追踪上下文会在请求的全生命周期内存储在 Envoy 的请求元数据中,只要显式配置将这类头追加到响应头,即可返回给调用方。
如果需要将 traceid 返回给调用方,可以通过如下 EnvoyFilter 配置实现:
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: add-traceid-response-header namespace: istio-system spec: workloadSelector: labels: istio: ingressgateway # 也可以替换为对应业务工作负载的标签 configPatches: - applyTo: RESPONSE_HEADER_ADD match: context: GATEWAY # 业务Sidecar场景改为SIDECAR_INBOUND patch: operation: ADD value: name: "x-b3-traceid" value: "%REQ(x-b3-traceid)%"
注意:如果需要返回其他 B3 头,按照上述格式追加对应配置即可。
内容的提问来源于stack exchange,提问作者user2095730
相关产品推荐
相关产品推荐

