Что такое RoleBinding
RoleBinding — это объект Kubernetes, который связывает (привязывает) набор разрешений, определенных в Role или ClusterRole, с конкретными пользователями, группами или сервисными аккаунтами. Проще говоря, RoleBinding «наделяет правами» субъектов в кластере.
Архитектура RBAC
Система RBAC состоит из трех основных компонентов:
- Role/ClusterRole — ЧТО можно делать (набор правил)
- Subject — КТО (пользователь, группа, сервисный аккаунт)
- RoleBinding/ClusterRoleBinding — связывает первые два компонента
Role vs ClusterRole
Role
-
Действует в пределах одного namespace
-
Используется для предоставления прав к ресурсам в конкретном namespace
ClusterRole
-
Действует на уровне всего кластера
-
Используется для:
-
Доступа к cluster-scoped ресурсам (nodes, persistentvolumes)
-
Доступа к ресурсам во всех namespaces
-
Доступа к non-resource endpoints (/healthz)
-
Структура RoleBinding
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: pod-reader-binding namespace: default roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: pod-reader subjects: - kind: User name: alice apiGroup: rbac.authorization.k8s.io - kind: ServiceAccount name: frontend-sa namespace: default - kind: Group name: developers apiGroup: rbac.authorization.k8s.io
Пример 1: RoleBinding с Role
Создаем Role:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"]
Создаем RoleBinding:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-pods namespace: default subjects: - kind: User name: bob apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: pod-reader apiGroup: rbac.authorization.k8s.io
Пример 2: RoleBinding с ClusterRole
Используем предопределенную ClusterRole:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: admin-in-development namespace: development subjects: - kind: User name: developer1 apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: admin apiGroup: rbac.authorization.k8s.io
В этом случае пользователь developer1 получает права admin только в namespace development.
RoleBinding vs ClusterRoleBinding
| Аспект | RoleBinding | ClusterRoleBinding |
|---|---|---|
| Область действия | Один namespace | Весь кластер |
| Связывание с | Role или ClusterRole | Только ClusterRole |
| Использование | Лимитированный доступ | Глобальный доступ |
Best Practices (лучшие практики применения)
1. Принцип минимальных привилегий
# ХОРОШО: Только необходимые права rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list"] # ПЛОХО: Избыточные права rules: - apiGroups: [""] resources: ["pods"] verbs: ["*"]
2. Использование сервисных аккаунтов
subjects: - kind: ServiceAccount name: ci-cd-bot namespace: ci-cd
3. Группировка пользователей
subjects: - kind: Group name: devops-team apiGroup: rbac.authorization.k8s.io
4. Именование
-
Четкие, описательные имена (
monitoring-read-only,ci-deployer) -
Указание namespace в имени при необходимости
Практическое применение в CI/CD
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: jenkins-deployer namespace: production subjects: - kind: ServiceAccount name: jenkins namespace: jenkins roleRef: kind: ClusterRole name: edit apiGroup: rbac.authorization.k8s.io
Управление и мониторинг
Проверка прав:
kubectl auth can-i get pods --as=system:serviceaccount:default:my-sa kubectl get rolebindings,clusterrolebindings --all-namespaces
Аудит:
kubectl describe rolebinding my-binding
kubectl get rolebinding -o yaml
RoleBinding — это мощный инструмент для реализации принципа наименьших привилегий в Kubernetes. Правильное использование RoleBinding в сочетании с хорошо продуманными Roles и ClusterRoles позволяет создать безопасную и управляемую систему доступа, что особенно важно в production-средах и при работе с множеством команд и приложений.
Понимание и грамотное применение RoleBinding является обязательным навыком для любого инженера, работающего с Kubernetes, включая специалистов таких компаний, как Augment, которые строят надежные и безопасные инфраструктуры для своих клиентов.
0