0 added
0 removed
Original
2026-01-01
Modified
2026-02-19
1
RBAC (Role-based access control) - это система распределения прав доступа к различным объектам в кластере Kubernetes.<p><strong>Объекты</strong> в кластере Kubernetes - это YAML-манифесты, а <strong>права доступа</strong> определяют, какому <strong>пользователю</strong> можно только просматривать манифесты, а кто может их создавать, изменять или даже удалять.</p>
1
RBAC (Role-based access control) - это система распределения прав доступа к различным объектам в кластере Kubernetes.<p><strong>Объекты</strong> в кластере Kubernetes - это YAML-манифесты, а <strong>права доступа</strong> определяют, какому <strong>пользователю</strong> можно только просматривать манифесты, а кто может их создавать, изменять или даже удалять.</p>
2
<p>Рассказываем, как устроен RBAC.</p>
2
<p>Рассказываем, как устроен RBAC.</p>
3
<p><strong><em>Материал подготовлен на основе лекции архитектора Southbridge Сергея Бондарева "Продвинутые абстракции Kubernetes" из курса </em></strong><a><strong><em>"Kubernetes База"</em></strong></a><strong><em>.</em></strong></p>
3
<p><strong><em>Материал подготовлен на основе лекции архитектора Southbridge Сергея Бондарева "Продвинутые абстракции Kubernetes" из курса </em></strong><a><strong><em>"Kubernetes База"</em></strong></a><strong><em>.</em></strong></p>
4
<p><strong>Пользователи</strong> кластера Kubernetes - это все, кто шлёт запросы в API-сервер, не только администраторы и разработчики, но и различные скрипты CI/CD, компоненты <em>control plane</em>, <em>kubelet</em> и <em>kube-proxy</em> на узлах, а также приложения, запущенные в кластере. В рамках модели контроля доступа на основании ролей есть 5 сущностей: <em>Role, RoleBinding, ClusterRole, ClusterRoleBinding, ServceAccount</em>. О них рассказываем в статье.</p>
4
<p><strong>Пользователи</strong> кластера Kubernetes - это все, кто шлёт запросы в API-сервер, не только администраторы и разработчики, но и различные скрипты CI/CD, компоненты <em>control plane</em>, <em>kubelet</em> и <em>kube-proxy</em> на узлах, а также приложения, запущенные в кластере. В рамках модели контроля доступа на основании ролей есть 5 сущностей: <em>Role, RoleBinding, ClusterRole, ClusterRoleBinding, ServceAccount</em>. О них рассказываем в статье.</p>
5
<h2>ServiceAccount</h2>
5
<h2>ServiceAccount</h2>
6
Начнём с конца. В Kubernetes есть самый простой тип пользователей, который называется <em>ServiceAccount</em>. Что же такое сервис аккаунт и чем он отличается от обычных пользователей?<p>Дело в том, что Kubernetes ничего не знает о пользователях в том виде, в котором мы привыкли их видеть в других системах ограничения доступа, где у пользователей есть логин, пароль, группы и т. д. То есть внутри своих объектов Kubernetes никаких списков логинов, групп и паролей не хранит, но при этом у него есть механизмы вызова внешних сервисов проверки паролей, таких как oidc, есть вариант проверки пользовательского сертификата или даже обычный <a>HTTP Basic Auth</a> с классическим апачевским файликом <em>htpasswd</em>.</p>
6
Начнём с конца. В Kubernetes есть самый простой тип пользователей, который называется <em>ServiceAccount</em>. Что же такое сервис аккаунт и чем он отличается от обычных пользователей?<p>Дело в том, что Kubernetes ничего не знает о пользователях в том виде, в котором мы привыкли их видеть в других системах ограничения доступа, где у пользователей есть логин, пароль, группы и т. д. То есть внутри своих объектов Kubernetes никаких списков логинов, групп и паролей не хранит, но при этом у него есть механизмы вызова внешних сервисов проверки паролей, таких как oidc, есть вариант проверки пользовательского сертификата или даже обычный <a>HTTP Basic Auth</a> с классическим апачевским файликом <em>htpasswd</em>.</p>
7
<p><em>ServiceAccount</em> был создан в первую очередь для ограничения прав ПО, которое работает в кластере. Всё общение между компонентами кластера идёт через запросы к API-серверу, и каждый такой запрос как раз авторизуется специальным JWT-токеном. Этот токен автоматически генерируется при создании объекта типа <em>ServiceAccount</em><strong><em> </em></strong>и кладётся в secret. </p>
7
<p><em>ServiceAccount</em> был создан в первую очередь для ограничения прав ПО, которое работает в кластере. Всё общение между компонентами кластера идёт через запросы к API-серверу, и каждый такой запрос как раз авторизуется специальным JWT-токеном. Этот токен автоматически генерируется при создании объекта типа <em>ServiceAccount</em><strong><em> </em></strong>и кладётся в secret. </p>
8
<em>В отличие от обычного пользователя, которому мы можем задать произвольный пароль, JWT-токен содержит внутри себя служебную информацию с названием ServiceAccount, Namespace и подписан корневым сертификатом кластера.</em><p><em>Посмотреть содержимое JWT-токена можно, введя его в форму Debugger на сайте </em><a><em>https://jwt.io</em></a></p>
8
<em>В отличие от обычного пользователя, которому мы можем задать произвольный пароль, JWT-токен содержит внутри себя служебную информацию с названием ServiceAccount, Namespace и подписан корневым сертификатом кластера.</em><p><em>Посмотреть содержимое JWT-токена можно, введя его в форму Debugger на сайте </em><a><em>https://jwt.io</em></a></p>
9
Далее этот secret монтируется внутрь контейнера, где работает наше приложение, и если приложение знает и умеет в Kubernetes, оно берёт токен из файла <em>/var/run/secrets/kubernetes.io/serviceaccount/token</em>, смонтированного из secret, и с ним делает запросы в API. <p>Ничего не мешает взять из секрета этот сгенерированный токен и положить его в скрипт CI или отдать разработчику и объяснить, что с этим токеном он может делать запросы в API кластера. Когда разработчиков и CI в кластере немного, такой подход вполне приемлем - он простой и достаточно безопасный.</p>
9
Далее этот secret монтируется внутрь контейнера, где работает наше приложение, и если приложение знает и умеет в Kubernetes, оно берёт токен из файла <em>/var/run/secrets/kubernetes.io/serviceaccount/token</em>, смонтированного из secret, и с ним делает запросы в API. <p>Ничего не мешает взять из секрета этот сгенерированный токен и положить его в скрипт CI или отдать разработчику и объяснить, что с этим токеном он может делать запросы в API кластера. Когда разработчиков и CI в кластере немного, такой подход вполне приемлем - он простой и достаточно безопасный.</p>
10
<p>Перейдём в консоль и посмотрим на манифест <em>ServiceAccount'а:</em></p>
10
<p>Перейдём в консоль и посмотрим на манифест <em>ServiceAccount'а:</em></p>
11
<p><em>kubectl get serviceaccount</em></p>
11
<p><em>kubectl get serviceaccount</em></p>
12
<p><em>NAME SECRETS AGE</em><em>default 1 2y298d</em><em>Видим ServiceAccount default</em></p>
12
<p><em>NAME SECRETS AGE</em><em>default 1 2y298d</em><em>Видим ServiceAccount default</em></p>
13
<p>Свой сервис аккаунт <em>default</em> есть в каждом неймспейсе, он создаётся автоматически. По умолчанию прав у этого аккаунта на доступ к API нет никаких.Смотрим внутрь:</p>
13
<p>Свой сервис аккаунт <em>default</em> есть в каждом неймспейсе, он создаётся автоматически. По умолчанию прав у этого аккаунта на доступ к API нет никаких.Смотрим внутрь:</p>
14
<p><em>k get sa default -o yaml</em></p>
14
<p><em>k get sa default -o yaml</em></p>
15
<p><em>apiVersion: v1</em><em>kind: ServiceAccount</em><em>metadata:creationTimestamp: "2019-05-18T20:08:00Z"name: defaultnamespace: defaultresourceVersion: "2120"uid: a2cf45e6-79a8-11e9-b6a7-fa163e91ccaf</em><em>secrets:</em><em>- name: default-token-2r2tz</em></p>
15
<p><em>apiVersion: v1</em><em>kind: ServiceAccount</em><em>metadata:creationTimestamp: "2019-05-18T20:08:00Z"name: defaultnamespace: defaultresourceVersion: "2120"uid: a2cf45e6-79a8-11e9-b6a7-fa163e91ccaf</em><em>secrets:</em><em>- name: default-token-2r2tz</em></p>
16
<p>Видим служебные поля и имя. Имя - это и есть то, что мы указываем при создании <em>ServiceAccount</em>. В поле secret лежит название секрета с токеном. Это поле добавляется контроллером автоматически.</p>
16
<p>Видим служебные поля и имя. Имя - это и есть то, что мы указываем при создании <em>ServiceAccount</em>. В поле secret лежит название секрета с токеном. Это поле добавляется контроллером автоматически.</p>
17
<p>Если посмотреть в <em>secret</em>, увидим там корневой сертификат кластера <em>ca.crt</em>. Он нужен, чтобы клиент был уверен, что он связывается именно с тем кластером, с которым надо. Есть поле <em>namespace</em> - оно показывает, в каком неймспейсе создан сервис аккаунт<em>. </em>И есть токен, с которым собственно и делаются запросы к API. Токен передаётся в заголовках HTTP-запроса.</p>
17
<p>Если посмотреть в <em>secret</em>, увидим там корневой сертификат кластера <em>ca.crt</em>. Он нужен, чтобы клиент был уверен, что он связывается именно с тем кластером, с которым надо. Есть поле <em>namespace</em> - оно показывает, в каком неймспейсе создан сервис аккаунт<em>. </em>И есть токен, с которым собственно и делаются запросы к API. Токен передаётся в заголовках HTTP-запроса.</p>
18
<p>Вы можете создать свой сервис аккаунт и указать его имя в манифесте пода, тогда при запуске контейнеров пода в них будет смонтирован секрет с токеном от этого сервис аккаунта. Если <em>ServiceAccount</em> не указывать, то будет смонтирован секрет от сервис аккаунта <em>default</em>. </p>
18
<p>Вы можете создать свой сервис аккаунт и указать его имя в манифесте пода, тогда при запуске контейнеров пода в них будет смонтирован секрет с токеном от этого сервис аккаунта. Если <em>ServiceAccount</em> не указывать, то будет смонтирован секрет от сервис аккаунта <em>default</em>. </p>
19
<p>Иногда говорят, что под в кластере Kubernetes работает с правами сервис аккаунта. Это приводит к путанице и проблемам в понимании принципов работы. Под нигде не работает, работает приложение. Приложение запущено в контейнерах пода на воркер-узлах и работает там как обычный Linux-процесс в самоизоляции. Всё!</p>
19
<p>Иногда говорят, что под в кластере Kubernetes работает с правами сервис аккаунта. Это приводит к путанице и проблемам в понимании принципов работы. Под нигде не работает, работает приложение. Приложение запущено в контейнерах пода на воркер-узлах и работает там как обычный Linux-процесс в самоизоляции. Всё!</p>
20
<p>Единственное, что происходит в кластере Kubernetes - <em>kubelet</em> монтирует токен внутрь контейнеров. И дальше уже приложение решает: если ему нужно обращаться к API кластера, будет ли оно брать токен из этого смонтированного секрета или возьмёт другой токен, например, запросит у пользователя.</p>
20
<p>Единственное, что происходит в кластере Kubernetes - <em>kubelet</em> монтирует токен внутрь контейнеров. И дальше уже приложение решает: если ему нужно обращаться к API кластера, будет ли оно брать токен из этого смонтированного секрета или возьмёт другой токен, например, запросит у пользователя.</p>
21
<h2>Role</h2>
21
<h2>Role</h2>
22
С сервис аккаунтами разобрались. Теперь рассмотрим, каким образом сервис аккаунтам выдаются права. Для этого используются ещё две сущности: <em>Role</em> и <em>RoleBinding</em>.<em>Role</em> - это YAML-манифест, который описывает некий набор прав на объекты кластера Kubernetes. <em>Role </em>ничего и никому не разрешает. Это просто список.<p>Напомню, что объекты кластера - это YAML-манифесты, которые хранятся в etcd. Все права проверяются API-сервером и относятся к запросам, которые принимает API-сервер. </p>
22
С сервис аккаунтами разобрались. Теперь рассмотрим, каким образом сервис аккаунтам выдаются права. Для этого используются ещё две сущности: <em>Role</em> и <em>RoleBinding</em>.<em>Role</em> - это YAML-манифест, который описывает некий набор прав на объекты кластера Kubernetes. <em>Role </em>ничего и никому не разрешает. Это просто список.<p>Напомню, что объекты кластера - это YAML-манифесты, которые хранятся в etcd. Все права проверяются API-сервером и относятся к запросам, которые принимает API-сервер. </p>
23
<p>То есть если вы запретили девелоперу выполнять <em>kubectl exec</em>, но у него есть доступ на воркер-ноду, то зайти на воркер-ноду и сделать <em>docker exec </em>в контейнер RBAC запретить никак не сможет.</p>
23
<p>То есть если вы запретили девелоперу выполнять <em>kubectl exec</em>, но у него есть доступ на воркер-ноду, то зайти на воркер-ноду и сделать <em>docker exec </em>в контейнер RBAC запретить никак не сможет.</p>
24
<p>Идём в кластер и в <em>ns ingress-nginx</em> смотрим на роль: <em>ingess-nginx</em></p>
24
<p>Идём в кластер и в <em>ns ingress-nginx</em> смотрим на роль: <em>ingess-nginx</em></p>
25
<p><em>kubectl get role -n ingress-nginx ingress-nginx -o yaml</em></p>
25
<p><em>kubectl get role -n ingress-nginx ingress-nginx -o yaml</em></p>
26
<p>Нас интересует раздел <em>rules</em> - это список правил, описывающих права доступа.В каждом правиле у нас есть три параметра, например:</p>
26
<p>Нас интересует раздел <em>rules</em> - это список правил, описывающих права доступа.В каждом правиле у нас есть три параметра, например:</p>
27
<p><em>apiGroups:</em><em>- extensions</em><em>- networking.k8s.ioresources:</em><em>- ingressesverbs:</em><em>- get</em><em>- list</em><em>- watch</em></p>
27
<p><em>apiGroups:</em><em>- extensions</em><em>- networking.k8s.ioresources:</em><em>- ingressesverbs:</em><em>- get</em><em>- list</em><em>- watch</em></p>
28
<p><em>apiGroups</em> - описывает API-группу манифеста. Это то, что написано в поле <em>apiVersion:</em> до слеша. Если в <em>apiVersion</em> указана только версия, без группы, например, как в манифесте Pod, то считается, что у этого манифеста так называемая корневая группа (core-group); в роли корневая группа указывается как пустая строка “”.</p>
28
<p><em>apiGroups</em> - описывает API-группу манифеста. Это то, что написано в поле <em>apiVersion:</em> до слеша. Если в <em>apiVersion</em> указана только версия, без группы, например, как в манифесте Pod, то считается, что у этого манифеста так называемая корневая группа (core-group); в роли корневая группа указывается как пустая строка “”.</p>
29
<p><em>resourсes</em> - список ресурсов, к которым мы описываем доступ, во множественном числе. Посмотреть список ресурсов в вашем кластере можно командой kubectl api-resources. Также есть подресурсы, описывающие специфические действия, например, подресурс <em>pods/log</em> разрешает просматривать логи контейнеров в поде. </p>
29
<p><em>resourсes</em> - список ресурсов, к которым мы описываем доступ, во множественном числе. Посмотреть список ресурсов в вашем кластере можно командой kubectl api-resources. Также есть подресурсы, описывающие специфические действия, например, подресурс <em>pods/log</em> разрешает просматривать логи контейнеров в поде. </p>
30
<p><em>verbs</em> - список действий, которые можно сделать с ресурсами, описанными выше: получить, посмотреть список, следить за изменением, отредактировать, удалить и т.п. О том, что именно хотим сделать с объектом мы, согласно принципам REST, указываем типом HTTP-запроса ( GET, PUT, POST, DELETE) или кодируем в URL, если это какое-нибудь хитрое действие вроде <em>watch</em> или <em>impersonate</em>.</p>
30
<p><em>verbs</em> - список действий, которые можно сделать с ресурсами, описанными выше: получить, посмотреть список, следить за изменением, отредактировать, удалить и т.п. О том, что именно хотим сделать с объектом мы, согласно принципам REST, указываем типом HTTP-запроса ( GET, PUT, POST, DELETE) или кодируем в URL, если это какое-нибудь хитрое действие вроде <em>watch</em> или <em>impersonate</em>.</p>
31
<p><em># GET /apis/networking.k8s.io/v1beta1/namespaces/{namespace}/ingresses/{name}</em><em>- apiGroups: ["extensions", "networking.k8s.io"]resources: ["ingresses"]verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]</em><em></em><em># GET /api/v1/namespaces/{namespace}/pods/{name}/log</em><em>- apiGroups: [""] # "" indicates the core API groupresources: ["pods", "pods/log"]verbs: ["get", "list"]</em></p>
31
<p><em># GET /apis/networking.k8s.io/v1beta1/namespaces/{namespace}/ingresses/{name}</em><em>- apiGroups: ["extensions", "networking.k8s.io"]resources: ["ingresses"]verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]</em><em></em><em># GET /api/v1/namespaces/{namespace}/pods/{name}/log</em><em>- apiGroups: [""] # "" indicates the core API groupresources: ["pods", "pods/log"]verbs: ["get", "list"]</em></p>
32
<em>Посмотреть на примеры запросов к API-серверу проще всего, запуская команду </em>kubectl get/create/delete<em> с ключом </em>‘-v 6’<em>.</em>А ещё есть <em>ResourceNames</em> - c помощью этого поля можно указать название объекта и, например, дать права на изменение не всех configmap, а только одного конкретного configmap с именем <em>ingress-controller-leader</em>.<p>Повторюсь, это просто список правил, объединённых в одну абстракцию. Никаких прав он никому не выдаёт. Для этих целей есть сущность <em>RoleBinding</em> - своим названием она нам говорит, что занимается назначением роли.</p>
32
<em>Посмотреть на примеры запросов к API-серверу проще всего, запуская команду </em>kubectl get/create/delete<em> с ключом </em>‘-v 6’<em>.</em>А ещё есть <em>ResourceNames</em> - c помощью этого поля можно указать название объекта и, например, дать права на изменение не всех configmap, а только одного конкретного configmap с именем <em>ingress-controller-leader</em>.<p>Повторюсь, это просто список правил, объединённых в одну абстракцию. Никаких прав он никому не выдаёт. Для этих целей есть сущность <em>RoleBinding</em> - своим названием она нам говорит, что занимается назначением роли.</p>
33
<h2>RoleBinding</h2>
33
<h2>RoleBinding</h2>
34
Сразу смотрим в манифест <em>Rolebinding</em>:kubectl get rolebinding ingress-nginx -n ingress-nginx -o yamlВ нём есть два типа полей: roleRef и subjects:<p><em>roleRef:</em><em>apiGroup: rbac.authorization.k8s.iokind: Rolename: ingress-nginx</em><em>subjects:</em><em>- kind: ServiceAccountname: ingress-nginxnamespace: ingress-nginx</em><em>- kind: Username: jane # "name" is case sensitiveapiGroup: rbac.authorization.k8s.io</em><em>- kind: Groupname: developer # ex: organization in user certificateapiGroup: rbac.authorization.k8s.io</em></p>
34
Сразу смотрим в манифест <em>Rolebinding</em>:kubectl get rolebinding ingress-nginx -n ingress-nginx -o yamlВ нём есть два типа полей: roleRef и subjects:<p><em>roleRef:</em><em>apiGroup: rbac.authorization.k8s.iokind: Rolename: ingress-nginx</em><em>subjects:</em><em>- kind: ServiceAccountname: ingress-nginxnamespace: ingress-nginx</em><em>- kind: Username: jane # "name" is case sensitiveapiGroup: rbac.authorization.k8s.io</em><em>- kind: Groupname: developer # ex: organization in user certificateapiGroup: rbac.authorization.k8s.io</em></p>
35
<p>В roleRef указываем права из какой роли будут разрешены.subjects - кому будут разрешены эти права (или назначена эта роль).Если kind: ServiceAccount, то права выдаются сервис аккаунту ingress-nginx в неймспейсе ingress-nginx.</p>
35
<p>В roleRef указываем права из какой роли будут разрешены.subjects - кому будут разрешены эти права (или назначена эта роль).Если kind: ServiceAccount, то права выдаются сервис аккаунту ingress-nginx в неймспейсе ingress-nginx.</p>
36
<p>То есть API-сервер кластера при получении HTTP-запроса на действие с объектом кластера увидит в заголовке JWT-токен. Проверит, что токен подписан корневым сертификатом кластера. Возьмет из токена название сервис аккаунта и неймспейс и проверит соответствующие RoleBinding в кластере, чтобы узнать, разрешено ли производить запрошенное действие над объектом из запроса.</p>
36
<p>То есть API-сервер кластера при получении HTTP-запроса на действие с объектом кластера увидит в заголовке JWT-токен. Проверит, что токен подписан корневым сертификатом кластера. Возьмет из токена название сервис аккаунта и неймспейс и проверит соответствующие RoleBinding в кластере, чтобы узнать, разрешено ли производить запрошенное действие над объектом из запроса.</p>
37
<p>Но в списке subjects также есть kind: User и kind: Group. При этом команды `kubectl get user` и `kubectl get group` вернут сообщение, что в кластере нет ресурса такого типа.Что очень странно - ресурса нет, а kind: есть.</p>
37
<p>Но в списке subjects также есть kind: User и kind: Group. При этом команды `kubectl get user` и `kubectl get group` вернут сообщение, что в кластере нет ресурса такого типа.Что очень странно - ресурса нет, а kind: есть.</p>
38
<p>Эти <em>kind</em> нужны для того, чтобы описать разрешения для тех запросов, которые были аутентифицированы не через токен от сервис аккаунта, а другим способом. Например, через oidc, когда внешний сервис аутентификации прислал в ответе <em>user</em> и <em>group</em>, соответствующие oidc-токену. Или поля <em>CommonName (CN)</em> и <em>Organization (O)</em> из клиентского сертификата, который был предъявлен при отправке запроса по протоколу HTTPS/TLS.</p>
38
<p>Эти <em>kind</em> нужны для того, чтобы описать разрешения для тех запросов, которые были аутентифицированы не через токен от сервис аккаунта, а другим способом. Например, через oidc, когда внешний сервис аутентификации прислал в ответе <em>user</em> и <em>group</em>, соответствующие oidc-токену. Или поля <em>CommonName (CN)</em> и <em>Organization (O)</em> из клиентского сертификата, который был предъявлен при отправке запроса по протоколу HTTPS/TLS.</p>
39
<h2>ClusterRole</h2>
39
<h2>ClusterRole</h2>
40
<em>Role</em> описывает права в неймспейсе, сущность <em>Role</em> неймспейс-зависимая, и мы можем создавать роли с одинаковым именем в разных неймспейсах.<p>А <em>Cluster Role</em> - это кластерный объект, эта сущность описывает права на объекты во всём кластере.</p>
40
<em>Role</em> описывает права в неймспейсе, сущность <em>Role</em> неймспейс-зависимая, и мы можем создавать роли с одинаковым именем в разных неймспейсах.<p>А <em>Cluster Role</em> - это кластерный объект, эта сущность описывает права на объекты во всём кластере.</p>
41
<p>В k8s есть много преднастроенных кластерных ролей. В том числе роли <em>admin</em>, <em>edit</em> и <em>view</em> - описывающие права, разрешающие администрирование, редактирование или только просмотр сущностей. Посмотреть роль можно в своём кластере, если у вас есть права администратора, командой</p>
41
<p>В k8s есть много преднастроенных кластерных ролей. В том числе роли <em>admin</em>, <em>edit</em> и <em>view</em> - описывающие права, разрешающие администрирование, редактирование или только просмотр сущностей. Посмотреть роль можно в своём кластере, если у вас есть права администратора, командой</p>
42
<p><em>kubectl get clusterrole edit -o yaml</em></p>
42
<p><em>kubectl get clusterrole edit -o yaml</em></p>
43
<p>И есть ёще роль кластерного администратора, которая даёт все права на все сущности кластера.</p>
43
<p>И есть ёще роль кластерного администратора, которая даёт все права на все сущности кластера.</p>
44
<p><em>kubectl get clusterrole cluster-admin -o yaml</em></p>
44
<p><em>kubectl get clusterrole cluster-admin -o yaml</em></p>
45
<h2>ClusterRoleBinding</h2>
45
<h2>ClusterRoleBinding</h2>
46
<em>RoleBinding</em> даёт доступ только к тем сущностям, которые находятся в том же неймспейсе, что и манифест <em>Rolebinding</em>. <em>ClusterRoleBinding</em> позволяет выдать доступ к сущностям во всех неймспесах кластера сразу.<p>К сожалению, механизма, позволяющего выдать доступ к неймспейсам по <em>label</em> или регекспу имени не существует. Или <em>RoleBinding</em> в одном конкретном неймспейсе или <em>ClusterRoleBinding</em> сразу на все неймспейсы кластера.</p>
46
<em>RoleBinding</em> даёт доступ только к тем сущностям, которые находятся в том же неймспейсе, что и манифест <em>Rolebinding</em>. <em>ClusterRoleBinding</em> позволяет выдать доступ к сущностям во всех неймспесах кластера сразу.<p>К сожалению, механизма, позволяющего выдать доступ к неймспейсам по <em>label</em> или регекспу имени не существует. Или <em>RoleBinding</em> в одном конкретном неймспейсе или <em>ClusterRoleBinding</em> сразу на все неймспейсы кластера.</p>
47
<h2>Подведём итоги</h2>
47
<h2>Подведём итоги</h2>
48
<em>Role </em>в неймспесах привязываем через <em>RoleBinding</em> в неймспейсе - юзер получает права в неймспейсе.<p><em>ClusterRole</em> привязываем через <em>ClusterRoleBinding</em> - юзер получает права на весь кластер.Пока логично? А теперь внимательно следим за движением мысли.</p>
48
<em>Role </em>в неймспесах привязываем через <em>RoleBinding</em> в неймспейсе - юзер получает права в неймспейсе.<p><em>ClusterRole</em> привязываем через <em>ClusterRoleBinding</em> - юзер получает права на весь кластер.Пока логично? А теперь внимательно следим за движением мысли.</p>
49
<p><em>ClusterRole</em> можно привязать через <em>RoleBinding</em> в неймспейсе - и юзер получит права в неймспейсе. </p>
49
<p><em>ClusterRole</em> можно привязать через <em>RoleBinding</em> в неймспейсе - и юзер получит права в неймспейсе. </p>
50
<p>Что нам это даёт? Нам нет нужды создавать в каждом неймспейсе одинаковые роли <em>edit</em>, мы можем использовать стандартную кластерную роль <em>edit</em> и назначать ее юзерам, раздавая им доступы в нужные неймспейсы.</p>
50
<p>Что нам это даёт? Нам нет нужды создавать в каждом неймспейсе одинаковые роли <em>edit</em>, мы можем использовать стандартную кластерную роль <em>edit</em> и назначать ее юзерам, раздавая им доступы в нужные неймспейсы.</p>
51
<p>На первое время вполне достаточно стандартных ролей<em> edit </em>и <em>view</em>. Чтобы разобраться в том, какие бывают ресурсы и действия с ними, посмотрите встроенные роли и роли в готовых наборах манифестов, например, в Helm Charts.</p>
51
<p>На первое время вполне достаточно стандартных ролей<em> edit </em>и <em>view</em>. Чтобы разобраться в том, какие бывают ресурсы и действия с ними, посмотрите встроенные роли и роли в готовых наборах манифестов, например, в Helm Charts.</p>
52
<p>Много всего описано в документации, но иногда нужно и погуглить. Как правило, все нужные ресурсы/подресурсы уже расписаны в каких-либо специализированных статьях.</p>
52
<p>Много всего описано в документации, но иногда нужно и погуглить. Как правило, все нужные ресурсы/подресурсы уже расписаны в каких-либо специализированных статьях.</p>
53
<p><a>Узнать подробнее о курсе "Kubernetes База"</a></p>
53
<p><a>Узнать подробнее о курсе "Kubernetes База"</a></p>
54
<p><em>Фото на обложке статьи: Patrick Robert Doyle, Unsplash.com</em></p>
54
<p><em>Фото на обложке статьи: Patrick Robert Doyle, Unsplash.com</em></p>