我已经安装了带有演示配置文件的Kubernetes 1.17.5和Istio 1.6.8。
这是我的测试设置[nginx-ingress-controller]-> [proxy ServiceA]-> [proxy ServiceB]
当我向入口 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我尝试过的几件事
这是我尝试使用的配置
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/