背景

kubernetes 通过prometheus 采集容器指标信息,会不定时的出现连接认证异常异常,怀疑是api-server 安全认证问题。(k8s API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。)

报错信息

通过prometheus 访问targets目标节点采集状态,节点状态报错信息为

401.server returned HTTP status 401 Unauthorized

访问endpoint
https://kubernetes.default.svc/api/v1/nodes/10.10.183.12/proxy/metrics/cadvisor

提示kubernetes.default.svc dns地址无法解析

排查

检查prometheus cadvisor配置job

https配置

 - job_name: 'prometheus-kubernetes-cadvisor'
   scheme: https
   tls_config:
     ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
   bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
   kubernetes_sd_configs:
   - role: node
   relabel_configs:
   - action: labelmap
     regex: __meta_kubernetes_node_label_(.+)
   - target_label: __address__
     replacement: kubernetes.default.svc:6443
   - source_labels: [__meta_kubernetes_node_name]
     regex: (.+)
     target_label: __metrics_path__
     replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor

可以发现 scheme 为 https , target_label 为 kubernetes.default.svc 端口为6443,401报错就是安全校验的问题,现调整为http请求,使用http端口52080
master 节点确认api-server http http端口

ps -aux|grep kubelet|grep insecure-port

http配置

 - job_name: 'prometheus-kubernetes-cadvisor'
   scheme: http
   tls_config:
     ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
   bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
   kubernetes_sd_configs:
   - role: node
   relabel_configs:
   - action: labelmap
     regex: __meta_kubernetes_node_label_(.+)
   - target_label: __address__
     replacement: 172.16.25.151:52080
   - source_labels: [__meta_kubernetes_node_name]
     regex: (.+)
     target_label: __metrics_path__
     replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor

重建prometheus pod 容器后再次查看采集状态,全部为UP状态
在这里插入图片描述

参考
部署Prometheus的一些问题记录
k8s 组件介绍-API Server

Logo

开源、云原生的融合云平台

更多推荐