ExternalDNS — инструмент для автоматического управления DNS-записями на основе ресурсов Kubernetes. Он обновляет DNS-записи в соответствии с аннотациями, указанными в манифестах сервисов и ingress-ресурсов. ExternalDNS помогает упростить управление доменными именами для сервисов в кластере Kubernetes, устраняя необходимость вручную изменять записи в панели управления DNS.
Установка
Для установки ExternalDNS откройте панель управления кластером, перейдите во вкладку «Дополнения», нажмите на три точки рядом с ExternalDNS и нажмите «Установить».

После установки дождитесь обновления кластера и убедитесь, что ресурсы ExternalDNS имеют статус «Running»:
Использование ExternalDNS
Перед использованием ExternalDNS необходимо вручную создать домены в панели управления, чтобы ExternalDNS мог управлять их записями.
Использование аннотаций в Ingress
ExternalDNS управляет DNS-записями на основе аннотаций в манифестах. Например, для привязки доменного имени к Ingress-ресурсу можно использовать следующий манифест:
Описание аннотаций:
-
external-dns.alpha.kubernetes.io/hostname— задает доменное имя, которое будет связано с этим ресурсом. -
external-dns.alpha.kubernetes.io/ttl— задает TTL DNS-записи в секундах.
Этот вариант подойдет, если Ingress-контроллер развернут на всех узлах. Однако у него есть недостатки:
-
Если Ingress-контроллер работает не на всех узлах, часть трафика может отправляться на недоступные IP-адреса.
-
Kubernetes может переместить поды на другие узлы, изменив IP-адреса, что приведет к недоступности сервиса.
-
DNS-балансировка не учитывает доступность узлов, из-за чего могут возникнуть потери трафика.
Использование LoadBalancer (рекомендуемый вариант)
Один из удобных способов работы с ExternalDNS — использовать его с балансировщиком нагрузки. В этом случае сервис получает фиксированный внешний IP-адрес и балансирует трафик между подами. ExternalDNS автоматически создаст DNS-запись с этим IP-адресом. Пример манифеста:
В этом примере балансировщик направляет трафик в поды с app.kubernetes.io/name: ingress-nginx, где работает Ingress-контроллер.
Использование ExternalDNS с балансировщиком нагрузки упрощает управление DNS. Вместо того чтобы следить за изменением IP-адресов на разных узлах, достаточно привязать доменное имя к одному фиксированному IP. Это снижает риски недоступности из-за смены узлов, а балансировка нагрузки между подами обеспечивает стабильную работу сервиса. При изменении конфигурации кластера ExternalDNS автоматически обновит DNS-запись, исключая необходимость ручного вмешательства.