主机向K8s中Jaeger Operator一体化实例发送追踪数据失败
问题分析与解决方案
Jaeger客户端访问Collector的核心机制
- Jaeger客户端(此处为
opentracing-spring-jaeger-cloud-starter实现)默认通过HTTP协议向Collector的14268端口上报追踪数据,固定上报路径为/api/traces - 客户端优先读取
JAEGER_ENDPOINT环境变量或Spring配置jaeger.endpoint;若未配置,默认尝试连接本地localhost:14268 - 集群内运行的服务可通过K8s Service的DNS解析直接访问Collector的集群内部地址,因此能正常上报
本地服务无法上报的原因及解决办法
1. 端口转发配置错误
确认端口转发命令将集群内Collector的14268端口映射到本地同端口:
kubectl port-forward service/jaeger-collector 14268:14268
注:若Jaeger Operator创建的Service名称不是
jaeger-collector,需用kubectl get svc查询实际名称替换
2. Spring Boot客户端未明确配置上报端点
默认情况下客户端会连接localhost:14268,但需显式配置确保指向转发后的端口。在application.yml中添加:
opentracing: jaeger: endpoint: http://localhost:14268/api/traces
或设置环境变量:
JAEGER_ENDPOINT=http://localhost:14268/api/traces
3. Docker Desktop K8s网络隔离
Windows下Docker Desktop的K8s集群与本地主机存在网络隔离,可能导致端口转发失效:
- 重启Docker Desktop的K8s集群
- 检查防火墙是否拦截本地14268端口的请求
- 用
curl http://localhost:14268/api/traces测试连通性,返回405 Method Not Allowed为正常(该接口仅接受POST请求),若返回连接超时则说明网络或转发存在问题
4. 采样策略限制上报
默认采样策略可能设置为0(不采样),需临时配置100%采样率测试:
opentracing: jaeger: sampler: type: const param: 1
验证步骤
- 保持端口转发的终端窗口处于打开状态(关闭后转发停止)
- 配置好Jaeger端点与采样率后重启本地Spring Boot服务
- 调用Service-1的
/path1接口,查看Jaeger UI是否出现追踪数据
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

