Yandex Marketplace
June 16, 2023

Установка External DNS в Marketplace k8s

Данный инструмент предназначен для автоматического назначения dns имени для сервиса/ингресса.

Можно конечно вручную назначать DNS имена для ip адресов, но в случае их изменения придётся менять их опять вручную. Т.е. будет полно ручных операций. Вот здесь и поможет ExternalDNS, который будет автоматически создавать А записи для сервисов/ингрессов, для которых прописаны нужные аннотации.

Пример использования.

Регистрируем домен и переносим его на обслуживание в Cloud DNS. Для этого у dns регистратора вместо его NS серверов прописываются NS сервера Yandex Cloud.

  • ns1.yandexcloud.net.
  • ns2.yandexcloud.net.

Создаём DNS зону.

export FOLDER=$(yc config get folder-id)
yc dns zone create \
--folder-id $FOLDER \
--name k8s-external-dns \
--description "Domain for test external dns" \
--labels dns=external \
--zone cameda.tk. \
--public-visibility \
--async

Резервируем адрес.

# Можно и не регистрировать заранее. Я здесь это делаю для своего удобства.
export ZONE=ru-central1-c
yc vpc address create \
   --folder-id $FOLDER \
   --name nlb \
   --description "external ip test" \
   --external-ipv4 zone=$ZONE \
   --labels prod=external-ip-service \
   --async   

Установка в Marketplace.

При установке указываем:

  1. Namespace (или создаём новый);
  2. Имя приложения;
  3. Ключ SA (если сгенерирован заранее, то используем его). Можно заранее сгенерировать по инструкции: https://cloud.yandex.ru/docs/iam/operations/sa/create-access-key
  4. Название фолдера, в котором будет находиться.

Создадим под, сервис с заранее зарезервированным адресом и настроим автоматическое создание A записи.

kubectl run nginx --image=nginx --port=80
# ip адрес используем тот, что зарезервировали ранее.
kubectl expose pod nginx --port=80 --target-port=80 --type=LoadBalancer --load-balancer-ip='51.250.43.139'

kubectl annotate service nginx "external-dns.alpha.kubernetes.io/hostname=cameda.tk"
kubectl annotate service nginx "external-dns.alpha.kubernetes.io/ttl=10"

После этого в Cloud DNS в зоне cameda.tk будет создана A запись, ведущая на ip LoadBalancer. Если эту запись удалить, то через секунд 10 она вновь восстановится автоматически.

У нас сейчас используется довольно старая, но рабочая, версия - 0.5.0
Новая версия, на момент написания статьи, - 0.13.5

Полезные ссылки.

Официальный сайт проекта: https://github.com/kubernetes-sigs/external-dns

Список параметров чарта:
https://github.com/kubernetes-sigs/external-dns/tree/master/charts/external-dns

FAQ: https://github.com/kubernetes-sigs/external-dns/blob/master/docs/faq.md