<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Публичное облако на базе VMware с управлением через vCloud Director
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

ExternalDNS

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

Установка

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

Selection 182

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

kubectl get pods -n external-dns

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

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

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

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

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 — использовать его с балансировщиком нагрузки. В этом случае сервис получает фиксированный внешний IP-адрес и балансирует трафик между подами. ExternalDNS автоматически создаст DNS-запись с этим IP-адресом. Пример манифеста:

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

Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев