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

无法从Prometheus-Adapter访问K3s默认Metrics Server问题求助

解决Prometheus-adapter无法获取custom metrics的证书验证问题

问题根源

Prometheus-adapter访问K3s自带的metrics-server服务(域名metrics-server.kube-system.svc)时,metrics-server默认证书仅包含localhost作为SAN(Subject Alternative Name),导致证书验证失败,无法获取指标数据,最终custom.metrics.k8s.io返回空资源。


方案1:临时跳过证书验证(不推荐生产环境)

修改Prometheus-adapter的配置,关闭对metrics-server的证书校验:

  1. 编辑Prometheus-adapter的ConfigMap(替换命名空间为你的实际命名空间,比如monitoring):
kubectl edit configmap adapter-config -n monitoring
  1. 在配置中添加apiServer的tlsConfig配置:
data:
  config.yaml: |
    rules:
    # 保留原有规则配置
    metricsRelistInterval: 1m
    apiServer:
      url: https://metrics-server.kube-system.svc:443
      tlsConfig:
        insecureSkipVerify: true
  1. 重启Prometheus-adapter使配置生效:
kubectl rollout restart deployment prometheus-adapter -n monitoring

方案2:重新生成metrics-server证书(推荐生产环境)

让K3s生成包含服务域名SAN的metrics-server证书,从根源解决验证问题:

  1. 删除现有metrics-server证书文件:
rm -rf /var/lib/rancher/k3s/server/tls/metrics-server/
  1. 编辑K3s节点的配置文件(路径/etc/rancher/k3s/config.yaml,若无则新建):
metrics-server-arg:
  - --cert-san=metrics-server.kube-system.svc
  - --cert-san=metrics-server.kube-system.svc.cluster.local
  1. 重启K3s服务:
systemctl restart k3s
  1. 等待metrics-server重新启动后,验证证书是否包含指定SAN:
kubectl exec -n kube-system $(kubectl get pods -n kube-system -l k8s-app=metrics-server -o name) -- openssl x509 -in /tmp/apiserver.crt -text | grep DNS

输出中应包含metrics-server.kube-system.svc和metrics-server.kube-system.svc.cluster.local。


验证结果

执行以下命令确认custom metrics已正常返回资源:

kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .

同时查看Prometheus-adapter日志,确认无x509相关错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:55:24