舵列表:无法在名称空间“ kube-system”中列出配置映射


108

我已经在kubernetes 8集群上安装了头盔2.6.2。helm init工作正常。但是当我运行helm list它给这个错误。

 helm list
Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system"

如何解决此RABC错误消息?

Answers:


228

一旦这些命令:

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

被运行,问题已经解决。


10
请注意,这可以分配--clusterrole=cluster-admin,这肯定会解决权限问题,但可能不是您想要的解决方案。最好使用您需要的权限来创建自己的服务帐户,(群集)角色和(群集)角色绑定。
柯蒂斯·马顿

2
The accepted answer gives full admin access to Helm which is not the best solution security wise(请参阅stackoverflow.com/a/53277281/2777965)。
030

1
当运行“ init”时,必须具有“ --upgrade”,其他问题不要提及。
天堂之翼

当我跑步时, kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'我得到Error from server (NotFound): deployments.extensions "tiller-deploy" not found
Magick

36

更安全的答案

接受的答案允许管理员完全控制Helm,这不是最佳的解决方案安全性。通过更多的工作,我们可以限制Helm对特定名称空间的访问。有关Helm文档的更多详细信息。

$ 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

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: tiller-manager
  namespace: tiller-world
rules:
- apiGroups: ["", "batch", "extensions", "apps"]
  resources: ["*"]
  verbs: ["*"]

然后运行:

$ kubectl create -f role-tiller.yaml
role "tiller-manager" created

rolebinding-tiller.yaml

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

然后运行:

$ kubectl create -f rolebinding-tiller.yaml
rolebinding "tiller-binding" created

之后,您可以运行helm inittiller-world名称空间中安装Tiller 。

$ helm init --service-account tiller --tiller-namespace tiller-world

现在,为所有命令加上环境变量--tiller-namespace tiller-worldTILLER_NAMESPACE=tiller-world在环境变量中设置前缀。

更多未来证明答案

停止使用分iller。头盔3完全不需要蒂勒。如果使用的是Helm 2,则可以使用helm templateHelm图表生成yaml,然后运行kubectl apply以将对象应用于Kubernetes集群。

helm template --name foo --namespace bar --output-dir ./output ./chart-template
kubectl apply --namespace bar --recursive --filename ./output -o yaml

1
请注意,执行此操作后,将需要在所有helm命令前面加上环境变量--tiller-namespace tiller-worldTILLER_NAMESPACE=tiller-world在环境变量中设置。
spuder

1
完全同意未来的证明答案。掌舵人似乎意识到RBAC的东西使事情变得太复杂而难以管理。他们只是阿尔法,但值得一看:头盔3,阿尔法1
理查德

1
同意,RBAC刚开始时有很多帮助。我仍在努力,但仍在进步。
coreyperkins

持久卷创作是否被舵手接受?在这种情况下,我们是否还应该创建另一个簇角色和绑定?
索耶

20

Helm使用“默认”服务帐户运行。您应该为其提供权限。

对于只读权限:

kubectl create rolebinding default-view --clusterrole=view --serviceaccount=kube-system:default --namespace=kube-system

对于管理员访问权限:例如:安装软件包。

kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default

运行后kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default,然后运行,helm list我仍然得到Error: configmaps is forbidden: User "system:serviceaccount:tiller:default" cannot list configmaps in the namespace "tiller": no RBAC policy matched
Magick


0
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

kubectl apply -f your-config-file-name.yaml

然后更新头盔安装以使用serviceAccount:

helm init --service-account tiller --upgrade


0

尝试以脱机模式安装耕作机时遇到此错误,我认为“耕作机”服务帐户没有足够的权限,但事实证明,网络策略阻止了耕作机与api服务器之间的通信。

解决方案是为分till创建一个网络策略,允许分all的所有出口通信


0

export TILLER_NAMESPACE=<your-tiller-namespace>如果<your-tiller-namespace>不是,为我解决了kube-system。这会将Helm客户端指向正确的Tiller名称空间。


0

如果您使用的是来自AWS的EKS集群并且遇到了禁止的问题( 例如forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"那么这对我有用:

解:

  1. 确保您已配置AWS
  2. 确保已配置的用户具有访问群集的权限。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.