Sobes.tech
Back to questions
Senior
1

Как осуществляется резолв DNS в Kubernetes? Расскажи про FQDN и цепочку DNS-резолва.

Companies where asked
Flant

Answer from AI

sobes.tech AI

В Kubernetes DNS-резолв происходит через встроенный DNS-сервис (обычно CoreDNS), который отвечает за разрешение имён сервисов и подов внутри кластера.

FQDN в Kubernetes

Полное доменное имя (FQDN) для сервиса в Kubernetes строится по шаблону:

<service>.<namespace>.svc.<cluster-domain>
  • <service> — имя сервиса
  • <namespace> — namespace, в котором находится сервис
  • svc — фиксированная часть, указывающая на сервис
  • <cluster-domain> — домен кластера, по умолчанию cluster.local

Например, сервис my-service в namespace default будет иметь FQDN my-service.default.svc.cluster.local.

Цепочка DNS-резолва

  1. Pod отправляет DNS-запрос на DNS-сервер, указанный в /etc/resolv.conf (обычно это CoreDNS).
  2. CoreDNS проверяет локальные записи для сервисов и подов Kubernetes.
  3. Если имя — короткое (например, my-service), резолв происходит с добавлением search domains из /etc/resolv.conf, например, my-service.default.svc.cluster.local.
  4. Если имя — FQDN, CoreDNS пытается разрешить его напрямую.
  5. Если CoreDNS не может разрешить имя, запрос передаётся на внешний DNS (например, Google DNS).

Таким образом, DNS в Kubernetes позволяет подам обращаться к сервисам по коротким именам, а при необходимости использовать полные доменные имена для точного указания.


Пример /etc/resolv.conf в поде:

search default.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.96.0.10
options ndots:5

Здесь 10.96.0.10 — IP CoreDNS, а ndots:5 означает, что имена с менее чем 5 точками считаются неполными и к ним добавляются search domains.