- Пространство имен применяется ко всем трем ролям, учетной записи службы и привязке роли.
- Не имеет значения, отличается ли пространство имен в роли и учетной записи службы. Вы все еще можете создать привязку роли, но учетная запись службы получит доступ к выполнению глаголов для ресурсов только в пространстве имен, как определено в роли, и привязка роли должна быть создана в том же пространстве имен, что и роль.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: mynamespace
name: my-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-serviceac
namespace: default
kubectl create rolebinding my-role-binding --role=my-role --serviceaccount=default:myserviceac -n mynamespace
А затем проверил разрешение учетной записи службы
kubectl auth can-i get pods -n mynamespace --as=system:serviceaccount:default:myserviceac
yes
kubectl auth can-i watch pods -n mynamespace --as=system:serviceaccount:default:myserviceac
yes
kubectl auth can-i list pods -n mynamespace --as=system:serviceaccount:default:myserviceac
yes
kubectl auth can-i get pods -n default --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i list pods -n default --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i watch pods -n default --as=system:serviceaccount:default:myserviceac
no
Как мы видим, учетная запись службы получила разрешение получать, просматривать, перечислять модули в пространстве имен, но не имеет того же разрешения в пространстве имен по умолчанию, хотя учетная запись службы находится в пространстве имен по умолчанию.
Теперь, если я удаляю привязку роли и создаю ее в пространстве имен по умолчанию вместо пространства имен .
kubectl create rolebinding my-role-binding --role=my-role --serviceaccount=default:myserviceac -n default
kubectl auth can-i get pods -n default --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i list pods -n default --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i watch pods -n default --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i get pods -n mynamespace --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i list pods -n mynamespace --as=system:serviceaccount:default:myserviceac
no
kubectl auth can-i watch pods -n mynamespace --as=system:serviceaccount:default:myserviceac
no
Как видно, разрешение больше не применяется.