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修改全局配置,操作步骤如下:
- 创建Traefik配置文件
traefik-config.yaml,内容如下:
apiVersion: helm.cattle.io/v1 kind: HelmChartConfig metadata: name: traefik namespace: kube-system spec: valuesContent: |- providers: kubernetesIngress: namespaces: [] kubernetesCRD: namespaces: []
- 应用配置:
kubectl apply -f traefik-config.yaml
- 等待1-2分钟,K3s内置的Helm控制器会自动重启Traefik加载新配置
- 删除你之前在
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
相关产品推荐
相关产品推荐

