问题描述
在一个独立的 Kubernetes 集群(非 minikube)上安装了 Prometheus,使用了一些自定义的 ServiceAccount、Role 和 ClusterRoleBinding。虽然能够获取一些指标(来自 Prometheus 和一些 Istio 的抓取配置),但无法获取 Kubernetes 节点的指标(如 CPU 等)。尝试了添加 job_name
为 'kubelet'
的配置,但遇到了证书验证和授权的问题。
解决方案
请注意以下操作可能因版本不同而有所差异,务必在进行操作前备份相关配置。
使用 Bearer Token 鉴权
在 kubelet
的配置中,除了设置证书验证外,还需要发送 Bearer Token 来进行鉴权。按照以下步骤配置 job_name: 'kubelet'
的抓取配置:
- 编辑 Prometheus 配置文件(通常是
prometheus.yml
)。 - 在
scrape_configs
部分中,为kubelet
抓取作业添加以下配置:
yaml
- job_name: 'kubelet'
kubernetes_sd_configs:
- role: node
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
上述配置中,bearer_token_file
指定了 ServiceAccount Token 文件的路径。
- 保存配置文件并重启 Prometheus 服务。
解决证书验证问题
在配置中,您可能遇到证书验证问题,导致无法正确连接到 Kubernetes 节点的指标。如果证书无法验证或者缺少 IP SANs,您可以考虑以下操作:
使用 IP SANs
添加正确的 IP SANs(Subject Alternative Names)到 Kubernetes API 证书,以使 Prometheus 可以正确验证证书。这可以通过修改kubeadm-config
配置来实现。将<my tailscale ip address>
替换为正确的 IP 地址。跳过证书验证
如果您确信 Kubernetes 节点的证书可以被信任,您可以在 Prometheus 配置中添加insecure_skip_verify: true
以跳过证书验证。但这样可能会降低安全性,因此在生产环境中谨慎使用。
验证授权问题
如果您仍然遇到授权问题,可能是与角色绑定、权限或网络策略有关。确保 prometheus
ServiceAccount、Role 和 ClusterRoleBinding 配置正确,且具有足够的权限来访问节点指标。
总结
通过在 Prometheus 配置中添加 job_name: 'kubelet'
的抓取配置,同时发送正确的 Bearer Token 进行鉴权,您应该能够解决无法获取 Kubernetes 节点指标的问题。同时,确保证书验证设置正确,以及 ServiceAccount 和角色绑定的权限配置正确,将有助于排除其他潜在的问题。
注意: 本文提供的解决方案仅为参考,请根据实际情况进行适当的调整和测试,以确保安全性和正确性。