Ресурс Role в Kubernetes

Автор Itworkroom

Ресурс Role определяет, какие действия можно предпринимать и на каких ресурсах (или какие типы HTTP-запросов можно выполнять и на каких ресурсах RESTful). В следующем ниже листинге определяется роль, которая позволяет пользователям получать и выводить список служб в пространстве имен boo.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: boo
name: service-reader
rules:
- apiGroups: [""]
verbs: ["get", "list"]
resources: ["services"]

Ресурс Role будет создан в пространстве имен boo. В главе 8 вы узнали, что каждый тип ресурса принадлежит к группе API, которую вы указываете в манифесте ресурса в поле apiVersion (вместе с версией). В определении роли необходимо указывать группу apiGroup для ресурсов, перечисленных в каждом включенном в определение правиле. Если вы разрешаете доступ к ресурсам, принадлежащим разным группам API, вы используете несколько правил.

РИМЕЧАНИЕ. В данном примере вы предоставляете доступ ко всем ресурсам службы, но при этом вы также можете разрешать доступ только к конкретным экземплярам служб, указав их имена через дополнительное поле resourceNames.

role k8s

Создание роли

Создайте предыдущую роль в пространстве имен boo:

$ kubectl create -f service-reader.yaml -n boo

ПРИМЕЧАНИЕ. Параметр -n является аббревиатурой для параметра —namespace.

Если вы используете Google Kubernetes Engine (GKE), то предыдущая команда может не сработать, так как у вас нет прав администратора кластера. Чтобы предоставить эти права, выполните следующую ниже команду:

$ kubectl create clusterrolebinding cluster-admin-binding

Вместо создания роли service-reader из файла YAML вы также можете ее создать с помощью специальной команды kubectl create role. Давайте воспользуемся этим методом для создания роли в пространстве имен bar:

$ kubectl create role service-reader --verb=get --verb=list --resource=services -n bar

Эти две роли позволяют выводить список служб в пространствах имен boo и bar из двух модулей (работающих соответственно в пространствах имен boo и bar). Но создание двух ролей недостаточно (вы можете проверить, выполнив команду curl еще раз). Вам нужно привязать каждую из ролей к учетным записям ServiceAccount в соответствующих пространствах имен.

Привязка роли к учетной записи службы

Роль определяет, какие действия могут выполняться, но не определяет, кто может их выполнять. Для этого необходимо привязать роль к субъекту, которым может быть пользователь, учетная запись службы или группа (пользователей или учетных записей служб). Привязка ролей к субъектам достигается путем создания ресурса привязки роли, RoleBinding. Для того чтобы привязать роль к учетной записи службы по умолчанию, выполните следующую ниже команду:

$ kubectl create rolebinding test --role=service-reader --serviceaccount=boo:default -n boo

Данная командой Вы создаете привязку роли RoleBinding, которая привязывает роль service-reader к учетной записи по умолчанию в пространстве имен boo. Вы создаете привязку роли RoleBinding в пространстве имен boo.

ПРИМЕЧАНИЕ. Для того чтобы привязать роль к пользователю, а не к учетной записи службы, используйте параметр —user, указав имя пользователя. Для того чтобы привязать ее к группе, примените параметр —group.

role k8s

Следующий ниже листинг показывает YAML созданной вами привязки роли.

$ kubectl get rolebinding test -n boo -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: test
namespace: boo
…
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: service-reader
subjects:
- kind: ServiceAccount
name: default
namespace: boo

Привязка роли всегда ссылается на одну роль (как явствует из свойства roleRef), но может привязывать роли к нескольким субъектам subjects (например, одной или нескольким учетным записям и любым количествам пользователей или групп). Поскольку эта привязка роли привязывает роль к учетной записи в пространстве имен boo, под которым работает модуль, теперь вы можете вывести список служб из этого модуля.

Команда получения служб с сервера API

/ # curl localhost:8001/api/v1/namespaces/boo/services

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *