Одна цифра в /etc/resolv.conf способна положить внутренний DNS-кластер быстрее, чем ботнет на 100 000 хостов. Это не теория, а реальность, с которой сталкиваются архитекторы при масштабировании микросервисов в Kubernetes. Речь об опции ndots:5.
Анатомия катастрофы выглядит так. По умолчанию в resolv.conf для поиска неполных доменных имен (FQDN) используется параметр ndots. Если значение равно 5, то любой запрос к хосту, содержащему менее пяти точек, будет считаться "относительным".
Пример: вы вызываете API сервиса `auth-service`. В нем ноль точек. Glibc видит это, берет список search из resolv.conf (например: `default.svc.cluster.local`, `svc.cluster.local`, `cluster.local` и т.д.) и начинает последовательно перебирать их:
1. `auth-service.default.svc.cluster.local` - NXDOMAIN
2. `auth-service.svc.cluster.local` - NXDOMAIN
3. `auth-service.cluster.local` - NXDOMAIN
4. `auth-service.local` (если прописано в search) - NXDOMAIN
5. И только потом `auth-service` (прямой запрос)
Каждый такой промах - это UDP пакет до CoreDNS, ожидание ответа и обработка. При ndots:5 один запрос к API порождает до 5 паразитных DNS-запросов. Если ваш сервис делает 1000 RPS к 10 зависимостям, вы получаете 50 000 DNS-запросов в секунду на пустом месте. CoreDNS захлебывается, latency системы летит в космос, а вы ищете причину в коде, хотя проблема в сетевом стеке.
Что делать?
1. Используйте FQDN. Если сервис обращается к другому, пишите его адрес полностью: `auth-service.default.svc.cluster.local`. Это снимает необходимость в поиске по search-доменам.
2. Настраивайте `dnsConfig` в Deployment. Переопределите `ndots` на 1 или 2 для высоконагруженных сервисов. Это заставит glibc сначала пытаться разрешить хост как есть, и только потом идти по списку поиска.
3. Мониторьте метрики CoreDNS. `coredns_dns_request_duration_seconds` и `coredns_dns_responses_total` с разбивкой по rcode (особенно NXDOMAIN) - ваши главные индикаторы. Рост доли NXDOMAIN при стабильном трафике - прямой сигнал, что ndots вас убивает.
TCO такого инцидента просто посчитать. Умножьте стоимость инженеров, которые 8 часов занимались "поиском виноватых", на их ставку, добавьте стоимость простоя и риск репутации. Часто это десятки тысяч долларов за один "резолв".
Оптимизация сетевого стека начинается не с покупки нового железа, а с понимания того, как именно ваше приложение общается с ядром и сетевой инфраструктурой. Не давайте DNS-запросам съедать ваш бюджет.
- Инфраструктурный аудит и калькулятор TCO кластера: @Personnel_run_bot (/tma)
- База знаний и разборы: ftops.space
- ftops.space | Run-As-Daemon Infrastructure
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Одна цифра в /etc/resolv.conf способна положить внутренний DNS-кластер быстрее, чем ... | 0 | 12.82 | 19-09-2026 |
| 2 | Очередной разбор полетов в 03:00. Мониторинг Cilium показывает низкую загрузку ... | 0 | 9.21 | 21-09-2026 |
| 3 | Вот что оптимизация животворящая делает: Cloudflare программно освободила 100 ТБ ... | -1 | 16.26 | 29-08-2026 |
| 4 | Памятник kubelet, Kubernetes != CRI | 0 | 7 | 13-07-2026 |
| 5 | Techora.ru — кибербезопасность, чипы, БПЛА и космос | -1 | 12.03 | 24-08-2026 |
| 6 | Каждые 5 минут транзакции в PostgreSQL замирают на 3 - ... | 0 | 12.14 | 19-09-2026 |
| 7 | Памятник kubelet, Kubernetes != CRI | 0 | 7 | 13-07-2026 |
| 8 | Ночной сбой 03:00. Мониторинг кричал о деградации аплинка, графики потерь ... | -1 | 10.33 | 21-09-2026 |
| 9 | Linux наконец-то не тормозит или пятничный релакс | 0 | 13.18 | 07-08-2026 |
| 10 | CoreDNS-1.14.3 Release | 0 | 7.67 | 06-03-2026 |