Helmlist: 不能在命名空间“ kube-system”中列出配置图

我已经在 Kubernetes8集群上安装了 Helm2.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 错误消息?

54669 次浏览

默认的服务帐户没有 API 权限。舵手可能需要分配一个服务帐户,该服务帐户给予 API 权限。有关向服务帐户授予权限的信息,请参见 RBAC 文档: https://kubernetes.io/docs/admin/authorization/rbac/#service-account-permissions

一旦下达这些命令:

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

运行,问题已经得到解决。

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

对于只读权限:

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

更安全的答案

接受的答案给予完全的管理员访问 Helm,这不是最好的解决方案安全明智的。再做一些工作,我们就可以限制 Helm 对特定名称空间的访问。详情请参阅 舵手文件

$ kubectl create namespace tiller-world
namespace "tiller-world" created
$ kubectl create serviceaccount tiller --namespace tiller-world
serviceaccount "tiller" created

Define a Role that allows Tiller to manage all resources in tiller-world like in 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

Then run:

$ 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

更多未来证明答案

别再利用 Tiller 了。舵手3完全消除了对 Tiller 的需求。如果使用 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
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

I got a this error while trying to install tiller in offline mode, I thought the 'tiller' service account didn't have enough rights but at it turns out that a network policy was blocking the communication between tiller and the api-server.

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

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

如果您正在使用来自 AWS 的 EKS 集群,并且正面临着被禁止的问题(例句: forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default",那么这对我很有效:

解决方案:

  1. 确保您已经配置了 AWS
  2. Ensure that configured user has the permission to access the cluster.