Настройка LocalDNS в Служба Azure Kubernetes

LocalDNS — это функция в Azure Kubernetes Service (AKS), предназначенная для повышения производительности разрешения системы доменных имен (DNS) и устойчивости для рабочих нагрузок, выполняемых в кластере. При развертывании ПРОКСИ-сервера DNS на каждом узле LocalDNS снижает задержку запросов DNS, повышает надежность во время сбоев в сети и предоставляет дополнительные параметры конфигурации для кэширования и пересылки DNS. В этой статье объясняется, как работает LocalDNS, его параметры конфигурации и как включить, проверить и устранить неполадки LocalDNS в кластерах AKS.

Сведения о том, что такое LocalDNS, включая сведения об архитектуре и ключевые возможности, см. в статье DNS Resolution в Azure Kubernetes Service (AKS).

Рекомендации по настройке LocalDNS

При реализации LocalDNS в кластерах AKS рассмотрите следующие рекомендации.

  • Начните с минимальной конфигурации: начните с простой конфигурации, которая использует Preferred режим для проверки синтаксиса конфигурации LocalDNS перед переходом в Required режим. Режим Preferred проверяет конфигурацию без включения LocalDNS, что позволяет перехватывать ошибки конфигурации рано, не влияя на кластер.

  • Реализуйте правильные стратегии кэширования: настройте параметры кэша на основе характеристик рабочей нагрузки:

    • Для часто изменяющихся записей используйте значения cacheDurationInSeconds более короткие. При этом важно отметить, что cacheDurationInSeconds действует в качестве ограничения на срок жизни записи DNS, но не увеличивает его. Результирующий TTL — это наименьшее из того, что возвращается из вышестоящего модуля, или того, что задано в плагине кэша.
    • Для стабильных записей используйте более длительные сроки кэша, чтобы уменьшить количество запросов DNS.
    • Включите serveStale соответствующие параметры для обслуживания службы во время сбоев DNS.
    • Кэширование с помощью LocalDNS работает на основе лучших усилий и не гарантирует устаревшие ответы. Кэш делится на 256 сегментов и по умолчанию не более 10 000 записей, что позволяет каждому сегменту хранить около 39 записей. При заполнении шарда и добавлении новой записи одна из существующих записей выбирается случайным образом для вытеснения. Нет предпочтений для более старых или истекших записей. В результате устаревшая запись может не всегда быть доступной, особенно при большом томе запроса.
  • Мониторинг производительности DNS: после включения LocalDNS отслеживайте производительность DNS приложения с помощью:

    • Метрики производительности приложений.
    • Метрики узлов для обнаружения снижения сетевого давления.
    • Записи в журнале, когда queryLogging установлено на Log.
  • Следуйте принципу наименьших привилегий: при настройке правил пересылки DNS разрешают доступ только к необходимым DNS-серверам и доменам.

  • Тестирование перед развертыванием в рабочей среде: всегда тестируйте конфигурацию LocalDNS в непроизводственных средах перед развертыванием в рабочих кластерах.

  • Используйте инфраструктуру как код (IaC): сохраните файлlocaldnsconfig.json в репозитории инфраструктуры и включите его в шаблоны развертывания AKS.

  • Конфигурация сети для перенаправления TCP: при использовании TCP для перенаправления DNS в VnetDNS убедитесь, что группы безопасности сети (NSG), брандмауэры или сетевые виртуальные устройства (NVAs) не блокируют tcp-трафик между серверами CoreDNS или LocalDNS и виртуальными сетями.

  • Избегайте включения как NodeLocal DNSCache, так и LocalDNS: не рекомендуется включить как вышестоящий узел Kubernetes NodeLocal DNSCache, так и LocalDNS в пуле узлов. Хотя AKS не блокирует эту конфигурацию, весь ТРАФИК DNS направляется через LocalDNS, что может привести к непредвиденному поведению или снижению преимуществ от NodeLocal DNSCache.

Предпосылки

  • Для использования LocalDNS необходимо иметь существующий кластер AKS с Kubernetes версии 1.31 и более поздних версий. Если вам нужен кластер AKS, можно создать его с помощью портала Azure CLI, Azure PowerShell или портала Azure.

  • Для этой статьи требуется Azure CLI версии 2.80.0 и более поздних версий. Если вы используете Azure Cloud Shell, последняя версия уже установлена.

  • LocalDNS поддерживается только в пулах узлов под управлением Azure Linux или Ubuntu 22.04 и более поздней версии.

  • Номер SKU виртуальной машины, используемый для пула узлов, должен иметь по крайней мере 4 виртуальных ЦП (ядра) для поддержки LocalDNS.

  • LocalDNS несовместим с примененными политиками фильтрации полных доменных имен (FQDN) в расширенных сетевых службах контейнеров (ACNS).

Управление localDNS в кластере AKS

LocalDNS настраивается на уровне пула узлов в AKS, то есть вы можете включить или отключить LocalDNS независимо для каждого пула узлов в кластере. Это настраивает поведение разрешения DNS на основе конкретных требований различных рабочих нагрузок или сред. Чтобы включить LocalDNS в пуле узлов, необходимо предоставить файл конфигурации: localdnsconfig.json , определяющий, как LocalDNS должен работать для этого пула узлов.

Замечание

Если вы используете автоматическую подготовку узла (NAP), см. раздел конфигурация LocalDNS для получения инструкций о том, как включить LocalDNS с использованием NAP.

Чтобы включить LocalDNS во время создания пула узлов, используйте следующую команду с пользовательским файлом конфигурации:

az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --localdns-config ./localdnsconfig.json

Чтобы включить LocalDNS в существующем пуле узлов, используйте следующую команду с пользовательским файлом конфигурации:

az aks nodepool update --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --localdns-config ./localdnsconfig.json

Это важно

Включение LocalDNS в пуле узлов инициирует операцию повторного создания образа на всех узлах в этом пуле. Этот процесс может привести к временным прерываниям в выполнении рабочих нагрузок, приводя к простою приложения, если не управлять им должным образом. Перед включением этого параметра следует запланировать возможные прерывания работы служб и убедиться, что приложения настроены на высокий уровень доступности или имеют соответствующие бюджеты нарушений.