0%

Helm list命令查看不到kube-system命名空间下的configmaps资源

问题描述

我在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”