如何通过Istio Ingress网关访问Prometheus与Grafana?配置子路径后加载报错
Istio 前缀路径访问Grafana前端加载失败的排查与解决
报错直接原因
- VirtualService路由配置存在端口错误:原配置将路由目标端口写为Pod的3000端口,与grafana ClusterIP Service实际监听的80端口不匹配,导致部分请求路由失败
- Grafana未开启子路径托管能力:启动时未配置子路径相关参数,前端返回页面中的静态资源请求默认指向网站根路径,与Istio网关设定的/grafana路由前缀不匹配,浏览器拉取静态资源失败后触发报错
分步修复操作
1. 配置Grafana子路径托管参数
Grafana 5.4.3版本支持通过环境变量覆盖默认配置,执行以下命令更新Deployment,自动滚动重启Pod生效配置:
kubectl set env deployment/grafana -n monitoring \ GF_SERVER_ROOT_URL="http://<你的Istio Ingress实际访问域名>/grafana" \ GF_SERVER_SERVE_FROM_SUB_PATH="true"
参数对应说明:
GF_SERVER_ROOT_URL对应grafana.ini中的root_url配置,指定Grafana对外暴露的访问根路径,前端生成的静态资源链接会自动带上/grafana前缀GF_SERVER_SERVE_FROM_SUB_PATH开启子路径服务模式,确保Grafana可正确响应/grafana前缀下的页面、API、静态资源请求
2. 修正VirtualService路由配置
将原配置中错误的路由端口替换为grafana Service的实际监听端口(80),更新后的完整配置如下:
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: grafana spec: hosts: - "*" gateways: - cogtiler-gateway.skydeck http: - match: - uri: prefix: /grafana route: - destination: host: grafana port: number: 80
应用更新配置:
kubectl apply -f grafana-virtualservice.yaml -n monitoring
验证校验项
- 执行
kubectl get svc grafana -n monitoring,确认Service的监听端口与VirtualService中配置的端口数值完全一致 - 访问时使用带结尾斜杠的完整路径
http://<你的Istio Ingress域名>/grafana/,避免路径不匹配触发跳转异常 - 若仍有资源加载异常,可通过
istioctl proxy-config routes <网关Pod名> -n <网关命名空间>确认网关已正确加载/grafana前缀的路由规则
内容的提问来源于stack exchange,提问作者Samir Parhi
相关产品推荐
相关产品推荐

