You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

k3s集群部署kube-prometheus-stack后无法通过Traefik访问Grafana求助

解决方案

方案1:修复现有跨命名空间配置(无需修改Traefik默认设置,最快生效)

你之前提交的ExternalName服务和对应Ingress存在缩进语法错误,直接导致配置不生效,修正后的配置如下:

---
apiVersion: v1
kind: Service
metadata:
  name: grafana-named
  namespace: kube-system
spec:
  type: ExternalName
  externalName: prometheus-grafana.monitoring.svc.cluster.local
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana-ingress
  namespace: kube-system
spec:
  ingressClassName: traefik
  rules:
  - http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: grafana-named
            port:
              number: 80

配置应用完成后等待30秒左右,直接访问任意Traefik外部IP(你集群输出中为192.168.76.200-192.168.76.203任意一个)的80端口即可访问Grafana,默认账号为admin,密码可通过以下命令获取:

kubectl get secret -n monitoring prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 --decode

方案2:配置Traefik监听所有命名空间(适合长期使用,后续无需再做跨命名空间适配)

k3s默认部署的Traefik仅监听kube-system命名空间的路由资源,你可以通过K3s原生的HelmChartConfig修改全局配置,操作步骤如下:

  1. 创建Traefik配置文件traefik-config.yaml,内容如下:
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    providers:
      kubernetesIngress:
        namespaces: []
      kubernetesCRD:
        namespaces: []
  1. 应用配置:
kubectl apply -f traefik-config.yaml
  1. 等待1-2分钟,K3s内置的Helm控制器会自动重启Traefik加载新配置
  2. 删除你之前在kube-system命名空间创建的grafana-named服务和grafana-ingress路由,直接使用你最开始编写的monitoring命名空间下的Ingress即可,建议替换注解为标准的ingressClassName配置,修正后如下:
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: grafana-ingress
  namespace: monitoring
spec:
  ingressClassName: traefik
  rules:
  - http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: prometheus-grafana
            port:
              number: 80

排查方法

如果配置后仍无法访问,可通过以下命令查看Traefik日志定位具体问题:

kubectl logs -n kube-system $(kubectl get pods -n kube-system -l app.kubernetes.io/name=traefik -o name)

日志会明确打印路由不生效的具体原因,比如资源不存在、权限不足、配置语法错误等。

内容的提问来源于stack exchange,提问作者Bill Mair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:09:03