Перейти к основному содержанию

Envoy и DNS

Envoy

Envoy — это высокопроизводительный L4-L7 балансировщик написанный на С++.

Envoy похож на nginx и haproxy со своими отличиями, которые иногда сильно нужны и весьма предпочтительны. Envoy ориентирован на микросервисную архитектуру и обладает богатым функционалом.

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

Проблема взаимодействия Envoy и DNS

В один прекрасный момент мы заменили часть Nginx серверов на Envoy и заметили, что нагрузка на серверы DNS резко возросла. Ну как заметили, серверам DNS стало плохо, мы включили дебаг и выяснили, что Envoy серверы генерируют большую часть трафика к DNS, больше чем раньше генерировали Nginx серверы.

GPT подсказал куда копать, а именно — в документацию. Документация указывает на две опции:

  • respect_dns_ttl — по умолчанию false
  • dns_refresh_rate  — по умолчанию 5 секунд

Кластеры типа STRICT_DNS и LOGICAL_DNS по умолчанию выполняют разрешение DNS постоянно в фоновом режиме, независимо от того, есть ли трафик к этим кластерам. Это означает, что даже если сервис используется редко, Envoy все равно будет регулярно создавать DNS-запросы. Значение dns_refresh_rate по умолчанию составляет всего 5 секунд. Такой короткий интервал приводит к очень частым запросам к DNS-серверу.

При этом значения TTL записей DNS по умолчанию игнорируются: respect_dns_ttl. Кто это вообще придумал?!

https://github.com/envoyproxy/envoy/issues/20562

В больших средах на одном экземпляре Envoy может быть настроено большое количество DNS-кластеров. И самих Envoy серверов в инфраструктуре может быть много. Ну, вы понимаете к чему это приводит.

Что делать?

Во-первых, используем TTL, не зря его придумали. Включаем respect_dns_ttl. В небольших системах можно увеличить интервал dns_refresh_rate.

Общее количество запросов к DNS серверам снизится. Однако, если инфраструктура большая, то по мере истечения TTL, серверы Envoy могут одновременно генерировать пиковый шквал запросов (Thundering Herd) к серверам DNS. Здесь может помочь параметр dns_jitter, который предназначен для добавления случайной задержки и предотвращения штурмующих волн запросов. И он тоже почему-то по умолчанию отключен.

Теги

 

Похожие материалы

Добавляем уведомления виджету комментариев "В контакте"

Есть такая замечательная штука, виджет комментариев "В контакте". Но у него есть небольшой минус — нет возможности "из коробки" получать уведомления о новых комментариях. Есть блок, выводящий все комментария, но он показывает только сообщения первого уровня, вложенные ответы не видно. Добавим уведомления на почту при поступлении нового комментария.

Теги

CTF — HTTP - Cookies

Продолжаем решать задачки по информационной безопасности web-серверов. Сегодня задачка с портала root-me.org, называется "HTTP - Cookies". За решение задачки дают 20 баллов, сложнее начального уровня.

Теги