Связаны ли Namespaces между собой в Kubernetes?

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

Ответ

По умолчанию Namespaces обеспечивают логическую, а не жёсткую изоляцию. Ресурсы в разных неймспейсах «видят» друг друга при определённых условиях.

Как связаны неймспейсы:

  1. Сетевая связность: Поды из разных неймспейсов могут общаться друг с другом через внутреннюю сеть кластера, если не ограничено NetworkPolicy. Сервис в неймспейсе backend доступен из неймспейса frontend по его полному доменному имени (FQDN): backend-service.backend.svc.cluster.local.
  2. Управление доступом (RBAC): Можно настроить доступ к ресурсам в другом неймспейсе с помощью Role и RoleBinding (или ClusterRole и ClusterRoleBinding).
    # RoleBinding в неймспейсе 'monitoring', дающий доступ ServiceAccount из 'default'
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: read-pods
      namespace: monitoring # Целевой неймспейс
    subjects:
    - kind: ServiceAccount
      name: prometheus-sa
      namespace: default    # Исходный неймспейс
    roleRef:
      kind: Role
      name: pod-reader
      apiGroup: rbac.authorization.k8s.io
  3. Изоляция ресурсов: Квоты (ResourceQuota) и лимиты (LimitRange) действуют в пределах своего неймспейса.

Как разделить: Для настоящей изоляции (например, для мультитенантности) необходимо комбинировать NetworkPolicies, RBAC и, возможно, использовать отдельные кластеры или виртуальные кластеры (vClusters).