Может ли приложение из одного неймспейса Kubernetes увидеть приложение из другого внутри кластера?

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

Ответ

Да, приложения из разных неймспейсов могут взаимодействовать внутри кластера по умолчанию. Для доступа используется полное доменное имя (FQDN) сервиса в формате:

<service-name>.<namespace-name>.svc.cluster.local

Пример: Pod в неймспейсе frontend обращается к сервису api-service в неймспейсе backend:

curl http://api-service.backend.svc.cluster.local/api/v1/users

Ключевые моменты для DevOps:

  • Сетевая политика: По умолчанию трафик разрешен, но его можно (и нужно) ограничить с помощью NetworkPolicy. Например, политика, разрешающая трафик только от определенных неймспейсов:
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-from-frontend
      namespace: backend
    spec:
      podSelector: {}
      policyTypes:
      - Ingress
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              name: frontend
  • Service Discovery: Внутрикластерный DNS (обычно CoreDNS) автоматически разрешает эти имена.
  • Изоляция: Для полной изоляции рабочих нагрузок используются отдельные неймспейсы в сочетании с NetworkPolicies и RBAC, а не отдельные кластеры (что увеличивает операционные расходы).