Представляем ClusterIssuer для автоматического выпуска SSL-сертификатов REG.RU в Kubernetes

от автора

У большинства популярных DNS-провайдеров есть API, с помощью которого можно управлять записями. Это позволяет автоматизировать заказ и продление SSL-сертификатов через DNS01.

В Kubernetes для работы с сертификатами используется cert-manager. Чтобы заказать сертификат в кластере, нужно объявить ресурс центра сертификации — например, ClusterIssuer, который используются для подписи CSR (запросов на выпуск сертификата). К сожалению, не для каждого DNS-провайдера существует CusterIssuer. Однако cert-manager позволяет написать свою реализацию. У нас такая потребность возникла в проекте одного из клиентов, который пользовался услугами DNS-провайдера REG.RU.

Изначально мы вручную заказывали сертификаты через acme.sh, складывали их в репозиторий, а затем деплоили в кластер. Нам это надоело, и мы решили автоматизировать процесс. Так появился инструмент ClusterIssuer для REG.RU. Рады представить его Open Source-сообществу!

Инструкция по использованию

Для начала убедитесь, что в кластере установлен cert-manager. Если его нет, установите согласно инструкции:

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml

Затем клонируйте репозиторий с ClusterIssuer:

git clone https://github.com/flant/clusterissuer-regru.git

Отредактируйте в нём файл values.yaml, заполнив поля zone, image, user и password. Например:

issuer:   zone: my-domain-test.ru   image: ghcr.io/flant/cluster-issuer-regru:1.0.0   user: my_user@example.com   password: my_password

где user и password — данные для аутентификации в системе REG.RU.

Установите вебхук. Перейдите в каталог репозитория:

cd clusterissuer-regru

Выполните команду:

helm install -n cert-manager regru-webhook ./helm

Создайте файл ClusterIssuer.yaml с таким содержимым (но не забудьте заменить e-mail на свой!):

apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata:   name: regru-dns spec:   acme:     # Email address used for ACME registration. REPLACE THIS WITH YOUR EMAIL!     email: mail@example.com     # The ACME server URL     server: https://acme-v02.api.letsencrypt.org/directory     privateKeySecretRef:       name: cert-manager-letsencrypt-private-key     solvers:       - dns01:           webhook:             config:               regruPasswordSecretRef:                 name: regru-password                 key: REGRU_PASSWORD             groupName: {{ .Values.groupName.name }}             solverName: regru-dns

Сохраните файл и выполните команду:

kubectl create -f ClusterIssuer.yaml

После этого можно создавать ресурс сертификата.

Пример: wildcard certificate

Создайте файл certificate.yaml с таким содержимым:

apiVersion: cert-manager.io/v1 kind: Certificate metadata:   name: changeme   namespace: changeme spec:   secretName: changeme   issuerRef:     name: regru-dns     kind: ClusterIssuer   dnsNames:     - *.my-domain-test.ru

Выполните команду:

kubectl create -f certificate.yaml

Выпуск сертификата может занять некоторое время (зависит от скорости распространения записи у провайдера по его серверам). После этого сертификат сразу же будет готов к использованию в вашем приложении.

Заключение

Если у вас есть какие-то идеи или пожелания по добавлению новых функций, приносите их в issues (или даже pull requests). И, конечно, будем рады новым звездам!

Исходный код проекта распространяется на условиях Apache License 2.0.

P.S.

Читайте также в нашем блоге:


ссылка на оригинал статьи https://habr.com/ru/company/flant/blog/693858/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *