我已经在 Kubernetes8集群上安装了 Helm2.6.2。helm init运行正常。但是当我运行 helm list时,它给出了这个错误。
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 错误消息?
默认的服务帐户没有 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:
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中,
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 init在 tiller-world名称空间中安装 Tiller。
$ helm init --service-account tiller --tiller-namespace tiller-world
现在,在所有命令前面加上 --tiller-namespace tiller-world的前缀,或者在环境变量中设置 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
kubectl apply
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 名称空间。
<your-tiller-namespace>
kube-system
export TILLER_NAMESPACE=<your-tiller-namespace>
如果您正在使用来自 AWS 的 EKS 集群,并且正面临着被禁止的问题(例句: forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default",那么这对我很有效:
forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"
解决方案: