本文主要记录 metrics-server 无法抓取节点指标时的一类常见原因:访问 kubelet 10250 时证书校验失败(证书不含 IP SAN)。原稿混有 dashboard 标题,实质为 metrics-server 排障笔记。

问题现象

metrics-server 日志中出现类似:

Failed probe probe="metric-storage-ready" err="no metrics to serve"
Failed to scrape node err="Get \"https://<node-ip>:10250/metrics/resource\": x509: cannot validate certificate for <node-ip> because it doesn't contain any IP SANs"

结果:kubectl top nodes / top pods 无数据或报错。

环境背景

  • 集群节点通过 IP 被 metrics-server 访问 kubelet
  • kubelet serving 证书若仅含主机名 SAN、不含 IP,会触发上述 x509 错误
  • 主机名与 IP 均已脱敏

排查过程

  1. 查看 metrics-server Pod 日志,确认是否全是 SAN 错误。
  2. 对照节点地址:metrics-server 用的是 IP 还是 hostname。
  3. 检查 kubelet 证书生成方式(kubeadm 默认 / 自定义 PKI)。

原因分析

metrics-server 默认以 HTTPS 访问 kubelet 的 resource metrics。TLS 校验要求证书 SAN 覆盖实际访问的名称或 IP。仅 CN/DNS 名称、却用 IP 连接时,会出现 doesn’t contain any IP SANs

解决方向(择一,按集群规范)

  1. 让 metrics-server 用节点主机名访问(preferredAddressTypes 等配置,视版本 chart/参数)。
  2. 重新签发含 IP SAN 的 kubelet serving 证书(运维成本高,需滚动节点)。
  3. 临时排查用(不推荐生产长期):放宽 TLS 校验类参数(仅实验室),并记录安全风险。

具体参数名随 metrics-server 小版本变化,升级前查当前 chart values。

验证结果

  • metrics-server 日志不再刷屏 scrape 失败
  • kubectl top nodes 返回 CPU/内存数据

注意事项

  • 勿在未评估的情况下全局关闭 TLS 校验。
  • 与 Kubernetes Dashboard 部署是两条线;Dashboard 还需 RBAC 与访问入口,本文不展开。
  • 本文不替代官方安装手册。