本文主要记录 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 均已脱敏
排查过程
- 查看 metrics-server Pod 日志,确认是否全是 SAN 错误。
- 对照节点地址:metrics-server 用的是 IP 还是 hostname。
- 检查 kubelet 证书生成方式(kubeadm 默认 / 自定义 PKI)。
原因分析
metrics-server 默认以 HTTPS 访问 kubelet 的 resource metrics。TLS 校验要求证书 SAN 覆盖实际访问的名称或 IP。仅 CN/DNS 名称、却用 IP 连接时,会出现 doesn’t contain any IP SANs。
解决方向(择一,按集群规范)
- 让 metrics-server 用节点主机名访问(preferredAddressTypes 等配置,视版本 chart/参数)。
- 重新签发含 IP SAN 的 kubelet serving 证书(运维成本高,需滚动节点)。
- 临时排查用(不推荐生产长期):放宽 TLS 校验类参数(仅实验室),并记录安全风险。
具体参数名随 metrics-server 小版本变化,升级前查当前 chart values。
验证结果
- metrics-server 日志不再刷屏 scrape 失败
kubectl top nodes返回 CPU/内存数据
注意事项
- 勿在未评估的情况下全局关闭 TLS 校验。
- 与 Kubernetes Dashboard 部署是两条线;Dashboard 还需 RBAC 与访问入口,本文不展开。
- 本文不替代官方安装手册。