helm list:无法列出命名空间 "kube-system" 中的配置映射
helm list : cannot list configmaps in the namespace "kube-system"
我已经在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 错误消息?
默认服务帐户没有 API 权限。 Helm 可能需要分配一个服务帐户,并且该服务帐户被授予 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
是运行,问题已经解决。
Helm 使用 "default" 服务帐户运行。您应该为其提供权限。
对于只读权限:
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 对特定命名空间的访问。 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 init
在 tiller-world
命名空间中安装 Tiller。
$ helm init --service-account tiller --tiller-namespace tiller-world
现在为所有命令添加前缀 --tiller-namespace tiller-world
或在您的环境变量中设置 TILLER_NAMESPACE=tiller-world
。
更多面向未来的答案
停止使用 Tiller。 Helm 3 完全消除了对 Tiller 的需求。如果您使用的是 Helm 2,则可以使用 helm template
从 Helm chart 生成 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
然后更新 helm 安装以使用 serviceAccount:
helm init --service-account tiller --upgrade
我尝试在离线模式下安装 tiller 时遇到此错误,我认为 'tiller' 服务帐户没有足够的权限,但事实证明网络策略阻止了 tiller 之间的通信和 api-服务器。
解决方案是为 tiller 创建一个网络策略,允许 tiller 的所有出口通信
export TILLER_NAMESPACE=<your-tiller-namespace>
帮我解决了,如果 <your-tiller-namespace>
不是 kube-system
。这会将 Helm 客户端指向正确的 Tiller 命名空间。
如果您正在使用来自 AWS 的 EKS 集群并且面临被禁止的问题(eg:forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"
那么这对我有用:
解决方案:
- 确保您已配置 AWS
- 确保配置的用户具有访问集群的权限。
我已经在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 错误消息?
默认服务帐户没有 API 权限。 Helm 可能需要分配一个服务帐户,并且该服务帐户被授予 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
是运行,问题已经解决。
Helm 使用 "default" 服务帐户运行。您应该为其提供权限。
对于只读权限:
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 对特定命名空间的访问。 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 init
在 tiller-world
命名空间中安装 Tiller。
$ helm init --service-account tiller --tiller-namespace tiller-world
现在为所有命令添加前缀 --tiller-namespace tiller-world
或在您的环境变量中设置 TILLER_NAMESPACE=tiller-world
。
更多面向未来的答案
停止使用 Tiller。 Helm 3 完全消除了对 Tiller 的需求。如果您使用的是 Helm 2,则可以使用 helm template
从 Helm chart 生成 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
然后更新 helm 安装以使用 serviceAccount:
helm init --service-account tiller --upgrade
我尝试在离线模式下安装 tiller 时遇到此错误,我认为 'tiller' 服务帐户没有足够的权限,但事实证明网络策略阻止了 tiller 之间的通信和 api-服务器。
解决方案是为 tiller 创建一个网络策略,允许 tiller 的所有出口通信
export TILLER_NAMESPACE=<your-tiller-namespace>
帮我解决了,如果 <your-tiller-namespace>
不是 kube-system
。这会将 Helm 客户端指向正确的 Tiller 命名空间。
如果您正在使用来自 AWS 的 EKS 集群并且面临被禁止的问题(eg:forbidden: User ... cannot list resource "jobs" in API group "batch" in the namespace "default"
那么这对我有用:
解决方案:
- 确保您已配置 AWS
- 确保配置的用户具有访问集群的权限。