- PVSM.RU - https://www.pvsm.ru -
У большинства популярных DNS-провайдеров есть API, с помощью которого можно управлять записями. Это позволяет автоматизировать заказ и продление SSL-сертификатов через DNS01 [1].
В Kubernetes для работы с сертификатами используется cert-manager [2]. Чтобы заказать сертификат в кластере, нужно объявить ресурс центра сертификации — например, ClusterIssuer [3], который используются для подписи CSR (запросов на выпуск сертификата). К сожалению, не для каждого DNS-провайдера существует CusterIssuer. Однако cert-manager позволяет написать свою реализацию. У нас такая потребность возникла в проекте одного из клиентов, который пользовался услугами DNS-провайдера .

Изначально мы вручную заказывали сертификаты через acme.sh [5], складывали их в репозиторий, а затем деплоили в кластер. Нам это надоело, и мы решили автоматизировать процесс. Так появился инструмент ClusterIssuer для REG.RU [6]. Рады представить его Open Source-сообществу!
Для начала убедитесь, что в кластере установлен cert-manager. Если его нет, установите согласно инструкции [7]:
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 — данные для аутентификации [8] в системе
Установите вебхук. Перейдите в каталог репозитория:
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
После этого можно создавать ресурс сертификата.
Создайте файл 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 [9] (или даже pull requests [10]). И, конечно, будем рады новым звездам [11]!
Исходный код проекта распространяется на условиях Apache License 2.0.
Читайте также в нашем блоге:
Автор: Максим
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ssl/379856
Ссылки в тексте:
[1] DNS01: https://cert-manager.io/docs/configuration/acme/dns01/
[2] cert-manager: https://cert-manager.io/
[3] ClusterIssuer: https://cert-manager.io/docs/concepts/issuer/
[4] REG.RU: https://www.reg.ru/?rlink=reflink-717
[5] acme.sh: https://github.com/acmesh-official/acme.sh
[6] ClusterIssuer для REG.RU: https://github.com/flant/clusterissuer-regru
[7] согласно инструкции: https://cert-manager.io/docs/installation/
[8] аутентификации: https://www.reg.ru/reseller/api2doc#common_auth_params
[9] issues: https://github.com/flant/clusterissuer-regru/issues
[10] pull requests: https://github.com/flant/clusterissuer-regru/pulls
[11] новым звездам: https://github.com/flant/clusterissuer-regru/stargazers
[12] «SSL-сертификаты от Let's Encrypt с cert-manager в Kubernetes»: https://habr.com/ru/company/flant/blog/496936/
[13] «Азбука безопасности в Kubernetes: аутентификация, авторизация, аудит»: https://habr.com/ru/company/flant/blog/468679/
[14] «Представляем glaball для управления множеством GitLab-инстансов»: https://habr.com/ru/company/flant/blog/670506/
[15] Источник: https://habr.com/ru/post/693858/?utm_source=habrahabr&utm_medium=rss&utm_campaign=693858
Нажмите здесь для печати.