Что делает namespace при развертывании стандартного кластера Kubernetes?

«Что делает namespace при развертывании стандартного кластера Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Namespace в Kubernetes — это механизм виртуальной кластеризации внутри физического кластера. В моей работе это основной инструмент для логического разделения и изоляции.

Когда я разворачиваю кластер, я сразу создаю несколько неймспейсов, помимо default, для четкой организации:

  • kube-system: Для системных компонентов (CoreDNS, kube-proxy, CNI плагины). Пользовательские приложения сюда не попадают.
  • kube-public: Для ресурсов, которые должны быть доступны всем пользователям, включая неаутентифицированных (например, информация о кластере).
  • ingress-nginx / cert-manager: Выделенные неймспейсы для системных аддонов.
  • monitoring: Для стека мониторинга (Prometheus, Grafana).
  • dev, staging, prod: Для изоляции сред разработки, тестирования и производства.

Что изолирует namespace:

  1. Ресурсы: Поды, сервисы, деплойменты, конфигмапы, секреты — видны только внутри своего неймспейса. Сервис my-app в неймспейсе dev и сервис my-app в prod — это два разных объекта.
  2. Сетевые политики (NetworkPolicy): Позволяют контролировать трафик между подами на уровне неймспейсов (например, запретить подам из dev обращаться к базам данных в prod).
  3. Квоты ресурсов (ResourceQuota): Я устанавливаю лимиты на CPU, RAM и количество объектов для каждого неймспейса, чтобы команда dev не могла исчерпать все ресурсы кластера.
  4. Политики безопасности (PodSecurityStandards): Можно применять разные уровни ограничений (например, более строгие для prod).
  5. Права доступа (RBAC): Роли и RoleBindings привязаны к неймспейсу, что позволяет давать командам доступ только к их среде.

Пример создания и использования для изоляции сред:

# 1. Создание namespace для production
apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    environment: prod
    tier: critical
---
# 2. ResourceQuota для этого namespace
apiVersion: v1
kind: ResourceQuota
metadata:
  name: prod-quota
  namespace: production
spec:
  hard:
    requests.cpu: "20"
    requests.memory: 40Gi
    limits.cpu: "40"
    limits.memory: 80Gi
    pods: "100"

Важно помнить, что неймспейсы не обеспечивают сильную изоляцию на уровне ядра — для этого нужны другие механизмы, такие как отдельные ноды или runtime-защита. Это, в первую очередь, организационный и управленческий инструмент.