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

Kubernetes集群Prometheus配置证书后部分目标仍报403 Forbidden

Kubernetes Prometheus 403 Forbidden 问题排查与解决

看起来你已经做了基础的证书配置,但还是遇到了403错误,不过好在curl能正常访问,这说明证书本身是有效的,问题大概率出在Prometheus的配置细节或者权限传递上。下面是几个你可以逐一排查的方向:

1. 检查Bearer Token与证书的冲突

你的Prometheus配置里同时指定了bearer_token_file和证书认证(cert_file/key_file),而Kubernetes API Server在同时收到两种认证方式时,可能会优先使用Bearer Token。如果这个Token对应的ServiceAccount没有权限访问/metrics端点,就会返回403。

建议先尝试注释掉bearer_token_file这一行,只保留证书相关配置,重启Prometheus后观察目标状态是否恢复正常。

2. 验证证书路径与挂载正确性

首先注意到你配置里的bearer_token_file路径写的是/etc/k8spem//token,虽然Linux会忽略重复的斜杠,但最好修正为/etc/k8spem/token避免潜在的解析问题。

另外,需要确认Prometheus Pod是否正确挂载了证书目录:

  • 进入Pod内部执行命令:
    kubectl exec -it <prometheus-pod-name> -- ls -l /etc/k8spem/
    
    确认ca.pem、admin.pem、admin.key和token文件都存在,且文件权限为600(避免其他用户可读导致的权限问题)。

3. 确认证书对应用户的权限

虽然你用admin证书通过curl能成功访问,但要确保Prometheus使用的这个证书对应的用户确实拥有访问API Server metrics的权限:

  1. 先查看证书的Subject信息,确认对应的用户名:
    openssl x509 -in /work/deploy/kubernetes/security/admin.pem -text | grep -A 2 Subject
    
  2. 用这个用户名验证权限:
    kubectl auth can-i get --raw /metrics --as=CN=admin,O=system:masters
    
    (把上面的CN=admin,O=system:masters替换成你实际查到的Subject内容)
    如果返回no,需要给该用户绑定具备访问/metrics权限的ClusterRole,比如绑定cluster-admin:
    kubectl create clusterrolebinding admin-metrics-access --clusterrole=cluster-admin --user=CN=admin,O=system:masters
    

4. 检查Relabel规则是否正确筛选目标

在Prometheus的UI中进入Targets页面,查看kubernetes-apiservers job下的目标标签是否匹配你的relabel规则:default;kubernetes;https。如果标签不匹配,可能会错误地选中其他没有权限的端点,导致403错误。

可以通过查看目标的__meta_kubernetes_namespace、__meta_kubernetes_service_name、__meta_kubernetes_endpoint_port_name这三个标签,确认它们是否符合规则中的正则表达式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:14:06