Что такое Headless Service в Kubernetes?

В Kubernetes Service обычно нужен для того, чтобы дать Pod’ам стабильный IP-адрес и DNS-имя. По умолчанию у сервиса есть ClusterIP, и трафик равномерно балансируется между Pod’ами.

Но бывают ситуации, когда балансировка не нужна — нужно, чтобы у каждого Pod был собственный DNS-записью. Для этого и существует Headless Service.


Как это работает

Headless Service создаётся так:

clusterIP: None

В этом случае Kubernetes не назначает виртуальный IP, а DNS возвращает A-записи для каждого Pod.

Example: Headless Service

apiVersion: v1
kind: Service
metadata:
  name: my-db
  labels:
    app: my-db
spec:
  clusterIP: None
  selector:
    app: my-db
  ports:
    - port: 5432
      name: db

Теперь вместо одного IP DNS вернёт несколько:

my-db.default.svc.cluster.local -> Pod1_IP, Pod2_IP, Pod3_IP
nslookup ignite-headless
Server:		10.233.0.3
Address:	10.233.0.3:53

Name:	ignite-headless
Address: 10.234.199.202
Name:	ignite-headless
Address: 10.234.103.153
Name:	ignite-headless
Address: 10.234.81.223

Где используется

  • Базы данных (Postgres, Cassandra и др.) — каждый Pod хранит уникальные данные и должен быть доступен напрямую.
  • StatefulSet — Pod’ы получают стабильные DNS-имена вида pod-0.my-db.default.svc.cluster.local.
  • Сервис-дискавери — когда приложение само управляет балансировкой.

Вывод

Headless Service даёт больше контроля над тем, как Pod’ы обнаруживаются и используются, и часто применяется в продвинутых сценариях Kubernetes.