Что означает сервис со значением `clusterIP: None` в Kubernetes?

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

Ответ

Сервис с clusterIP: None называется Headless Service. Он не получает виртуальный кластерный IP-адрес и не выполняет балансировку нагрузки или проксирование трафика на уровне Kubernetes.

Основное назначение: Прямое взаимодействие с конкретными подами. DNS-запрос к имени такого сервиса возвращает не один IP (адрес сервиса), а набор IP-адресов всех подов, которые соответствуют селектору сервиса.

Пример манифеста Headless Service:

apiVersion: v1
kind: Service
metadata:
  name: cassandra-headless
spec:
  clusterIP: None # Ключевой параметр
  selector:
    app: cassandra
  ports:
  - port: 9042

Типичные сценарии использования:

  • StatefulSet: Для доступа к отдельным экземплярам stateful-приложений (например, узлы Cassandra, MongoDB, Elasticsearch). Каждый под получает стабильное DNS-имя вида pod-name.service-name.namespace.svc.cluster-domain.
  • Сервис обнаружения (Service Discovery): Когда клиенту (часто внутри кластера) необходимо знать адреса всех экземпляров приложения для прямого подключения.
  • Интеграция со сторонними системами балансировки или мониторинга, которым нужны прямые IP-адреса подов.