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

裸金属Kubernetes环境下Grafana UI访问故障求助

排查裸金属K8s环境中Grafana UI访问卡顿问题

一、先验证Grafana服务与Pod的内部连通性

  • 集群内直接访问测试
    找一个集群内的临时Pod,直接请求Grafana的ClusterIP和容器端口,确认服务本身是否正常:

    kubectl run -it --rm busybox --image=busybox:1.35 -- wget -O- http://grafana.monitoring.svc.cluster.local:3000
    
    • 如果这个请求也卡顿,问题出在Grafana Pod本身或集群CNI网络,和Ingress/MetalLB无关;
    • 如果内部访问正常,再排查外部访问链路。
  • 检查Grafana Pod资源占用
    确认Pod是否因资源不足导致卡顿:

    kubectl top pod -n monitoring $(kubectl get pods -n monitoring -l app=grafana -o name | cut -d/ -f2)
    

    如果CPU/内存接近配置的限制值,调整Pod的resources.requests和limits参数。

二、排查MetalLB与NodePort链路问题

用户用「节点IP:31657」访问卡顿,先从端口可达性和MetalLB配置入手:

  • 验证NodePort端口连通性
    在集群外机器上测试端口是否开放:

    nc -zv 212.112.123.114 31657
    

    如果端口不通,检查节点防火墙是否放行NodePort范围(默认30000-32767):

    firewall-cmd --add-port=31657/tcp --permanent
    firewall-cmd --reload
    
  • 测试MetalLB外部IP直接访问
    尝试访问MetalLB分配的IP:192.168.1.13:3000,如果依然卡顿,检查MetalLB的IP池配置是否和节点在同一网段:

    kubectl get configmap -n metallb-system config -o yaml
    

三、修复Ingress配置的核心问题

当前Ingress配置有两处明显错误:

  1. 后端端口配置错误
    Grafana服务的端口映射是3000:31657,其中3000是容器端口(服务内部转发端口),31657是NodePort外部端口。Ingress应该指向服务内部的3000端口,修正后的配置:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
      name: ingress-monitoring
      namespace: monitoring
    spec:
      ingressClassName: nginx-monitoring
      rules:
      - http:
          paths:
          - backend:
              service:
                name: grafana
                port:
                  number: 3000  # 改为服务内部的容器端口
            path: /monitoring(/|$)(.*)
            pathType: Prefix
    
  2. 配置Grafana子路径适配
    因为Ingress用了/monitoring子路径,Grafana需要知道自身的根路径,否则静态资源会请求根路径导致加载失败。修改Grafana Deployment添加环境变量:

    env:
    - name: GF_SERVER_ROOT_URL
      value: "%(protocol)s://%(domain)s:%(http_port)s/monitoring/"
    

    如果用Helm安装,直接在values.yaml中配置:

    grafana:
      env:
        GF_SERVER_ROOT_URL: "/monitoring/"
    

四、检查Nginx Ingress Controller日志

查看Ingress转发过程中的错误信息,定位链路问题:

kubectl logs -n ingress-nginx $(kubectl get pods -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx -o name | cut -d/ -f2)

如果看到connection refused或timeout日志,回到第一步重新排查内部连通性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:40:38