Cluster Issuer

Cluster Issuers - ресурсы Kubernetes, представляющие центры сертификации в кластере, которые могут генерировать подлинные сертификаты, выполняя запросы на подпись сертификатов.

На странице ClusterIssuers можно создать, отредактировать, удалить или просмотреть ранее созданные менеджеры сертификатов (ClusterIssuers).

Чтобы добавить Менеджер сертификатов нажмите на кнопку + Добавить ClusterIssuers.

В открывшемся окне необходимо заполнить:

  • Имя
  • Спецификацию объекта. Из выпадающего списка выберите тип. На текущий момент доступен ACME и Vault. При необходимости задайте лейблы.

Просмотр и изменение Cluster Issuers

Созданные Cluster Issuers отображаются в виде списка на странице ClusterIssuers в разделе Администрирование кластера.

Для просмотра нажмите на название Cluster Issuer в списке.

При необходимости изменения Cluster Issuer обновите сведения спецификации объекта и нажмите Сохранить.

Также Cluster Issuer можно изменить с помощью YAML манифеста. Перейдите на вкладку Манифест. После изменения манифеста выполните проверку. Результат проверки будет доступен в правой части экрана. Раскройте блок результата проверки, чтобы увидеть полный манифест. Если валидация формата манифеста Cluster Issuer не пройдена, недоступна проверка манифеста.

Сохраните изменения, внесенные в манифест. Несохраненные данные не будут применены.

Настройка ACME

Для настройки вы должны иметь учетную запись в ACME (Automated Certificate Management Environment).

Заполните сведения о сервере ACME. Например: https://acme-v02.api.letsencrypt.org/directory

Введите email, который связан с учетной записью ACME. Определите, нужно ли пропускать проверку TLS.

Если пропустить проверку TLS, то запросы к серверу ACME не будут подтверждены сертификатом TLS.(т.е. будут разрешены небезопасные соединения). Включайте этот параметр только в средах разработки.

В части Ключ учетной записи ACME необходимо ввести имя и ключ Secret.

Обозначьте solvers: выберите тип солвера: HTTP01 или DNS01.

  • Для HTTP01 заполните поле ClassIngress и нажмите кнопку Добавить.

Может быть использован, если:

  • Ваш провайдер не блокирует порт 80;
  • Ingress контроллер доступен из интернета по 80 порту;
  • Вы не используете сертификаты с подстановкой (wildcard-сертификаты).

Введите класс Ingress (ClassIngress), который должен быть использован для решения Challenge от Let’s Encrypt. Посмотреть, какие ClassIngress есть в кластере можно с помощью команды:

kubectl get ingressclass -A

Если не указать ClassIngress, будет использован дефолтный класс.

  • Для DNS01/acmeDNS заполните значение хоста. В AccountSecretRef впишите имя и ключ, затем нажмите кнопку Добавить.

Может быть использован, если:

  • Вы используете сертификаты с подстановкой (wildcard-сертификаты);
  • Есть несколько web-серверов.

Например:

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: example-issuer
spec:
  acme:
    solvers:
    - dns01:
        acmeDNS:
          host: https://acme.example.com
          accountSecretRef:
            name: acme-dns
            key: acmedns.json
  • Для DNS01/rfc2136 заполните значение Nameserver и TsigAlgorithm. В TsigSecretSecretRef впишите имя и ключ, затем нажмите кнопку Добавить. Может быть использован, если у вас есть:
  • Сервер DNS, настроенный с поддержкой протокола RFC2136;
  • Доступ к данным (ключи TSIG) для авторизации обновлений DNS.

Например:

rfc2136:
         nameserver: 1.2.3.4:53
         tsigKeyName: example-com-secret
         tsigAlgorithm: HMACSHA512
         tsigSecretSecretRef:
           name: tsig-secret
           key: tsig-secret-key
  • tsigKeyName - имя ключа вашей TSIG аутентификации (например, example-key).

  • tsigAlgorithm - алгоритм, используемый для создания ключа TSIG (например, hmac-md5).

  • tsigSecretSecretRef.name - секрет, содержащий секретный ключ для TSIG аутентификации.

  • Для DNS01/webhook заполните данные Cert-Manager, подставляя в поля значение GroupName, SolverName и Config, затем нажмите кнопку Добавить.

Например:

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: example-issuer
spec:
  acme:
   ...
    solvers:
    - dns01:
        webhook:
          groupName: $WEBHOOK_GROUP_NAME
          solverName: $WEBHOOK_SOLVER_NAME
          config:
            ...
            <webhook-specific-configuration>

Подробнее о настройке TLS.

Настройка Vault

Для настройки вы должны иметь учетную запись в vault. Согласно официальной документации Cert Manager рекомендуемый способ интеграции для текущей версии - ServiceAccountRef. Поэтому для интеграции выберите ServiceAccount из выпадающего списка. ServiceAccount должен быть создан в неймспейсе cert-manager и иметь в неймспейсе cert-manager роль vault-issuer, соответствующую правам:

rules:
  - apiGroups: ['']
    resources: ['serviceaccounts/token']
    resourceNames: ['vault-issuer']
    verbs: ['create']

После выбора ServiceAccount в поле mountPath заполните путь монтирования Vault для использования при аутентификации в Vault. Пример: /v1/auth/kubernetes.

В поле Роль пропишите роль пользователя на стороне Vault, например: my-app-1.

В поле Path пропишите путь к монтируемому пути конечной точки подписи PKI-backend Vault, например: my_pki_mount/sign/my-role-name.

В поле Сервер пропишите адрес подключения к серверу Vault, например: https://vault.local.

После завершения настройки менеджера сертификатов нажмите кнопку Сохранить.

Чтобы удалить элемент, нажмите в строке элемента.