hostprofi.ru
Подобрать хостинг
Термин·буква N

Namespace

краткое определение

Namespace в Kubernetes — логический раздел кластера для изоляции ресурсов между командами или окружениями. Позволяет применять разные квоты, политики доступа и сетевые правила к разным группам объектов.

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. Защищает кластер от «прожорливых» приложений.

Другие термины