将Prometheus连接到Kubernetes的API auth错误(Openshift Origin)

时间:2017-11-23 23:08:38

标签: kubernetes openshift openshift-origin prometheus

我有一个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没有使用令牌进行身份验证。

那么,我的设置有什么问题,我该怎么办呢?提前谢谢。

1 个答案:

答案 0 :(得分:0)

让我们从身份验证开始,因为您已经为Prometheus提供了默认服务帐户令牌,这意味着它已经过正常身份验证。 API Server知道它是谁。

现在,授权在这里给你提问。正如你在这里看到的那样

"system:anonymous" cannot list all pods in the cluster"

这意味着经过身份验证的服务帐户没有执行此操作的功能或权限,因此您无法执行此操作。

解决您的问题

  • 检查Prometheus是否有合适的clusterRole。如 Prometheus需要具有群集范围的权限才能执行其任务。 如果没有创建clusterRole。
  • 检查是否存在默认服务帐户的clusterRoleBinding。如果没有创建clusterRoleBinding。

我附上了一个链接,可以进一步阅读RBAC