我试图了解为什么在一个群集上允许进行操作,但在另一个群集上却得到以下内容

Exception encountered setting up namespace watch from Kubernetes API v1 endpoint https://10.100.0.1:443/api: namespaces is forbidden: User \"system:serviceaccount:kube-system:default\" cannot list resource \"namespaces\" in API group \"\" at the cluster scope ({\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"namespaces is forbidden: User \\\"system:serviceaccount:kube-system:default\\\" cannot list resource \\\"namespaces\\\" in API group \\\"\\\" at the cluster scope\",\"reason\":\"Forbidden\",\"details\":{\"kind\":\"namespaces\"},\"code\":403}\n)"
我正在管理两个Kubernetes集群-
使用Kops版本clusterA引导的v1.14.8 在AWS EKS版本clusterB上启动的v1.14.9-eks-f459c0因此,我尝试使用kubectl auth命令尝试弄清楚,但我确实看到其中一个被允许,但是在第二个我却没有,您可以看到:
kubectl config use-context clusterA
Switched to context "clusterA".
kubectl auth can-i list pods --as=system:serviceaccount:kube-system:default -n kube-sytem
yes
kubectl config use-context clusterB
Switched to context "clusterB".
kubectl auth can-i list pods --as=system:serviceaccount:kube-system:default -n kube-sytem
no
有没有办法了解基于yes/no的这两个决定?
感谢您的帮助!

最佳答案

决定yes/no的依据是是否存在clusterroleclusterrolebindingrolebinding,它们允许default命名空间中的kube-system服务帐户对资源list执行动词namespace
namespace资源的情况下,技巧是需要有一个clusterrole而不是role,因为namespace是集群范围内的资源。
您可以使用以下命令检查kubernetes集群中存在哪些clusterroleroleclusterrolebindingrolebinding

kubectl get clusterrole,clusterrolebinding
kubectl get role,rolebinding -n namespacename
有关更多详细信息,请参考Kubernetes RBAC here

09-28 12:06