Kubernetes RBA C "Разрешено RoleBinding", но "не может перечислить ресурс" - PullRequest
0 голосов
/ 27 марта 2020

Я развертываю приложение в моем кластере 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, я должен быть в состоянии ? Я что-то упускаю?

1 Ответ

2 голосов
/ 27 марта 2020

С помощью --all-namespaces вы выводите список модулей во всех пространствах имен кластера. Но поскольку вы использовали только RoleBinding, у вас есть права от ClusterRole только для данного пространства имен (в вашем случае - пространства имен kubecontrol). Вместо этого вы должны использовать ClusterRoleBinding, чтобы получить ClusterRole для всего кластера.

...