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

в 8:05, , рубрики: cert-manager, devops, kubernetes, regru, SSL, Блог компании Флант, системное администрирование

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

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

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

Изначально мы вручную заказывали сертификаты через 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://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js