我已经安装了带有演示配置文件的Kubernetes 1.17.5和Istio 1.6.8。
这是我的测试设置[nginx-ingress-controller]-> [proxy ServiceA]-> [proxy ServiceB]

  • 由Istio自动注入(inject)serviceA和serviceB的代理(istio-injection = enabled)
  • Nginx入口 Controller 未启用跟踪,也没有作为特派车的特使代理
  • ServiceA将跟踪 header 向下传递到ServiceB
  • 我正在尝试跟踪从ServiceA到ServiceB的调用,而现在
  • 不在乎Ingress-> ServiceA跨度

    当我向入口 Controller 发送请求时,我可以看到ServiceA从代理接收了所有必需的跟踪 header
    x-b3-traceid: d9bab9b4cdc8d0a7772e27bb7d15332f
    x-request-id: 60e82827a270070cfbda38c6f30f478a
    x-envoy-internal: true
    x-b3-spanid: 772e27bb7d15332f
    x-b3-sampled: 0
    x-forwarded-proto: http
    
    问题是 x-b3采样的始终设置为0,并且没有跨度/迹线被推到Jaeger
    我尝试过的几件事
  • 我已将网关和VirtualService添加到ServiceA以通过Istio ingressgateway公开它。当我通过Ingressgateway发送流量时,一切正常。我可以在JaegerUI
  • 中看到轨迹[ingress-gateway]-> [ServiceA]-> [ServiceB]
  • 我也尝试使用自定义配置安装Istio,并在没有运气的情况下使用跟踪相关参数。

  • 这是我尝试使用的配置
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      meshConfig:
        enableTracing: true
        defaultConfig:
          tracing:
            sampling: 100
      addonComponents:
        tracing:
          enabled: true
        grafana:
          enabled: false
        istiocoredns:
          enabled: false
        kiali:
          enabled: false
        prometheus:
          enabled: false
      values:
        tracing:
          enabled: true
        pilot:
          traceSampling: 100
    

    最佳答案

    经过几天的挖掘,我已经弄清楚了。问题是nginx入口 Controller 使用的x-request-id header 的格式。
    Envoy代理期望它是一个UUID(例如x-request-id: 3e21578f-cd04-9246-aa50-67188d790051),但是ingrex Controller 将其作为非格式的随机字符串(x-request-id: 60e82827a270070cfbda38c6f30f478a)传递。当我在请求中将格式正确的x-request-id header 传递给Ingress Controller 时,它向下传递到Envoy代理,并且请求按预期方式采样。我也尝试删除
    使用简单的EnvoyFilter从入口 Controller 到ServiceA的请求中的x-request-id header 。而且它也按预期工作。特使代理生成一个新的x-request-id,并跟踪请求。

    关于kubernetes - 通过入口 Controller 访问服务时,x-b3采样的 header 始终设置为0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63507749/

    10-10 04:39