Comments 6
Добавлю что ndots=1
скорее всего не поломает резолв внутри кластера. Сначала будет сделан запрос без добавления элементов из search и, если он не вернет результатов, будет использоваться путь поиска.
ndots=5
сделали чтобы не перегружать корневые dns сервера и чтобы избежать потенциальной mitm атаки.
Но по мне красивее было бы логику поиска перекинуть на локальный dns server (где есть информация о ресурсах) и тем самым избежать лишнего сетевого трафика.
Тут много нюансов может возникнуть, например нужно будет дублировать ДНС сервера на всех нодах кластера, на случай отказа.
Второй момент, что нужно будет следить за всеми ДНС серверами и поддерживать их конфиги в одинаковом состоянии, что уже сложнее, чем обновлять конфиги пода с CoreDNS.
Третьим будет такой момент, что при ошибке обновления образуется состояние при котором будем получать разные ответы от разных ДНС. Короче надо будет еще пилить алгоритм консенсуса между ними и выбор мастера.
Зачем на поднимать на машине? Уже есть CoreDNS.
Как сделано сейчас:
для сервиса foo в namespace hello создается одна запись:
foo.hello.svc.cluster.local
.
В подах в resolv.conf
такое:
search hello.svc.cluster.local svc.cluster.local cluster.local
.
foo
1 запрос.foo.hello
2 запросаfoo.hello.svc
3 запросаmrkaran.dev
4 запроса (3 лишних).
Варианты уменьшения лишних запросов.
1) Добавлять записи днс для каждого пути из search. (самый простой и некостыльный)
Для foo
в namespace hello
создавать записи в днс.
foo.hello.svc.cluster.local.
foo.hello.svc.
foo.hello.
Search при этом обрезать до search hello.svc.cluster.local
foo
1 запрос.foo.hello
2 запросаfoo.hello.svc
2 запросаmrkaran.dev
2 запроса (1 лишний).
Уже значительно легче для приложений которые интенсивно ходят в интернет. Без сильного оверхеда.
2) отказаться от search полностью. В дополнение предыдущему варианту добавлять запись в днс без namespace. Но тут надо либо поднимать инстанс DNS в каждом namespace, либо пилить костыли опирающиеся на сеть (source ip, destination ip).
Также если хотите ужаснуться — в гугл клаудде в кубере в search 5 записей по умолчанию (3 куберовские, 2 от гуглового проекта)
DNS-поиск в Kubernetes