Kubernetes - динамические пространства имен / безопасность - PullRequest
0 голосов
/ 05 октября 2018

user1 и user2 были назначены роли «admin» в кластере K8s, где они могут работать только в назначенном им пространстве имен.В приведенном ниже случае ns1 и ns2 соответственно

user1 -> назначенное пространство имен ns1

user2 -> назначенное пространство имен ns2

user3 -> назначенное пространство имен ns3, а такженазначена роль администратора пространства имен.Роль namespace-admin (user3) должна иметь возможность создавать любой ресурс в пространстве имен ns3 и любые новые пространства имен, которые он создает в кластере.Эта роль должна иметь возможность динамически создавать новые пространства имен.Но user3 НЕ ДОЛЖЕН иметь доступ к пространствам имен ns1 или ns2, которые не созданы пользователем user3.

user3 будет динамически создавать новые пространства имен и развертывать рабочие нагрузки в этих пространствах имен.

Может ли это бытьна имя ?Это похоже на концепцию Openshift "Projects".

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

user3 должен иметь возможность создавать любой ресурс в пространстве имен ns3 и любых новых пространствах имен, которые он создает в кластере.

Чтобы получить динамические разрешения, вам потребуется компонент, предоставляющий пользователю 3разрешения в создаваемых ими пространствах имен (что и делает обработчик API проектов openshift)

0 голосов
/ 05 октября 2018

Да, вы можете ограничить user3 в создании / удалении ресурсов только в пространстве имен ns3 с помощью Role, связывающего эту роль с user3.

Тогда вы можете использовать ClusterRole только с доступом к ресурсу namespaces и разрешить ему create, delete, etc

Примерно так:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: my-namespace
  name: user-namespace-role
rules:
- apiGroups: [""]
  resources: ["services", "endpoints", "pods"] # etc...
  verbs: ["get", "list", "create"] # etc

Тогда:

kubectl create rolebinding user-namespace-binding --role=user-namespace-role --user=user3 --namespace=my-namespace

Затем:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cluster-role-all-namespaces
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] # etc

Затем:

kubectl create clusterrolebinding all-namespaces-binding --clusterrole=cluster-role-all-namespaces --user=user3

Для user1 и user2 вы можете создать Role и RoleBinding для их уникальных пространств имен.

...