Namespace — механизм виртуальной изоляции внутри Kubernetes-кластера. Каждый объект (Pod, Service, Deployment) принадлежит конкретному namespace. Это позволяет нескольким командам или проектам использовать один кластер без конфликта имён и с разграничением прав.
Как работает
По умолчанию Kubernetes создаёт четыре namespace: default (для пользовательских ресурсов), kube-system (системные компоненты), kube-public (публично читаемые ресурсы), kube-node-lease (heartbeat узлов).
Каждый namespace получает собственную область DNS. Сервис nginx в namespace prod доступен как nginx.prod.svc.cluster.local. Из другого namespace обращение по короткому имени nginx не работает — нужен полный DNS-адрес.
ResourceQuota ограничивает потребление CPU, памяти и количество объектов внутри namespace. LimitRange устанавливает дефолтные лимиты для контейнеров без явно указанных ресурсов.
История
Namespace появились в Kubernetes 1.0 в июле 2015 года. Концепция заимствована из Linux namespaces (с 2002 года) — механизма изоляции процессов ядра. В 2018 году Network Policy добавила сетевую изоляцию между namespace на уровне L3/L4.
Практические сценарии
- Среды: namespace
dev,staging,prodв одном кластере. - Команды:
team-backend,team-frontendс раздельными квотами. - Клиенты: multi-tenant SaaS с изоляцией данных между клиентами.
Связь с хостингом
Managed Kubernetes от Яндекс Cloud, EKS и других провайдеров поддерживает namespace для разграничения нагрузок в shared-кластере. RBAC-роли в Kubernetes назначаются на уровне namespace — администратор cluster-wide видит всё, пользователь namespace — только свои ресурсы.
Ключевые отличия от похожих терминов
Linux namespace (IPC, NET, PID, UTS) — механизм ядра для изоляции процессов, используется контейнерами. Kubernetes namespace — абстракция более высокого уровня поверх кластера, не связана напрямую с Linux namespace.
Назначение Namespace в Kubernetes
Namespace — виртуальный кластер внутри кластера. Изоляция ресурсов, RBAC (Role-Based Access Control), ResourceQuota, NetworkPolicy. Системные namespace: default, kube-system, kube-public. Рекомендуется: отдельный namespace для каждого приложения или команды.
Namespace в Linux
Linux namespaces — механизм изоляции: PID (процессы), Network (сетевые интерфейсы), Mount (файловая система), UTS (hostname), IPC, User (UIDs). Docker и LXC используют Linux namespaces для изоляции контейнеров. lsns — список namespace на хосте.
NetworkPolicy по Namespace
По умолчанию Pods из разных namespace могут общаться. NetworkPolicy ограничивает: только podSelector + namespaceSelector. Calico, Cilium — CNI-плагины с поддержкой NetworkPolicy. Для хостинга нескольких клиентов в одном кластере — изоляция по namespace обязательна.
Resource Quota в Namespace
kubectl create quota dev-quota --hard=requests.cpu=4,requests.memory=8Gi,limits.cpu=8,limits.memory=16Gi -n dev. LimitRange: kubectl create limitrange dev-lr --default-limit-cpu=500m,memory=512Mi --default-request-cpu=100m,memory=128Mi -n dev. Защищает кластер от «прожорливых» приложений.