Одна цифра в /etc/resolv.conf способна положить внутренний DNS-кластер быстрее, чем ботнет на 100 000 хостов.
В мире микросервисов на Linux стандартный образ контейнера часто наследует дефолтный конфиг резолвера от хоста или k8s-ноды, где параметр ndots выставлен в 5. Для внутренних вызовов вроде `curl http://api.internal/v1/users` это запускает катастрофическую цепочку системных вызовов через `glibc` (`__libc_res_nquery`).
Поскольку в доменном имени `api.internal` содержится всего две точки (что меньше порога в ndots=5), glibc считает адрес относительным. Вместо прямого запроса к нужному хосту резолвер начинает перебирать суффиксы из поля `search` в `/etc/resolv.conf`.
Если в Kubernetes-поде прописаны стандартные search-домены (например, `ns.svc.cluster.local`, `svc.cluster.local`, `cluster.local`, `ec2.internal`), один безобидный запрос превращается в последовательность из пяти UDP-пакетов:
1. `api.internal.ns.svc.cluster.local` (NXDOMAIN)
2. `api.internal.svc.cluster.local` (NXDOMAIN)
3. `api.internal.cluster.local` (NXDOMAIN)
4. `api.internal.ec2.internal` (NXDOMAIN)
5. Только на пятой итерации glibc делает искомый запрос к абсолютному имени `api.internal`.
Умножьте это на 50 000 RPS от вашего API-gateway. CoreDNS мгновенно захлебывается в 250 000 запросах в секунду, из которых 80% - заведомо мусорные NXDOMAIN. Начинается деградация UDP-сокетов, срабатывает rate-limit в iptables/conntrack, и падает вся внутренняя связность кластера. В этот момент TCO вашего облака резко падает в ноль из-за простоя, а счета за сетевые риповеры от AWS Route53 или CoreDNS-подов улетают в космос.
Как с этим бороться на уровне ядра и манифестов:
- Принудительно выставляйте `options ndots:1` в PodSpec через `dnsConfig`, если ваши сервисы используют абсолютные FQDN или короткие внутренние имена.
- Тюньте таймауты glibc через `options timeout:1 attempts:2`, чтобы зависший резолвер не утилизировал пул потоков приложения.
- На уровне ядра увеличивайте размер hash-таблицы conntrack (`nf_conntrack_buckets`) и лимиты socket receive queue (`net.core.rmem_max`), чтобы kernel не дропал легитимные UDP-пакеты под штормом NXDOMAIN.
- Инфраструктурный аудит и калькулятор TCO кластера: @Personnel_run_bot (/tma)
- База знаний и разборы: ftops.space
- ftops.space | Run-As-Daemon Infrastructure
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Поверхностный мониторинг облачных провайдеров привычно обвиняет приложение в утилизации ресурсов, ... | 0 | 7.98 | 20-09-2026 |
| 2 | Каждые 5 минут транзакции в PostgreSQL замирают на 3 - ... | 0 | 12.14 | 19-09-2026 |
| 3 | Памятник kubelet, Kubernetes != CRI | 0 | 7 | 13-07-2026 |
| 4 | Linux наконец-то не тормозит или пятничный релакс | 0 | 13.18 | 07-08-2026 |
| 5 | Сервер uptime 1888 days ≈ 5 лет и 2 месяца | 0 | 23.75 | 15-09-2026 |
| 6 | [Show] swift-topomap: Silicon-aware TUI and eBPF metrics engine | 0 | 11.87 | 27-07-2026 |
| 7 | Линус Торвальдс systemd Red Hat инновация RHEL Fedora Linux мейнтейнер ... | -1 | 5.34 | 03-09-2026 |
| 8 | На ТСПУ начали перехватывать открытые DNS запросы к 1.1.1.1, 8.8.8.8 | 0 | 13.84 | 27-08-2026 |
| 9 | Инверсия приоритетов в Kubernetes: Когда планировщик убивает бизнес, спасая «важные» поды | 0 | 7 | 13-07-2026 |
| 10 | CoreDNS-1.14.2 Release | 0 | 8.67 | 06-03-2026 |