helm报 system:serviceaccount:kube-system:default" cannot list resource "configmaps" in API group

雪花 发表于: 2019-10-25   最后更新时间: 2019-10-25 19:55:42   5,447 游览

我刚安装了helm,然后执行helm list的时候,报以下错误:

Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list resource "configmaps" in API group "" in the namespace "kube-system"

我该怎么解决?

发表于 2019-10-25

Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list

此错误表明您的tiller充当“ kube-system:default”服务帐户,该帐户没有足够的角色绑定权限。

怎么做:

  • 检查是否有tiller的账户

    kubectl get serviceaccount [-n kube-system]
    

    如果没有则创建:

    kubectl create serviceaccount -n kube-system tiller
    
  • 检查是否有role或clusterrole绑定。如果没那么高的安全要求,则可以使用特权很高的角色"cluster-admin":

    kubectl get clusterrole -n kube-system
    

    可以通过以下方式检查角色内容:

    kubectl get clusterrole cluster-admin -o yaml -n kube-system
    
  • 检查第一个子句中的account是否有clusterrole的绑定:

    kubectl get clusterrolebinding [-n kube-system]
    
  • 如果无法根据名称来判断,最简单地方式重新创建新的:

    kubectl create clusterrolebinding tiller-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
    
  • 最后,当有了帐户,角色和它们之间的绑定后,可以验证一下:

    kubectl --namespace kube-system get deploy tiller-deploy -o yaml
    

部分输出如下:

dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30

如果有,则添加要使用的tiller帐户:

kubectl --namespace kube-system patch deploy tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

现在,重复前面的检查命令查看变化:

dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: tiller   <-- new line
serviceAccountName: tiller   <-- new line
terminationGracePeriodSeconds: 30
你的答案

查看Helm相关的其他问题或提一个您自己的问题