helm list:无法在命名空间"kube-system"中列出configmaps

sfg*_*ups 94 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"
Run Code Online (Sandbox Code Playgroud)

如何修复此RABC错误消息?

sfg*_*ups 206

我添加了这个,它现在正在工作.

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
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这将指定`--clusterrole = cluster-admin`,这肯定会修复权限问题,但可能不是您想要的修复.最好使用您需要的确切权限创建自己的服务帐户,(群集)角色和(群集)角色绑定. (10认同)
  • `接受的答案使管理员拥有对Helm的完全访问权限,这不是最佳的解决方案安全性。“(请参阅/sf/answers/3729409701/)。 (2认同)

Muh*_*eed 34

更安全的答案

接受的答案提供对Helm的完全管理员访问权限,这不是最明智的安全解决方案.通过更多工作,我们可以限制Helm对特定命名空间的访问.Helm文档中的更多细节.

$ kubectl create namespace tiller-world
namespace "tiller-world" created
$ kubectl create serviceaccount tiller --namespace tiller-world
serviceaccount "tiller" created
Run Code Online (Sandbox Code Playgroud)

定义一个允许Tiller管理所有资源的角色,tiller-worldrole-tiller.yaml:

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

然后运行:

$ kubectl create -f role-tiller.yaml
role "tiller-manager" created
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

然后运行:

$ kubectl create -f rolebinding-tiller.yaml
rolebinding "tiller-binding" created
Run Code Online (Sandbox Code Playgroud)

之后,您可以运行helm init以在tiller-world命名空间中安装Tiller .

$ helm init --service-account tiller --tiller-namespace tiller-world
Run Code Online (Sandbox Code Playgroud)

现在在环境变量中为所有命令添加前缀--tiller-namespace tiller-world或设置前缀TILLER_NAMESPACE=tiller-world.

更多未来证明答案

停止使用Tiller.Helm 3彻底消除了对Tiller的需求.如果您使用的是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
Run Code Online (Sandbox Code Playgroud)


sur*_*oni 19

Helm使用"默认"服务帐户运行.您应该为它提供权限.

对于只读权限:

kubectl create rolebinding default-view --clusterrole=view --serviceaccount=kube-system:default --namespace=kube-system
Run Code Online (Sandbox Code Playgroud)

对于管理员访问:例如:安装包.

kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
Run Code Online (Sandbox Code Playgroud)