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

无法通过Traefik反向代理访问Kubernetes中的Prometheus服务

问题排查与修复方案

让我帮你梳理下当前的问题,从你给出的配置里我发现了几个关键的问题点,咱们逐个解决:

1. ClusterRoleBinding的ServiceAccount命名空间错误

你的Traefik ServiceAccount是创建在traefik命名空间下的,但ClusterRoleBinding里却把subject的namespace写成了kube-system——这会导致Traefik没有足够的权限去获取Kubernetes服务和端点的详细信息,虽然Ingress能在Traefik GUI里显示,但实际流量无法正确转发到后端的Prometheus服务。

修复方法:修改ClusterRoleBinding的subject部分,把namespace改成traefik:

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: traefik-ingress-controller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: traefik-ingress-controller
subjects:
- kind: ServiceAccount
  name: traefik-ingress-controller
  namespace: traefik  # 这里从kube-system修正为traefik

2. 确认Prometheus Service的端口匹配

你的Ingress里用了servicePort: prom,需要确保你的prometheus-svc服务里确实定义了这个命名端口,示例如下:

apiVersion: v1
kind: Service
metadata:
  name: prometheus-svc
spec:
  ports:
  - name: prom  # 必须和Ingress里的servicePort完全一致
    port: 9090
    targetPort: 9090
  selector:
    app: prometheus

如果没有给端口命名,直接用端口号(比如9090)会更稳妥,避免命名不匹配的问题。

3. 检查网络访问权限

因为你用了hostNetwork: true,Traefik会直接占用节点的80端口:

  • 确认Master节点的安全组/防火墙已经开放了80端口,允许外部公网访问
  • 访问Prometheus的地址应该是http://<Master公网IP>/prometheus,不需要加额外端口号(Traefik监听的是默认80端口)

4. 让配置修改生效

修改权限配置后,需要重启Traefik DaemonSet让新的权限生效:

kubectl rollout restart daemonset traefik-ingress-controller -n traefik

额外排查步骤

如果以上修改后还是无法访问,可以做这些验证:

  • 查看Traefik的日志,排查转发错误:kubectl logs -n traefik <traefik-pod-name>
  • 检查Prometheus Service的Endpoint是否正常:kubectl describe service prometheus-svc,确认Endpoints列表里有正常运行的Pod IP和端口
  • 在集群内直接测试Prometheus Service的可用性:在任意集群Pod里执行curl http://prometheus-svc:9090,看是否能返回Prometheus的页面内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:57:27