Kubernetes中Prometheus跨命名空间抓取指标遇连接拒绝的解决方法
问题排查与修复方案
配置语法错误修复
你的Prometheus配置存在两处明显语法问题:
- 静态目标地址多了一个多余的
>符号,正确格式应为<application-service-name>.API.svc.cluster.local:<application-service-port> - YAML缩进层级错误:
kubernetes_sd_configs、scrape_interval等字段需与job_name保持同一缩进级别
修复后的静态目标配置示例:
scrape_configs: - job_name: 'some-job' scrape_interval: 10s scrape_timeout: 5s static_configs: - targets: ['<application-service-name>.API.svc.cluster.local:<application-service-port>']
跨命名空间访问验证步骤
若修复语法后仍报Connection Refused,按以下步骤排查:
- 确认服务可解析:在Prometheus所在Pod内执行
nslookup <application-service-name>.API.svc.cluster.local,检查服务IP是否能正常解析(注意Kubernetes命名空间名称区分大小写,确保API拼写完全一致) - 验证端口与端点可达:在Prometheus Pod内用
curl http://<application-service-name>.API.svc.cluster.local:<application-service-port>/metrics测试,确认应用的metrics端点是否正常响应 - 检查网络策略:确认API命名空间未配置阻止prometheus命名空间访问的NetworkPolicy,必要时添加允许Prometheus所在命名空间访问该服务端口的策略
- 推荐方案:使用Kubernetes服务发现
无需手动维护静态目标,通过服务发现自动抓取API命名空间的服务,配置示例:scrape_configs: - job_name: 'api-apps' scrape_interval: 10s scrape_timeout: 5s kubernetes_sd_configs: - role: service namespaces: names: ['API'] relabel_configs: # 可选:仅抓取带指定标签的服务 - source_labels: [__meta_kubernetes_service_label_app] regex: <你的应用标签> action: keep # 指定metrics端点路径,默认/metrics - target_label: __metrics_path__ replacement: /metrics
内容的提问来源于stack exchange,提问作者CraZyCoDer
相关产品推荐
相关产品推荐

