Я развертываю приложение в моем кластере Kubernetes, которое использует API Kubernetes для перечисления модулей в кластере (а не только в его пространстве имен). Приложение будет жить в своем собственном пространстве имен.
Правила RBA C следующие:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: kubecontrol-rbac-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: kubecontrol-rbac-role-binding
namespace: kubecontrol
subjects:
- kind: ServiceAccount
namespace: kubecontrol
name: default
roleRef:
kind: ClusterRole
name: kubecontrol-rbac-role
apiGroup: rbac.authorization.k8s.io
Как вы можете видеть, у меня есть ClusterRole, которая предоставляет "список", " получить разрешения "и" смотреть "для ресурса" pods "и RoleBinding, который применяет это ClusterRole к default
ServiceAccount для пространства имен.
Когда я проверяю авторизацию с помощью kubectl auth can-in
, эта конфигурация будет кажется правильным;
$ kubectl -n kubecontrol auth can-i --as=system:serviceaccount:kubecontrol:default list pods
yes
$ kubectl -n kubecontrol auth can-i --as=system:serviceaccount:kubecontrol:default list pods --v=8
...
I0326 23:17:05.125188 56505 request.go:947] Response Body: {"kind":"SelfSubjectAccessReview","apiVersion":"authorization.k8s.io/v1","metadata":{"creationTimestamp":null},"spec":{"resourceAttributes":{"namespace":"kubecontrol","verb":"list","resource":"pods"}},"status":{"allowed":true,"reason":"RBAC: allowed by RoleBinding \"kubecontrol-rbac-role-binding/kubecontrol\" of ClusterRole \"kubecontrol-rbac-role\" to ServiceAccount \"default/kubecontrol\""}}
RBA C: разрешено RoleBinding "kubecontrol-rba c -role-binding / kubecontrol "of ClusterRole" kubecontrol-rba c -role "to ServiceAccount" default / kubecontrol "
Однако, когда я действительно пытаюсь выполнить операцию, мне говорят, что я не разрешено делать это;
$ kubectl get pod --as=system:serviceaccount:kubecontrol:default --all-namespaces
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:kubecontrol:default" cannot list resource "pods" in API group "" at the cluster scope
Я вижу то же сообщение об ошибке в моем приложении.
Пользователь (system:serviceaccount:kubecontrol:default
) идентичен в обоих сценариях ios, так почему я не может перечислить стручки , хотя, согласно самому Kubernetes, я должен быть в состоянии ? Я что-то упускаю?