1

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

我按照这些说明准备了 k8s 集群以与 ManageIQ 交互。请注意,我只执行了上一节中列出的步骤(准备与 ManageIQ 一起使用的集群),因为前面的步骤用于设置 k8s 集群,而我已经有一个正在运行的集群。

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

[----] 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]

所以集群cluster-reader中没有定义 ClusterRole。我仔细检查kubectl get clusterrole cluster-reader并确认cluster-reader丢失了。

作为解决方案,我尝试cluster-reader手动创建。我在 k8s 文档中找不到它的任何参考,而在 OpenShift 文档中提到了它。因此,我查看了cluster-readerOpenShift 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 的资源(但我可能弄错了)。

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

[----] 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]

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

4

1 回答 1

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

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

在此处查看更多信息。

于 2018-06-22T13:46:07.760 回答