Создание пользователя, роли в Kubernetes и их связка через RBAC
В Kubernetes нет отдельных «пользователей» в классическом смысле — есть ServiceAccount’ы и сертификаты, привязанные к ролям через RBAC. Без правильной настройки любой, у кого есть kubeconfig, получает доступ ко всему кластеру. Ниже — полный цикл: создаём ServiceAccount, определяем права, привязываем и проверяем.
Создание ServiceAccount и генерация kubeconfig
Сначала создаём ServiceAccount в нужном namespace:
Для генерации kubeconfig берём токен из secrets и формируем файл:
] Токен ServiceAccount’а — это просто bearer token. Если kubeconfig утечёт, у злоумышленника будет доступ с правами этого SA. Храните файл с правами 600.
Определение Role и ClusterRole
Role — namespace-скопированная сущность, ClusterRole — кластерная. Разница критична: Role не даст прав за пределами своего namespace, ClusterRole — даст.
Пример Role, разрешающей читать pods и запускать поды в namespace staging:
Пример ClusterRole для управления ingress по всему кластеру:
] Список apiGroups пустой строкой "" соответствует core API group (v1). Для apps, networking, batch — указывайте соответствующие группы. Полный список групп можно посмотреть через kubectl api-resources.
Создание RoleBinding и ClusterRoleBinding
RoleBinding привязывает Role к субъекту внутри namespace. ClusterRoleBinding — к ClusterRole в масштабе кластера.
Привязка Role к ServiceAccount в namespace staging:
Привязка ClusterRole к тому же SA (теперь с правами на весь кластер для ingress):
| Binding | Scope | Role type | Когда использовать |
|---|---|---|---|
| RoleBinding | Один namespace | Role или ClusterRole | Чтение/запись в конкретном ns |
| ClusterRoleBinding | Весь кластер | ClusterRole | Глобальные права (node, pv, dns) |
Проверка и отладка прав доступа
После применения YAML проверяем, что SA действительно получил нужные права:
Последняя команда проверяет через ClusterRoleBinding — она вернёт yes, если привязка корректна.
Если что-то не работает, смотрим audit log или используем kubectl auth reconcile с --dry-run=server для предпросмотра:
Ещё один полезный приём — проверить, какие RoleBinding’ы привязаны к конкретному SA:
] kubectl auth can-i проверяет только разрешения, но не учитывает NetworkPolicy или PodSecurityPolicy. Если pod не запускается — проблема может быть и в них.
Итог: RBAC в Kubernetes работает цепочкой — SA → Role/ClusterRole → Binding. Каждое звено можно проверять отдельно, что сильно упрощает отладку. Начинайте с минимальных прав и расширяйте по мере необходимости, не давайте cluster-admin без крайней необходимости.