K8s集群中通过Ingress无法访问Grafana Dashboard问题咨询
问题原因
你遇到的404报错由两个配置不匹配导致:
- Ingress路径转发配置错误:你当前的Ingress配置路径为
/grafana/login且没有配置路径重写规则,请求到达Grafana服务时携带的路径仍然是/grafana/login,但Grafana默认在根路径/下提供服务,无法识别带/grafana前缀的路径,直接返回404。 - 未配置Grafana子路径适配:如果你需要使用
/grafana作为统一访问前缀,需要同步修改Grafana的服务配置,让它能识别前缀路径,否则即使路径重写正常,页面内的静态资源、接口跳转也会出现路径错误。
解决方法
方案1:根路径访问(最快生效,无需修改Grafana配置)
直接修改Ingress配置,匹配根路径即可:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: grafana-ingress namespace: default spec: ingressClassName: kong rules: - http: paths: - path: / pathType: Prefix backend: service: name: prometheus-grafana port: number: 80
修改后执行kubectl apply -f <你的ingress配置文件名>,访问Ingress的对外IP/域名即可直接进入Grafana。
方案2:保留/grafana路径前缀访问
需要同时修改Ingress和Grafana配置:
- 修改Ingress配置,添加Kong Ingress的路径重写注解:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: grafana-ingress namespace: default annotations: konghq.com/rewrite: /$1 spec: ingressClassName: kong rules: - http: paths: - path: /grafana/?(.*) pathType: Prefix backend: service: name: prometheus-grafana port: number: 80
- 因为你是通过Helm安装的Grafana,执行以下命令升级Release,开启Grafana的子路径适配:
helm upgrade prometheus prometheus-community/kube-prometheus-stack \ --set grafana.env.GF_SERVER_ROOT_URL="%(protocol)s://%(domain)s/grafana/" \ --set grafana.env.GF_SERVER_SERVE_FROM_SUB_PATH=true
等待Grafana Pod重启完成后,访问http://<Ingress对外地址>/grafana即可正常访问仪表盘。
内容的提问来源于stack exchange,提问作者samm13
相关产品推荐
相关产品推荐

