Вы можете использовать kubectl config view
, чтобы увидеть, какой контекст активен сейчас. Вы увидите что-то вроде этого:
contexts:
- context:
cluster: my-cluster
namespace: stage
user: alice
name: stage-ctx
current-context: stage-ctx
Это означает, что каждая команда переходит в stage
пространство имен (если пространство имен не указано в команде) из my-cluster
и аутентифицируется как пользователь alice
там.
Следующая вещь происходит на стороне сервера. Вероятно, есть роль, которая позволяет кому-то делать и выводить список модулей. давайте назовем это edit-stage-role
:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: stage
name: edit-stage-role
rules:
- apiGroups: ["", "extensions", "apps"]
resources: ["pods"]
verbs: ["get", "list"]
И есть также привязка, которая в основном назначает эту роль определенным субъектам, таким как группы или пользователи:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: edit-stage-rb
namespace: stage
roleRef:
kind: Role
name: edit-stage-role
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: User
name: alice
apiGroup: rbac.authorization.k8s.io
- kind: User
name: bob
apiGroup: rbac.authorization.k8s.io
В этом примере она связывает Роль bob
и alice
. После того как запрос аутентифицирован и k8s знает, что вы являетесь пользователем alice
, он пытается авторизовать запрос, оценивая ваши разрешения, которые хранятся в одной из ролей, связанных с alice
.
С высокого уровня это выглядит нравится. Возможно, может быть несколько ролей или ClusterRoles
, ClusterRB
и другие параметры, но общая концепция выглядит одинаково.
И вы, как администратор, можете выдавать себя за конкретного пользователя в определенном пространстве имен, чтобы увидеть, работает ли набор ролей и привязок должным образом. Используйте эту команду:
$ kubectl auth can-i get pods --namespace=stage --as alice
yes
Но, с точки зрения конечного пользователя, вероятно, есть только пользователь, который выдает себя за вас в кластере. Все остальные вещи видны только администратору (или если у вас есть разрешения для этого)
Это только краткое объяснение. Вы можете прочитать больше на https://kubernetes.io/docs/reference/access-authn-authz/rbac/