helm list:无法在命名空间“kube-system”

时间:2017-10-10 17:25:20

标签: kubernetes kubernetes-helm

我在kubernetes 8集群上安装了helm 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错误消息?

8 个答案:

答案 0 :(得分:171)

一旦这些命令:

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

运行,问题已经解决。

答案 1 :(得分:19)

更安全的答案

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

$ 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-world前缀或在环境变量中设置TILLER_NAMESPACE=tiller-world

更多未来证明答案

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

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

答案 2 :(得分:17)

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

答案 3 :(得分:3)

默认的serviceaccount没有API权限。可能需要为Helm分配一个服务帐户,并为该服务帐户授予API权限。有关授予服务帐户权限的信息,请参阅RBAC文档:this document

答案 4 :(得分: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

答案 5 :(得分:0)

在尝试以脱机模式安装分er时出现此错误,我以为'分iller'服务帐户没有足够的权限,但事实证明,网络策略阻止了分and与api-之间的通信,服务器。

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

解决方案:

  1. 确保您已配置AWS
  2. 确保已配置的用户具有访问群集的权限。
相关问题