AKS集群中Prometheus Dashboard通过Ingress访问空白问题排查
解决Prometheus Ingress子路径静态资源加载失败问题
问题根源
Prometheus前端的静态资源(JS、CSS等)默认使用绝对路径(如/static/xxx),当通过Ingress的/graph前缀访问时,浏览器会错误地请求/graph/static/xxx,而Prometheus服务本身的资源路径是/static/xxx,导致资源加载404,页面仅能显示标题但内容空白。
解决方案
需要同时调整Ingress的路径重写规则,以及配置Prometheus识别自身运行的子路径,双管齐下解决问题。
1. 更新Ingress配置
修改Ingress清单,添加Nginx路径重写注解,并调整路径匹配规则,确保静态资源请求能正确转发到Prometheus服务的对应路径:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-nginx-prometheus-ic namespace: prometheus annotations: kubernetes.io/ingress.class: nginx # 重写非静态资源的请求路径,将/graph后的部分转发给Prometheus nginx.ingress.kubernetes.io/rewrite-target: /$2 # 单独处理静态资源请求,直接将/graph/static开头的路径重写为/static nginx.ingress.kubernetes.io/configuration-snippet: | rewrite ^/graph(/static/.*)$ $1 break; spec: rules: - http: paths: - path: /graph(/|$)(.*) pathType: Prefix backend: service: name: prometheus-kube-prometheus-prometheus port: number: 9090
2. 配置Prometheus识别子路径
通过Helm升级Prometheus实例,设置web.externalUrl参数,让Prometheus生成的页面链接和静态资源路径自动适配/graph子路径:
helm upgrade prometheus prometheus-community/prometheus --namespace prometheus \ --set server.web.externalUrl=http://<你的Ingress域名>/graph
将<你的Ingress域名>替换为实际访问的域名(例如prometheus.yourcompany.com)。
3. 验证修复效果
- 应用修改后的Ingress配置:
kubectl apply -f <你的Ingress文件名>.yaml -n prometheus - 等待Helm升级完成后,重新访问
http://<你的Ingress域名>/graph,此时JS、CSS等静态资源应能正常加载,页面将显示完整的Prometheus控制台界面。
补充说明
如果仅配置Ingress路径重写而不设置web.externalUrl,Prometheus生成的页面导航链接仍会使用绝对路径,导致跳转错误。必须同时配置这两项,才能完全解决子路径访问的所有问题。
内容的提问来源于stack exchange,提问作者sakshi
相关产品推荐
相关产品推荐

