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

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, который предназначен для добавления случайной задержки и предотвращения штурмующих волн запросов. И он тоже почему-то по умолчанию отключен.

Теги

 

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

Установка IIS в Windows Server 2012 R2

Пришла задача поднять IIS на Windows Server 2012 R2 для CRM BPM Online от Terrasoft. Указанные ниже настройки достаточны для работы данной приблуды. Однако, пришлось также забраться в конфиги данной сторонней системы и кое что править руками. Но это уже не относится к установке IIS и опысываться здесь не будет.

Теги

10 лет Minecraft — играть в браузере

Многие слышали про игру-песочницу Minecraft, которая была создана силами одного программиста Маркуса Перссона. В 2019 году игре исполняется 10 лет. Студия Mojang сделала фанатам подарок и выложила в открытый доступ одну из первых версий - 0.0.23a_01.

Теги

CTF — HTTP Headers

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

Теги