通过K8s集群访问Jaeger /tracing返回index.html及503服务不可用
问题排查与解决方案
核心问题分析
Jaeger通过Istio Ingress Gateway访问出现503或空白页,本质是两个关键配置不匹配:
- Istio路由未正确处理路径前缀与转发规则
- Jaeger UI未配置
BASE_URL,导致静态资源、API请求路径错误
步骤1:确认Jaeger Service端口配置
首先检查Istio命名空间中Jaeger Service的端口映射,确保VirtualService的目标端口与实际一致:
kubectl get svc tracing -n istio-system
默认Jaeger UI的targetPort为16686,若Service将其暴露为80端口,则VirtualService可使用80;否则需调整为16686。
步骤2:修正Istio路由配置
更新VirtualService,添加路径匹配与重写规则,确保所有/tracing前缀的请求正确转发到Jaeger:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: tracing-gateway namespace: istio-system spec: selector: istio: ingressgateway servers: - port: number: 80 name: http-tracing protocol: HTTP hosts: - "*" --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: tracing-vs namespace: istio-system spec: hosts: - "*" gateways: - tracing-gateway http: - match: - uri: prefix: /tracing rewrite: uri: "/" route: - destination: host: tracing port: number: 16686 # 替换为实际Jaeger Service暴露的端口 # 兼容Jaeger内部跳转的/jaeger路径 - match: - uri: prefix: /jaeger rewrite: uri: "/" route: - destination: host: tracing port: number: 16686 --- # 若Jaeger与Istio之间为明文通信,可保留此规则;否则可删除 apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: tracing namespace: istio-system spec: host: tracing trafficPolicy: tls: mode: DISABLE
步骤3:配置Jaeger UI的Base路径
Jaeger UI默认使用根路径,需通过环境变量指定BASE_URL,确保静态资源、API请求自动带上/tracing前缀:
kubectl edit deployment tracing -n istio-system
在容器的env字段中添加:
env: - name: BASE_URL value: "/tracing" - name: COLLECTOR_HTTP_PORT value: "14268"
保存后重启Jaeger Deployment:
kubectl rollout restart deployment tracing -n istio-system
步骤4:验证配置
- 检查Istio规则是否生效:
istioctl analyze -n istio-system
- 查看IngressGateway日志,排查转发错误:
kubectl logs -n istio-system -l istio=ingressgateway -f
- 测试访问:
http://localhost:90/tracing
内容的提问来源于stack exchange,提问作者Cole Maly
相关产品推荐
相关产品推荐

