我已经使用
kubeadm
部署了一个k8s集群,我想使用以下命令获取控制器管理器的指标:
curl -k https://localhost:10257/metrics
但出现以下错误:
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {
},
"status": "Failure",
"message": "forbidden: User \"system:anonymous\" cannot get path \"/metrics\"",
"reason": "Forbidden",
"details": {
},
"code": 403
}
所以我的问题是,如何获取k8s控制器管理器的指标?
由于权限问题,这是一个禁止的错误,需要通过有效用户进行身份验证。为此,您需要创建一个服务帐户,然后通过 RBAC 为该服务帐户授予对指标路径的访问权限,然后这将使该服务帐户获取指标。
根据此角色和集群绑定文档,您需要允许指标路径(替换为 /healthz),如下所示并尝试一下。
Allow GET and POST requests to the non-resource endpoint /healthz and all subpaths (must be in a ClusterRole bound with a ClusterRoleBinding to be effective): rules: - nonResourceURLs: ["/healthz", "/healthz/*"] # '*' in a nonResourceURL is a suffix glob match verbs: ["get", "post"]
如果您的集群使用 RBAC,则读取指标需要通过具有允许访问 /metrics 的 ClusterRole 的用户、组或 ServiceAccount 进行授权。要获取 kubernetes 控制器管理器、调度程序和其他控制平面组件,您必须获得授权用户。根据此 Kubernetes 系统组件指标。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus
rules:
- nonResourceURLs:
- "/metrics"
verbs:
- get