Что такое ndots и зачем оно нужно в Kubernetes

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

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

Если в имени содержится количество точек меньше, чем указано в ndots, Kubernetes сначала добавляет поисковые домены из /etc/resolv.conf, а потом делает запрос.

Пример

При ndots:5 и запросе service.default (в нём одна точка) будут пробоваться:

  • service.default.<search-domain>
  • service.default
  • Затем полное имя

Почему это важно

  • Избыточные DNS-запросы — больше обращений к кластерному DNS.
  • Задержки при резолвинге — особенно критично для сервисов.
  • Неверные разрешения — если имя не соответствует шаблону поиска.

Рекомендованное значение

Обычно в Kubernetes рекомендуют:

ndots: 2

Так сервисы вроде service.namespace (одна точка) обрабатываются корректно через поисковые домены.

Как задать ndots в Pod

В манифесте Pod можно указать через dnsConfig:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  dnsPolicy: "Default"
  dnsConfig:
    options:
      - name: ndots
        value: "2"

Проверка

Изучите /etc/resolv.conf в Pod:

kubectl exec -it mypod -- cat /etc/resolv.conf

Проверьте резолвинг:

dig myservice.namespace

Заключение

ndots — это мелкая, но важная настройка. Она влияет на скорость и надёжность DNS в Kubernetes. Установите разумное значение, чтобы избежать лишних проблем и улучшить производительность.