无法从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的证书校验:
- 编辑Prometheus-adapter的ConfigMap(替换命名空间为你的实际命名空间,比如
monitoring):
kubectl edit configmap adapter-config -n monitoring
- 在配置中添加
apiServer的tlsConfig配置:
data: config.yaml: | rules: # 保留原有规则配置 metricsRelistInterval: 1m apiServer: url: https://metrics-server.kube-system.svc:443 tlsConfig: insecureSkipVerify: true
- 重启Prometheus-adapter使配置生效:
kubectl rollout restart deployment prometheus-adapter -n monitoring
方案2:重新生成metrics-server证书(推荐生产环境)
让K3s生成包含服务域名SAN的metrics-server证书,从根源解决验证问题:
- 删除现有metrics-server证书文件:
rm -rf /var/lib/rancher/k3s/server/tls/metrics-server/
- 编辑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
- 重启K3s服务:
systemctl restart k3s
- 等待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
相关产品推荐
相关产品推荐

