部署了 prometheus, 在 target 中顯示 cadvisor 與 nodes 的狀態都是 down


打開 prometheus 的監控界面,在菜單的 status -> Targets 中,看到 cadvisor 與 nodes 的狀態都是 DOWN. 而其他 api-servers 和 endpoints 是 UP 狀態。DOWN 狀態下的錯誤消息顯示 server returned HTTP status 403 Forbidden.

如截圖:

 

403 是無權訪問。為什么沒有權限呢?

一開始以為 cadvisor 沒有安裝成功,但我的 k8s 版本是 1.19, 這個版本已經自動集成了 cadvisor 接口,不需要安裝。

然后想到,會不會是 k8s 證書的問題?查看了/etc/kubernetes/pki/apiserver.crt 的 DNS 配置,里面有 kubernetes.default.svc 這個域名。

然后想到,會不會是 prometheus 沒有指定 serviceAccount ? 也是正確指定了。

。。。

經過了各種嘗試后,發現是 ServiceAccount 的授權問題,對應的 ClusterRoleBind 在修改之前是這樣的:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: prometheus
rules:
  - apiGroups: [""]
    resources: ["nodes", "nodes/metrics", "services", "endpoints", "pods"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["configmaps"]
    verbs: ["get"]
  - nonResourceURLs: ["/metrics"]
    verbs: ["get"]

 

問題就出現標紅的那一行。由於 cadvisor 對應的 api 是,/api/v1/nodes/${1}/proxy/metrics/cadvisor   (這里的 ${1} 會替換成具體的節點名稱)。所屬的 api 資源 nodes/proxy 沒有被授權。如果加上授權:

resources: ["nodes", "nodes/proxy", "nodes/metrics", "services", "endpoints", "pods"]

 再重啟 prometheus,cadvisor 和 nodes 的狀態都變成 UP 了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM