解决 Prometheus-Adapter 无法访问默认 k3s 指标服务器的问题

37次阅读
没有评论

问题描述

在将 Prometheus-Adapter 与 k3s 默认的指标服务器一起安装时,遇到了无法从自定义指标查询中获取资源的问题。用户尝试使用以下命令查询时未能获得任何资源:

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

同时,在查看 Prometheus-Adapter 的日志时,用户注意到出现了以下错误信息:

unable to update list of all metrics: unable to fetch metrics for query ...: x509: certificate is valid for localhost, localhost, not metrics-server.kube-system

用户提供的 metrics 服务器参数如下:

- args:
  - --cert-dir=/tmp
  - --secure-port=4443
  - --kubelet-preferred-address-types=InternalIP
  - --kubelet-use-node-status-port
  - --metric-resolution=45s

用户寻求解决此问题的方法。

解决方案

请注意以下操作可能会涉及对系统进行更改,建议在操作前备份数据和配置。

最佳解决方案

根据用户提供的信息,问题似乎出现在证书验证方面。错误消息指出证书有效性问题,表明证书仅对 localhost 有效,而不是 metrics-server.kube-system。为了解决这个问题,我们需要确保证书适用于正确的主机名。
以下是解决该问题的步骤:
1. 确保你有正确的证书,包括服务器的正确主机名。
2. 将证书应用于 metrics 服务器。
3. 更新 Prometheus-Adapter 的配置,以使用正确的证书和主机名。

具体步骤如下:
1. 获取正确的证书:获取一个证书,其中包含 metrics-server.kube-system 作为主机名,并且证书的有效性可以覆盖服务器的 IP 地址。
2. 将证书应用于 metrics 服务器:
在 metrics 服务器的配置中,确保使用了包含正确主机名的证书。
例如,在 k3s 的配置文件中找到 metrics-server 相关的部分,将证书路径和主机名配置正确,如下所示:
yaml
- args:
- --cert-dir=/path/to/cert
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP
- --kubelet-use-node-status-port
- --metric-resolution=45s
- --tls-cert-file=/path/to/cert/tls.crt
- --tls-private-key-file=/path/to/cert/tls.key

3. 更新 Prometheus-Adapter 配置:
在 Prometheus-Adapter 的配置中,确保使用了正确的 metrics 服务器主机名和证书。
例如,在 Prometheus-Adapter 的配置文件中找到与 metrics 服务器相关的部分,将主机名和证书路径配置正确,如下所示:
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-adapter-config
namespace: kube-system
data:
config.yaml: |
rules:
- seriesQuery: '{__name__=~"^custom_metric$"}'
resources:
overrides:
kubernetes_namespace: {resource: "namespace"}
kubernetes_pod_name: {resource: "pod"}
metricsQuery: 'sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)'
metrics:
- name: custom_metric
# ...
# ...
tlsConfig:
caFile: /path/to/cert/ca.crt
certFile: /path/to/cert/tls.crt
keyFile: /path/to/cert/tls.key

确保将 caFilecertFilekeyFile 配置为正确的证书路径。

通过以上步骤,你应该能够解决 Prometheus-Adapter 无法访问默认 k3s 指标服务器的问题,并且可以成功查询自定义指标。

请根据你的具体情况进行配置,并在执行操作前充分了解所做的更改。

正文完