Ответ
В Kubernetes для управления доступом и изоляции используются несколько ключевых абстракций, работающих на разных уровнях:
-
Namespaces (Пространства имен)
- Что это: Логическое разделение кластера на изолированные виртуальные среды (например,
dev,staging,prod). - Зачем: Предоставляют область видимости для имен ресурсов (поды, сервисы не могут иметь одинаковые имена в одном namespace) и являются основой для применения политик, таких как RBAC и ResourceQuotas.
- Что это: Логическое разделение кластера на изолированные виртуальные среды (например,
-
RBAC (Role-Based Access Control)
- Что это: Механизм для гранулярной настройки прав доступа пользователей и сервисов к API Kubernetes.
- Компоненты:
- Role и ClusterRole: Определяют набор разрешений (
verbs:get,list,create) на ресурсы (resources:pods,services).Roleдействует в рамках одного Namespace, аClusterRole— на уровне всего кластера. - RoleBinding и ClusterRoleBinding: Связывают роли (
Role/ClusterRole) с субъектами (subjects:User,Group,ServiceAccount).
- Role и ClusterRole: Определяют набор разрешений (
- Пример
Role:apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: pod-reader rules: - apiGroups: [""] # "" означает core API group resources: ["pods"] verbs: ["get", "watch", "list"]
-
ServiceAccounts (Сервисные аккаунты)
- Что это: Учетные записи, предназначенные для процессов, работающих внутри подов, чтобы они могли аутентифицироваться в API-сервере Kubernetes.
-
NetworkPolicies (Сетевые политики)
- Что это: Правила, управляющие сетевым трафиком между подами на уровне L3/L4. Позволяют реализовать принцип "zero-trust", когда по умолчанию весь трафик запрещен, а разрешается только необходимый.
-
ResourceQuotas (Квоты на ресурсы)
- Что это: Ограничения на совокупное потребление ресурсов (CPU, память, хранилище) в рамках одного Namespace.
- Зачем: Помогают предотвратить проблему "шумного соседа", когда один проект потребляет все ресурсы кластера.
Эти абстракции в совокупности позволяют создавать безопасные, мульти-tenantные среды.
Ответ 18+ 🔞
Давай разберем эту кухню, где готовится наш кластерный борщ. Про безопасность и изоляцию в кубере. Ты знаешь, как у нас в подъезде: если не поставить железную дверь, сосед дядя Вася запросто придёт и сожрёт твой холодец. Так и тут.
Namespaces (Пространства имён)
Это типа отдельных квартир в одном доме-кластере. dev, staging, prod — три разные квартиры. В каждой своя обстановка, свои имена подов и сервисов. В prod нельзя назвать под frontend-pidor, а в dev — пожалуйста, хоть govno-service. И самое главное — на каждую квартиру можно повесить свой замок (политики), чтобы из dev не лазили в prod и не выпили весь коньяк.
RBAC (Ролевой доступ, ёпта) Вот это, блядь, система пропусков. Кто что может делать. Не просто "зашёл в кластер", а что именно тебе можно.
-
Role / ClusterRole — это должностная инструкция, написанная кровью. Что можно трогать и как.
Role— инструкция для одной квартиры (namespace),ClusterRole— для всего подъезда (кластера). Вот смотри, инструкция "читатель подов":apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"] # МОЖНО: смотреть, листать, глазетьВидишь?
createилиdelete— нихуя нельзя. Только глазеть, как они работают. -
RoleBinding / ClusterRoleBinding — это когда начальник отдела кадров берёт эту инструкцию и пришпиливает её к твоей грудной клетке. Связывает роль с тобой, твоей группой или сервисным аккаунтом. Без этого биндинга твоя роль — просто бумажка, в рот меня чих-пых.
ServiceAccounts (Сервисные аккаунты) А это — спецпропуска для роботов! Не для людей, а для самих подов, чтобы они могли стучаться в API-сервер и говорить: "Э, я свой, пусти, мне надо список сервисов получить". Без своего сервисного аккаута под — как манда без ушей, нихуя не попросит.
NetworkPolicies (Сетевые политики)
Вот это, блядь, наш КПП! Представь: по умолчанию в кластере все поды могут друг до друга достучаться. Полный пиздец и бардак. NetworkPolicy говорит: "Слушай сюда, под backend в неймспейсе prod может общаться ТОЛЬКО с подом database на порт 5432. Всё. Остальным — иди нахуй". Реализуем принцип "никому не верь", даже своему соседу по ноде.
ResourceQuotas (Квоты)
А это — борьба с жадными соседями. Чтобы какой-нибудь проект в неймспейсе experimental не сожрал всю память и CPU кластера, оставив prod сухим и мёртвым. Выдаётся лимит: "Вот тебе 10 ядер и 64ГБ памяти на всю твою квартиру. Выжми из этого максимум, а как кончится — сиди и жди, пока кто-то умрёт".
Итог, сука Вот когда ты это всё вместе применяешь: разбил на квартиры (namespaces), раздал пропуска (RBAC + ServiceAccounts), поставил КПП между комнатами (NetworkPolicies) и ограничил потребление воды и света (ResourceQuotas) — вот тогда получается не общага, а приличный, безопасный, многоквартирный дом. Где каждый сидит в своей хате и не суёт свой нос, а тем более свои запросы, куда не просят.