Промежуточный и ACME сертификаты

Прежде чем перейти к добавлению сертификата в кластер, ознакомьтесь с порядком действий на странице Как добавить сертификат.

Сценарий добавления в кластер

  1. Создать сертификат.
  2. Разместить созданный сертификат в секрете неймспейса cert-manager.
  3. Настроить ClusterIssuer.
  4. Обновить корневой сертификат (CA-bundle).
  5. Обновить настройки сертификатов в системных сервисах.

Чтобы сгенерировать промежуточный или ACME сертификат к существующей инфраструктуре, предлагается воспользоваться Step. Step представляет центр сертификации (CA) для автоматизированного управления сертификатами X.509.

Обратите внимание! Если в кластер добавлен сертификат ACME, необходимо мониторить работу ACME-сервера. В случае сбоя на сервере, кластеры с сертификатами ACME будут недоступны.

Создание сертификата

Промежуточный сертификат

Если у вас есть промежуточный сертификат центра сертификации (Intermediate CA), подписанный корпоративным центром сертификации (Certificate Authority, CA), то перейдите к шагу 3 инструкции.

  1. Когда установлен Step, сформируйте запрос на подпись сертификата (CSR) и сгенерируйте ключ промежуточного сертификата, использовав команду step certificate create.
Команда
step certificate create "Intermediate CA Name" intermediate-ca.csr intermediate-ca.key --csr
  1. Получите подписанный промежуточный сертификат (intermediate-ca.crt) в формате PEM, отправив сформированный запрос intermediate-ca.csr на подпись администратору удостоверяющего корпоративного центра сертификации (Certificate Authority, CA).
  2. Когда получен подписанный промежуточный сертификат (intermediate-ca.crt), создайте цепочку сертификатов (промежуточный сертификат CA -> корневой CA) в формате PEM, например, с именем intermediate-ca-chain.crt.
Команда
cat intermediate-ca.crt root-ca.crt >intermediate-ca-chain.crt

Где intermediate-ca.crt - промежуточный сертификат, root-ca.crt- корпоративный корневой сертификат CA.

Далее необходимо:

  • создать секрет corp-intermediate-ca, содержащий цепочку сертификатов и ключ;
  • указать в ClusterIssuer oauth-ca-issuer данные созданного секрета.
  1. В кластере перейдите в неймcпейс cert-manager, откройте страницу Secrets раздела Хранилище и создайте секрет с именем corp-intermediate-ca, выберите тип kubernetes.io/tls.
Скриншот

secretscertmanager1 secretcorpinterca

  1. Добавьте intermediate-ca-chain.crtи intermediate-ca.key в ключи Secret corp-intermediate-ca.
Скриншот

secretkeyadd secretkeys secrettls

Сертификат ACME

Сертификат ACME в Kubernetes автоматизирует процесс получения SSL-сертификатов. Чтобы настроить автоматическую выдачу сертификатов через ACME сервер необходимо:

  • получить корневой CA сертификат, который использует ACME сервер, и закодировать его данные;
  • добавить в кластер ClusterIssuer, содержащий корневой CA сертификат от ACME;

Когда в вашей организации есть ACME сервер, запросите корневой CA сертификат от ACME у администратора сервера и перейдите к разделу инструкции Установка корневого СА сертификата ACME в кластер.

Если ACME сервера нет, вы можете установить step-ca сервер, чтобы получить корневой СА сертификат. Использование в платформе корневого СА сертификата от step-ca обеспечит доверие всем сертификатам, которые будут выписаны, полученным сертификатом от step-ca.

Корневой СА сертификат от step-ca

Установить step-ca вы можете несколькими способами. В инструкции приведен пример инсталляции с помощью docker-контейнера. При необходимости выберите другой способ инсталляции из официальной документации.

  1. Создайте директорию, в которой будут храниться конфигурация и сертификаты step-ca.
Команда
mkdir data
chown 1000:1000 data
  1. Создайте YAML-файл docker-compose.yaml.
Пример

В параметре DOCKER_STEPCA_INIT_DNS_NAMES укажите DNS имя, по которому отвечает сервер.

services:
  step-ca:
    container_name: step-ca
    image: smallstep/step-ca:0.27.2
    restart: always
    ports:
        - "9443:9000"
    environment:
       DOCKER_STEPCA_INIT_DNS_NAMES: issuer.ip-XX-XX-XXX-XX.shturval.link # the hostname(s) or IPs that the CA will accept requests on
       DOCKER_STEPCA_INIT_NAME: shturval # the name of your CA—this will be the issuer of your CA certificates
       DOCKER_STEPCA_INIT_REMOTE_MANAGEMENT: true # enable remote provisioner management
       DOCKER_STEPCA_INIT_ACME: true # also create an initial ACME provisioner for the CA
       # DOCKER_STEPCA_INIT_PROVISIONER_NAME: admin # a label for the initial admin (JWK) provisioner.
       # DOCKER_STEPCA_INIT_SSH: "" # set this to a non-empty value to enable SSH certificate support
       # DOCKER_STEPCA_INIT_PASSWORD_FILE: "" #  the location of a password file to be used for both private keys and the default CA provisioner. 
       # DOCKER_STEPCA_INIT_PASSWORD: shturval #Normally, CA passwords will be generated for you. With this option, you can specify a password for the encrypted CA keys and the default CA provisioner.
    volumes:
        - ./data:/home/step # 1000:1000
    logging:
      driver: "json-file"
      options:
        max-size: "200m"
  1. Запустите step-ca сервер.
Команда
# Запуск step-ca сервера
docker compose up -d
# Проверка запуска
docker compose ps

Если docker (контейнер) находится в состоянии UP, то сервер step-ca готов выписывать сертификаты.

  1. Когда step-ca развернут, то получите корневой СА сертификат сервера step-ca.
Команда
cat data/certs/root_ca.crt 
Пример ответа В ответе содержится корневой CA сертификат
-----BEGIN CERTIFICATE-----
MIIBoDCCAUagAwIBAgIRAJV9+1S0q+d9+V/UmBXhR+4wCgYIKoZIzj0EAwIwLjER
MA8GA1UEChMIc2h0dXJ2YWwxGTAXBgNVBAMTEHNodHVydmFsIFJvb3QgQ0EwHhcN
MjQxMTIyMTUyMzQ5WhcNMzQxMTIwMTUyMzQ5WjAuMREwDwYDVQQKEwhzaHR1cnZh
bDEZMBcGA1UEAxMQc2h0dXJ2YWwgUm9vdCBDQTBZMBMGByqGSM49AgEGCCqGSM49
AwEHA0IABNhNCtkBTfs+HXA6h1Ty8Qlg+zKQNu
-----END CERTIFICATE-----

Настройка ClusterIssuer

Промежуточный сертификат

В кластере перейдите в раздел “Администрирование” на страницу ClusterIssuers и создайте объект, указав корпоративный тип сертификата и имя секрета corp-intermediate-ca:

Пример ClusterIssuer

corpcaissuer

Сертификат ACME

Обратите внимание! Если устанавливаете сертификат в кластер управления, выполните все действия, описанные в инструкции. Когда устанавливаете в клиентский кластер, выполните п. 1-2, нижеперечисленных шагов инструкции.

  1. В кластере перейдите на страницу ClusterIssuers раздела Администрирование. Создайте ClusterIssuer, например, с именем corp-acme.
Скриншот

clusterissuers1 addclusterissuer

  1. В блоке Спецификация объекта:
  • выберите тип ACME;
  • заполните адрес сервера ACME;
  • в CA Bundle загрузите корневой CA сертификат от ACME сервера;
  • в блоке Ключ учетной записи укажите имя секрета, в котором будет сохранен автоматически ключ;
  • добавьте solver с типом http01 и nginx в ClassIngress.
Пример corp-acme
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: corp-acme
spec:
  acme:
    caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJvRENDQVVhZ0F3SUJBZ0lSQUpWOSsxUzBxK2Q5K1YvVW1CWGhSKzR3Q2dZSUtvWkl6ajBFQXdJd0xqRVIKTUE4R0ExVUVDaE1JYzJoMGRYSjJZV3d4R1RBWEJnTlZCQU1URUhOb2RIVnlkbUZzSUZKdmIzUWdRMEV3SGhjTgpNalF4TVRJeU1UVXlNelE1V2hjTk16UXhNVEl3TVRVeU16UTVXakF1TVJFd0R3WURWUVFLRXdoemFIUjFjblpoCmJERVpNQmNHQTFVRUF4TVFjMmgwZFhKM
    email: test-cluster@shturval.tech
    privateKeySecretRef:
      name: corp-acme
    server: https://issuer.ip-XX-XX-XX-XX.shturval.link:9443/acme/acme/directory
    solvers:
    - http01:
        ingress:
          class: nginx
Скриншот

clusterissueradd

Обновление корневого сертификата

В кластере перейдите в неймспейс cert-manager. В разделе “Хранилище” найдите Configmap с именем root-ca:

  • Если Configmap с именем root-ca есть, перейдите на страницу просмотра и в блоке Текстовые ключи замените значение ключа ca.crt данными сертификата (корпоративного или ACME acme-ca.crt).
  • Если такого Configmap нет, то создайте Configmap с именем root-ca. Добавьте ключ в блоке Текстовые ключи, в значении укажите данные сертификата (корпоративного или ACME acme-ca.crt).
Скриншот

configmapcacrt1

×