---
title: "Аддон ExternalDNS для Kubernetes"
description: "Аддон ExternalDNS для Kubernetes. Установка, настройка, примеры использования. Документация и инструкции по работе с облачными сервисами Timeweb Cloud."
---

# ExternalDNS

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

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

## Установка

Для установки ExternalDNS откройте панель управления кластером, перейдите во вкладку «Дополнения», нажмите на три точки рядом с ExternalDNS и нажмите «Установить».

![Selection 182](https://content.timeweb.com/assets/ec06f496-6887-4d0d-a065-de4908ab92c3.png?width=1028&height=860)

После установки дождитесь обновления кластера и убедитесь, что ресурсы ExternalDNS имеют статус «Running»:

```shell
kubectl get pods -n external-dns
```

## Использование ExternalDNS

Перед использованием ExternalDNS необходимо вручную создать домены в панели управления, чтобы ExternalDNS мог управлять их записями.

#### Использование аннотаций в Ingress

ExternalDNS управляет DNS-записями на основе аннотаций в манифестах. Например, для привязки доменного имени к Ingress-ресурсу можно использовать следующий манифест:

```yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  namespace: ingress-example
  annotations:
    external-dns.alpha.kubernetes.io/hostname: "app.example.com"
    external-dns.alpha.kubernetes.io/ttl: "1200"
spec:
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-app
            port:
              number: 80
```

Описание аннотаций:

-   `external-dns.alpha.kubernetes.io/hostname` — задает доменное имя, которое будет связано с этим ресурсом.
    
-   `external-dns.alpha.kubernetes.io/ttl` — задает TTL DNS-записи в секундах.
    

Этот вариант подойдет, если Ingress-контроллер развернут на всех узлах. Однако у него есть недостатки:

-   Если Ingress-контроллер работает не на всех узлах, часть трафика может отправляться на недоступные IP-адреса.
    
-   Kubernetes может переместить поды на другие узлы, изменив IP-адреса, что приведет к недоступности сервиса.
    
-   DNS-балансировка не учитывает доступность узлов, из-за чего могут возникнуть потери трафика.
    

#### Использование LoadBalancer (рекомендуемый вариант)

Один из удобных способов работы с ExternalDNS — использовать его с [балансировщиком нагрузки](https://timeweb.cloud/docs/k8s/network/kubernetes-load-balancer). В этом случае сервис получает фиксированный внешний IP-адрес и балансирует трафик между подами. ExternalDNS автоматически создаст DNS-запись с этим IP-адресом. Пример манифеста:

```yml
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  annotations:
    external-dns.alpha.kubernetes.io/hostname: "app.example.com"
    external-dns.alpha.kubernetes.io/ttl: "1200"
spec:
  selector:
    app.kubernetes.io/name: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 443
  type: LoadBalancer
```

В этом примере балансировщик направляет трафик в поды с `app.kubernetes.io/name: ingress-nginx`, где работает Ingress-контроллер.

Использование ExternalDNS с балансировщиком нагрузки упрощает управление DNS. Вместо того чтобы следить за изменением IP-адресов на разных узлах, достаточно привязать доменное имя к одному фиксированному IP. Это снижает риски недоступности из-за смены узлов, а балансировка нагрузки между подами обеспечивает стабильную работу сервиса. При изменении конфигурации кластера ExternalDNS автоматически обновит DNS-запись, исключая необходимость ручного вмешательства.
