问题描述
我在kubernetes 8集群上安装了helm 2.6.2。helm init运行正常。但是当我运行helm list时它会给出这个错误。
1 2
| helm list Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system"
|
如何解决此RABC错误消息?
高票回答
运行如下这些命令可以解决:
1 2 3 4
| kubectl create serviceaccount --namespace kube-system tiller kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' helm init --service-account tiller --upgrade
|
其他答案
更安全的做法
高票答案提供对Helm的完全管理员访问权限,这不是最明智的安全解决方案。通过更多工作,我们可以限制Helm对特定命名空间的访问。更多细节请参考Helm文档。
1 2 3 4
| $ kubectl create namespace tiller-world namespace "tiller-world" created $ kubectl create serviceaccount tiller --namespace tiller-world serviceaccount "tiller" created
|
定义一个角色,允许Tiller管理tiller-world中的所有资源,如role-tiller.yaml:
1 2 3 4 5 6 7 8 9
| kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: tiller-manager namespace: tiller-world rules: - apiGroups: ["", "batch", "extensions", "apps"] resources: ["*"] verbs: ["*"]
|
然后运行:
1 2
| $ kubectl create -f role-tiller.yaml role "tiller-manager" created
|
在rolebinding-tiller.yaml中,
1 2 3 4 5 6 7 8 9 10 11 12 13
| kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: tiller-binding namespace: tiller-world subjects: - kind: ServiceAccount name: tiller namespace: tiller-world roleRef: kind: Role name: tiller-manager apiGroup: rbac.authorization.k8s.io
|
然后运行:
1 2
| $ kubectl create -f rolebinding-tiller.yaml rolebinding "tiller-binding" created
|
之后,可以运行helm init以在tiller-world命名空间中安装Tiller。
1
| $ helm init --service-account tiller --tiller-namespace tiller-world
|
现在使用–tiller-namespace tiller-world为所有命令添加前缀,或者在环境变量中设置TILLER_NAMESPACE = tiller-world。
更远见的做法
停止使用Tiller。Helm 3彻底消除了对Tiller的需求。如果您使用的是Helm 2,则可以使用helm模板从Helm chart生成yaml,然后运行kubectl apply将对象应用于Kubernetes集群。
1 2
| helm template --name foo --namespace bar --output-dir ./output ./chart-template kubectl apply --namespace bar --recursive --filename ./output -o yaml
|
原文链接
helm list : cannot list configmaps in the namespace “kube-system”