• Русский
  • Настройка NodeLocal DNSCache

    Обзор

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

    Основные возможности

    • Локальное кеширование DNS: локально кеширует ответы DNS на каждом узле, чтобы снизить задержку запросов
    • Повышенная производительность: значительно сокращает время DNS-поиска для приложений

    Важные примечания

    WARNING

    Особенности развертывания:

    1. Режим Kube-OVN Underlay: плагин не поддерживает развертывание в режиме Kube-OVN Underlay. При развертывании это может привести к сбоям DNS-запросов.

    2. Перезапуск kubelet: развертывание этого плагина приведет к перезапуску kubelet.

    3. Требуется перезапуск Pod: после успешного развертывания плагин не влияет на уже запущенные Pod и начинает действовать только для вновь создаваемых Pod. Когда CNI — Kube-OVN, необходимо вручную добавить параметр "--node-local-dns-ip=(IP address of the local DNS cache server)" в kube-ovn-controller.

    4. Конфигурация NetworkPolicy: если в кластере настроен NetworkPolicy, необходимо дополнительно разрешить трафик в обоих направлениях для node CIDR и nodeLocalDNSIP в networkPolicy, чтобы обеспечить корректное взаимодействие.

    5. Обновление кластера путем пересоздания: если кластер обновляется путем пересоздания узлов (re-provisioning), изменения конфигурации kubelet будут потеряны. Чтобы сохранить конфигурацию NodeLocal DNS при обновлениях, необходимо добавить параметр --cluster-dns в kubeletExtraArgs в следующих трех местах шаблона кластера:

      • KubeadmControlPlaneinitConfigurationnodeRegistrationkubeletExtraArgs
      • KubeadmControlPlanejoinConfigurationnodeRegistrationkubeletExtraArgs
      • KubeadmConfigTemplatetemplatespecjoinConfigurationnodeRegistrationkubeletExtraArgs

      Добавьте следующий параметр в каждый из указанных разделов kubeletExtraArgs:

      cluster-dns: "<NodeLocal_DNS_IP>"  # e.g., 169.254.20.10
    WARNING

    Примечания к обновлению до 4.2.x

    При обновлении этого плагина с версий ниже 4.2.0 (за исключением самой 4.2.0) до 4.2.x необходимо выполнить следующие шаги из-за проблем совместимости ResourcePatch:

    Перед обновлением:

    • Запишите значение параметра --node-local-dns-ip из конфигурации ResourcePatch для kube-ovn-controller
    • Удалите ResourcePatch для ресурса deploy/kube-ovn-controller

    После обновления:

    • Вручную добавьте записанное значение параметра --node-local-dns-ip обратно в конфигурацию kube-ovn-controller

    Примечание: эта проблема совместимости устранена в версии 4.3 и выше, поэтому для обновления до 4.3+ ручные действия не требуются.

    Установка

    Установка через Marketplace

    1. Перейдите в Administrator > Marketplace > Cluster Plugins.

    2. Найдите "Alauda Build of NodeLocal DNSCache" в списке плагинов.

    3. Нажмите Install, чтобы открыть страницу конфигурации установки.

    4. Настройте необходимые параметры:

      ПараметрОписаниеПример значения
      IPIP-адрес сервера локального DNS-кеша узла. Для IPv4 рекомендуется использовать адрес из диапазона 169.254.0.0/16, предпочтительно 169.254.20.10. Для IPv6 рекомендуется использовать адрес из диапазона fd00::/8, предпочтительно fd00::10.169.254.20.10
    5. Проверьте примечания к развертыванию и убедитесь, что ваша среда соответствует требованиям.

    6. Нажмите Install, чтобы завершить установку.

    7. Дождитесь, пока статус плагина изменится на "Ready".

    Принцип работы

    Архитектура

    Pod → NodeLocal DNSCache → [Cache Hit] → Pod
    
        [Cache Miss] → CoreDNS → Response → Cache & Pod

    Конфигурация

    Настройка Network Policy

    Важно: если в вашем кластере включен NetworkPolicy, необходимо настроить корректные правила, чтобы разрешить DNS-трафик к NodeLocal DNSCache. Без этих правил Pod могут не иметь возможности разрешать DNS-запросы.

    При использовании NetworkPolicy убедитесь, что разрешен следующий DNS-трафик:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-dns-cache
    spec:
      podSelector: {}
      policyTypes:
        - Ingress
        - Egress
      ingress:
        - from:
            - ipBlock:
                cidr: 169.254.20.10/32 # NodeLocal DNS IP address
          ports:
            - protocol: UDP
              port: 53
            - protocol: TCP
              port: 53
      egress:
        - to:
            - ipBlock:
                cidr: 169.254.20.10/32 # NodeLocal DNS IP address
          ports:
            - protocol: UDP
              port: 53
            - protocol: TCP
              port: 53