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