我试图了解为什么在一个群集上允许进行操作,但在另一个群集上却得到以下内容
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
的依据是是否存在clusterrole
和clusterrolebinding
或rolebinding
,它们允许default
命名空间中的kube-system
服务帐户对资源list
执行动词namespace
。
在namespace
资源的情况下,技巧是需要有一个clusterrole
而不是role
,因为namespace
是集群范围内的资源。
您可以使用以下命令检查kubernetes集群中存在哪些clusterrole
,role
,clusterrolebinding
和rolebinding
kubectl get clusterrole,clusterrolebinding
kubectl get role,rolebinding -n namespacename
有关更多详细信息,请参考Kubernetes RBAC here。