ManageIQ不显示有关Kubernetes容器提供程序的信息,并且缺少集群读取器ClusterRole

时间:2018-06-22 12:28:48

标签: kubernetes manageiq

我有一个Kubernetes v1.9.3(无OpenShift)集群,我想通过ManageIQ(gaprindashvili-3作为Docker容器运行)进行管理。

these instructions之后,我准备了k8s集群与ManageIQ进行交互。请注意,我只执行了最后一节中列出的步骤(准备与ManageIQ一起使用的群集),因为先前的步骤是用于设置k8s群集的,而我已经有一个正在运行的群集。

我已成功将k8s容器提供程序添加到ManageIQ,但仪表板未报告任何内容:0个节点,0个容器,0个服务等...,而我确实在群集上具有节点,服务和正在运行的容器。我查看了ManageIQ /var/log/evm.log的内容,发现此错误:

[----] E, [2018-06-21T10:06:40.397410 #13333:6bc9e80] ERROR – : [KubeException]: events is forbidden: User “system:serviceaccount:management-infra:management-admin” cannot list events at the cluster scope: clusterrole.rbac.authorization.k8s.io “cluster-reader” not found Method:[block in method_missing]

因此未在集群中定义ClusterRole cluster-reader。我对kubectl get clusterrole cluster-reader进行了仔细检查,并确认缺少cluster-reader

作为解决方案,我尝试手动创建cluster-reader。我在k8s文档中找不到任何参考,尽管OpenShift文档中已提及它。因此,我研究了cluster-reader在OpenShift v3.9中的定义。它的定义在不同的OpenShift版本中有所不同,我选择了3.9,因为它基于我正在使用的k8s v1.9。这就是我在OpenShift 3.9文档中找到的内容:

Name:       cluster-reader
Labels:     <none>
Annotations:    authorization.openshift.io/system-only=true
        rbac.authorization.kubernetes.io/autoupdate=true
PolicyRule:
  Resources                         Non-Resource URLs   Resource Names  Verbs
  ---------                         -----------------   --------------  -----
                                               [*]         []           [get]
  apiservices.apiregistration.k8s.io           []          []           [get list watch]
  apiservices.apiregistration.k8s.io/status    []          []           [get list watch]
  appliedclusterresourcequotas                 []          []           [get list watch]

我编写了以下yaml定义,以便在集群中创建等效的ClusterRole:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata: 
  name: cluster-reader
rules:
- apiGroups: ["apiregistration"]
  resources: ["apiservices.apiregistration.k8s.io", "apiservices.apiregistration.k8s.io/status"]
  verbs: ["get", "list", "watch"]
- nonResourceURLs: ["*"]
  verbs: ["get"]

我没有将appliedclusterresourcequotas包括在受监视的资源中,因为据我了解,这是仅OpenShift的资源(但我可能会误会)。

在创建cluster-reader之后,我在ManageIQ上删除了旧的k8s容器提供程序,并创建了一个新的容器提供程序,但是没有任何变化,仪表板仍然不显示任何内容(0个节点,0个容器等)。我查看了ManageIQ中/var/log/evm.log的内容,这次报告了这些错误:

[----] E, [2018-06-22T11:15:39.041903 #2942:7e5e1e0] ERROR -- : MIQ(ManageIQ::Providers::Kubernetes::ContainerManager::EventCatcher::Runner#start_event_monitor) EMS [kubernetes-01] as [] Event Monitor Thread aborted because [events is forbidden: User "system:serviceaccount:management-infra:management-admin" cannot list events at the cluster scope]
[----] E, [2018-06-22T11:15:39.042455 #2942:7e5e1e0] ERROR -- : [KubeException]: events is forbidden: User "system:serviceaccount:management-infra:management-admin" cannot list events at the cluster scope  Method:[block in method_missing]

那我做错了什么?我该如何解决这个问题? 如果可以用,here可以找到我用来设置k8s集群以与ManageIQ交互的整个.yaml文件(所有必需的名称空间,服务帐户和集群角色绑定都以好)。

1 个答案:

答案 0 :(得分:1)

要使ClusterRole生效,它必须绑定到组management-infra或用户management-admin上。

创建组绑定的示例:

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-cluster-state
subjects:
- kind: Group
  name: management-infra
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: cluster-reader
  apiGroup: rbac.authorization.k8s.io

应用此文件后,将立即进行更改。无需重新启动集群。

查看更多信息here