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

Ответ

Сервис с 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-адреса подов.

Ответ 18+ 🔞

Бля, ну слушай, тут есть одна хитрая штука в кубере — Headless Service. Это когда сервису похуй на кластерный IP, он его просто не берёт, типа «нахуй не нужен». Никакой балансировки нагрузки, никакого проксирования — всё честно и прямо.

Зачем это, спросишь? А затем, ёпта, чтобы твоё приложение могло тупо накидать DNS-запрос и получить в ответ не один ебучий IP сервиса, а сразу все IP-адреса подов, которые под этот сервис попадают. Прямой доступ, без посредников.

Вот смотри, как это выглядит, простыня на ямле:

apiVersion: v1
kind: Service
metadata:
  name: cassandra-headless
spec:
  clusterIP: None # Вот это, бля, самый главный параметр! Вырубает IP нахуй.
  selector:
    app: cassandra
  ports:
  - port: 9042

А теперь, чувак, где это реально впаривают:

  • StatefulSet'ы всякие: Ну, типа Кассандра, Монга, Эластик — там каждому поду нужно своё стабильное DNS-имя, чтобы к нему можно было приехать лично. Получается что-то вроде pod-name.service-name.namespace.svc.cluster-domain. Удобно, блядь.
  • Сервис-дискавери на минималках: Когда твоему клиенту внутри кластера надо знать адреса всех инстансов приложения, чтобы подключиться к каждому по отдельности. Не через прокси, а напрямую, по-пацански.
  • Интеграция с левыми системами: Допустим, у тебя своя, ебаная, система мониторинги или балансировщик, которым подавай голые IP подов. Вот тут headless сервис и выручает — отдаёт им всё как есть, без прикрас.