Установка External DNS в Marketplace k8s
Данный инструмент предназначен для автоматического назначения dns имени для сервиса/ингресса.
Можно конечно вручную назначать DNS имена для ip адресов, но в случае их изменения придётся менять их опять вручную. Т.е. будет полно ручных операций. Вот здесь и поможет ExternalDNS, который будет автоматически создавать А записи для сервисов/ингрессов, для которых прописаны нужные аннотации.
Регистрируем домен и переносим его на обслуживание в Cloud DNS. Для этого у dns регистратора вместо его NS серверов прописываются NS сервера Yandex Cloud.
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
- Namespace (или создаём новый);
- Имя приложения;
- Ключ SA (если сгенерирован заранее, то используем его). Можно заранее сгенерировать по инструкции: https://cloud.yandex.ru/docs/iam/operations/sa/create-access-key
- Название фолдера, в котором будет находиться.
Создадим под, сервис с заранее зарезервированным адресом и настроим автоматическое создание 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