Что такое 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.