Kubernetes понимает вывод - kubectl auth can-i - PullRequest
1 голос
/ 13 июля 2020

Я пытаюсь понять, почему на одном кластере операция разрешена, а на другом я получаю следующее

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 -

clusterA загружен с версией Kops v1.14.8

clusterB загружен с AWS версией EKS 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? Спасибо за помощь!

1 Ответ

4 голосов
/ 13 июля 2020

Решение yes/no основано на том, есть ли clusterrole и clusterrolebinding или rolebinding, что позволяет default serviceaccount в пространстве имен kube-system выполнять команду list на ресурсе namespace .

Уловка в случае ресурса namespace заключается в том, что вместо role должен быть clusterrole, потому что namespace является ресурсом с кластерной областью.

Вы проверяете, что clusterrole, role, clusterrolebinding, rolebinding существует в кластере кубернетов, используя команду ниже

kubectl get clusterrole,clusterrolebinding
kubectl get role,rolebinding -n namespacename

Подробнее см. Kubernetes RBA C здесь

...