首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ManageIQ不显示Kubernetes容器提供程序的信息,并且缺少集群读取器ClusterRole。

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

Stack Overflow用户
提问于 2018-06-22 12:28:48
回答 1查看 367关注 0票数 1

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

我准备好了k8s集群,以便在这些指示之后与ManageIQ交互。注意,我只执行了最后一节中列出的步骤(准备集群以便与ManageIQ一起使用),就像前面的步骤用于设置k8s集群一样,而且我已经有了一个正在运行的集群。

我成功地将k8s容器提供程序添加到ManageIQ中,但是仪表板什么也没有报告:0节点、0 pods、0服务等等,而集群上确实有节点、服务和运行荚。我查看了/var/log/evm.log of ManageIQ的内容,发现了以下错误:

代码语言:javascript
复制
[----] 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.9doc中发现的内容:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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上删除了旧的ManageIQ容器提供程序,并在创建了cluster-reader之后创建了一个新的cluster-reader,但是没有什么改变,仪表板仍然没有显示任何东西(0节点、0荚等等)。我查看了/var/log/evm.log在ManageIQ中的内容,这次报告了这些错误:

代码语言:javascript
复制
[----] 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文件(所有所需的名称空间、服务帐户、集群角色绑定也都存在)。

EN

回答 1

Stack Overflow用户

发布于 2018-06-22 13:46:07

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

创建组绑定的示例:

代码语言:javascript
复制
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

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

请参阅更多信息这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50987965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档