我有一个Kubernetes集群(Openshift Origin v3.6)和Prometheus(v1.8.1)在两个独立的服务器上运行。我正试图用普罗米修斯监视Kubernetes。
我获得了default
服务帐户令牌,并将其置于/etc/prometheus/token
。
oc sa get-token default
然后将其添加到Prometheus配置文件中:
...
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- role: endpoints
api_server: 'https://my.kubernetes.master:8443'
scheme: https
bearer_token_file: /etc/prometheus/token
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https
...
重新启动prometheus后,我看到以下错误日志一遍又一遍地重复:
Nov 23 22:43:05 prometheus prometheus[17830]: time="2017-11-23T22:43:05Z" level=error msg="github.com/prometheus/prometheus/discovery/kubernetes/kubernetes.go:183: Failed to list *v1.Pod: User "system:anonymous" cannot list all pods in the cluster" component="kube_client_runtime" source="kubernetes.go:76"
我发现了here:
如果未显示访问令牌或证书,则身份验证层会将 system:anonymous 虚拟用户和 system:unauthenticated 虚拟组分配给请求。这允许授权层确定允许匿名用户进行哪些请求(如果有的话)。
我认为我的配置在某处错误,Prometheus没有使用令牌进行身份验证。
那么,我的设置有什么问题,我该怎么办呢?提前谢谢。
答案 0 :(得分:0)
让我们从身份验证开始,因为您已经为Prometheus提供了默认服务帐户令牌,这意味着它已经过正常身份验证。 API Server知道它是谁。
现在,授权在这里给你提问。正如你在这里看到的那样
"system:anonymous" cannot list all pods in the cluster"
这意味着经过身份验证的服务帐户没有执行此操作的功能或权限,因此您无法执行此操作。
解决您的问题
我附上了一个链接,可以进一步阅读RBAC