Как добавить в кластер промежуточный и ACME сертификаты
В развернутом кластере Комплекса можно:
- заменить сертификат, установленный в процессе инсталляции кластера на промежуточный;
- установить сертификат ACME (Automatic Certificate Management Environment).
Чтобы сгенерировать промежуточный или ACME-сертификат к существующей инфраструктуре предлагается воспользоваться Step. Step представляет центр сертификации (CA) для автоматизированного управления сертификатами X.509.
Важно ‒ Если в кластере установлен сертификат ACME, необходимо мониторить работу ACME-сервера. В случае сбоя на сервере кластеры с сертификатами ACME будут недоступны.
Сценарий установки сертификата
Сценарий замены сертификата:
- сделать бэкап существующей конфигурации;
- создать сертификат и разместить его в секрете неймспейса cert-manager;
- настроить ClusterIssuer;
- обновить корневой сертификат (CA-bundle);
- обновить настройки сертификатов в системных сервисах.
Создание бэкапа
В кластере нужно перейти в раздел "Резервное копирование и восстановление". Следует убедиться, что у вас подключено S3-хранилище или подключите его.
Далее необходимо создать резервную копию, включив в нее:
- Не неймспейсные ресурсы:
- shturvalserviceconfigs;
- Неймспейсы:
- для любого типа кластера:
- shturval-cd (при использовании ARGO CD);
- cert-manager;
- для кластера управления:
- shturval-backend;
- shturval-frontend;
- shturval-logging (при использовании OpenSearch);
- shturval-dashboards (при использовании Grafana);
- неймспейсные ресурсы:
- secrets;
- configmaps;
- clusterissuers.
Создание сертификата
В кластере нужно перейти в неймспейс cert-manager и в разделе "Хранилище" удалить Configmap с именем "root-ca".
Промежуточный сертификат
Если у вас есть промежуточный сертификат центра сертификации (Intermediate CA), подписанный корпоративным центром сертификации (Certificate Authority, CA), то следует перейти сразу к шагу 3) инструкции:
- после установки Step сформировать запрос на подпись сертификата (CSR) и сгенерировать ключ промежуточного сертификата:
step certificate create "Intermediate CA Name" intermediate-ca.csr intermediate-ca.key --csr
- получить подписанный промежуточный сертификат (
intermediate-ca.crt) в формате PEM, отправив сформированный запросintermediate-ca.csrна подпись администратору удостоверяющего корпоративного центра сертификации (Certificate Authority, CA); - после получения подписанного промежуточного сертификата (
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 данные созданного секрета;
- в кластере перейти в неймcпейс cert-manager, открыть страницу "Secrets" раздела "Хранилище" (рисунок 74), создать секрет с именем "corp-intermediate-ca", выбрать тип "kubernetes.io/tls" (рисунок 75).

Рисунок 74 ‒ Страница "Secrets"

Рисунок 75 ‒ Создание секрета
- добавить
intermediate-ca-chain.crtиintermediate-ca.keyв ключи Secret corp-intermediate-ca (рисунки 76, 77, 78).

Рисунок 76 ‒ Добавление ключей. Шаг 1

Рисунок 77 ‒ Добавление ключей. Шаг 2

Рисунок 78 ‒ Добавление ключей. Шаг 3
Сертификат ACME
Сертификат ACME в Kubernetes автоматизирует процесс получения SSL-сертификатов. Чтобы настроить автоматическую выдачу сертификатов через ACME-сервер необходимо:
- получить корневой CA-сертификат, который использует ACME-сервер, и закодировать его данные;
- добавить в кластер ClusterIssuer, содержащий корневой CA-сертификат от ACME;
Если в вашей организации есть ACME-сервер, следует запросить корневой CA-сертификат от ACME у администратора сервера и перейти к разделу "Установка корневого СА-сертификата ACME в кластер" Руководства.
Если ACME-сервера нет, можно установить step-ca-сервер, чтобы получить корневой СА-сертификат. Использование в Комплексе корневого СА-сертификата от step-ca обеспечит доверие всем сертификатам, которые будут выписаны, полученным сертификатом от step-ca.
Корневой СА-сертификат от step-ca можно установить несколькими способами. В этой инструкции приведен пример инсталляции с помощью docker-контейнера. При необходимости можно выбрать другой способ инсталляции из официальной документации.
Для установки корневого СА-сертификата от step-ca нужно:
- создать директорию, в которой будут храниться конфигурация и сертификаты step-ca:
mkdir data
chown 1000:1000 data
- создать 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"
- запустить step-ca-сервер:
Запуск step-ca сервера
docker compose up -d
Проверка запуска
docker compose ps
Если docker (контейнер) находится в состоянии UP, то сервер step-ca готов выписывать сертификаты.
- после развертывания 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
Промежуточный сертификат
В кластере нужно перейти в раздел "Администрирование" на страницу загрузки манифестов и применить манифест ClusterIssuer:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: oauth-ca-issuer
spec:
ca:
secretName: corp-intermediate-ca
Сертификат ACME
Важно ‒ Если устанавливается сертификат в кластер управления, необходимо выполнить все действия, описанные в инструкции. При установке в клиентский кластер требуется выполнить шаги 1 и 2 из инструкции ниже:
- в кластере перейти на страницу "ClusterIssuers" раздела "Администрирование". Создать
ClusterIssuer, например, с именем "corp-acme" (рисунки 79‒80).

Рисунок 79 ‒ Создание ClusterIssuer

Рисунок 80 ‒ Страница "ClusterIssuers"
- в блоке "Спецификация объекта" (рисунок 81):
- выбрать тип 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

Рисунок 81 ‒ Блок "Спецификация объекта"
Обновление корневого сертификата
На странице "Configmaps" раздела "Хранилище" нужно создать Configmap root-ca, добавить ключ "Configmap" в блоке "Текстовые ключи", в значении указать данные сертификата (корпоративного или ACME acme-ca.crt) (рисунок 82).

Рисунок 82 ‒ Добавление Configmap
Добавление сертификатов в системные сервисы
Если требуется изменить сертификаты в кластере управления, обновление системных компонентов "Модуль программного управления Комплексом" (shturval-backend) и "Модуль графического управления Комплексом" (shturval-frontend) требуется всегда.
Если в кластере работают сервисы, такие как OpenSearch, ArgoCD, Grafana, то при добавлении промежуточного или ACME-сертификата в кластер требуется настройка customvalues в SSC сервисов. Это обеспечит корректную работу авторизации при переходе в сервисы из кластера.
Для кластера управления
Backend:
- В боковом меню открыть раздел "Сервисы и репозитории" и перейти на страницу "Установленные сервисы", найти "Модуль программного управления Комплексом" (shturval-backend), перейти к управлению и в блоке "Спецификация сервиса":
- прописать в
backend_tls_secretnameиauth_tls_secretnameимена секретов для backend и auth; - указать в параметре "cluster_issuer_name" имя созданного
ClusterIssuer.
Пример customvalues (описание параметров ‒ в таблице 13):
tls:
enabled: true
backend_tls_secretname: <ваше значение параметра>
auth_tls_secretname: <ваше значение параметра>
cluster_issuer_name: <ваше значение параметра>
- сохранить изменения.
Frontend:
- В боковом меню открыть раздел "Сервисы и репозитории", перейти на страницу "Установленные сервисы", найти "Модуль графического управления Комплексом" (shturval-frontend), перейти к управлению и в блоке "Спецификация сервиса":
- прописать в параметрах "docs_tls_secretname" и "front_tls_secretname" имена секретов;
- указать в параметре "cluster_issuer_name" имя созданного
ClusterIssuer.
Пример customvalues (описание параметров ‒ в таблице 14):
tls:
enabled: true
front_tls_secretname: <ваше значение параметра>
docs_tls_secretname: <ваше значение параметра>
cluster_issuer_name: <ваше значение параметра>
- сохранить изменения.
Grafana:
- В SSC shturval-dashboards добавить:
- параметр "cert-manager.io/cluster-issuer" и указать имя созданного
ClusterIssuer; - параметр "secretName" и указать имя Secret, в котором будет сохранен сертификат для Grafana.
Команда:
kubectl edit ssc/shturval-dashboards
Изменения customvalues (описание параметров ‒ в таблице 15):
ingress:
annotations:
cert-manager.io/cluster-issuer: <ваше значение параметра>
enabled: true
tls:
‒ hosts:
‒ <ваше значение параметра>
secretName: <ваше значение параметра>
OpenSearch:
- В SSC shturval-logs-operator добавить:
- блок getcert с параметром "enable: false";
- в Ingress параметр "cert-manager.io/cluster-issuer" с именем созданного
ClusterIssuer; - в параметрах "secretName" имена Secrets, в которых будут сохранены сертификаты для кластера и дашборда OpenSearch.
Команда:
kubectl edit ssc/shturval-logs-operator
Пример customvalues (описание параметров ‒ в таблице 16):
getcert:
enable: false
ingress:
cluster:
annotations:
cert-manager.io/cluster-issuer: <ваше значение параметра>
hosts:
‒ <ваше значение параметра>
tls:
‒ secretName: <ваше значение параметра>
hosts:
‒ <ваше значение параметра>
dashboards:
annotations:
cert-manager.io/cluster-issuer: <ваше значение параметра>
hosts:
‒ <ваше значение параметра>
tls:
‒ secretName: <ваше значение параметра>
hosts:
‒ <ваше значение параметра>
Для любого типа кластера
ArgoCD:
В SSC shturval-cd добавить параметр "cert-manager.io/cluster-issuer" и указать название "ClusterIssuer corp-acme".
Команда:
kubectl edit ssc/shturval-cd
Пример customvalues (описание параметров ‒ в таблице 17):
server:
ingress:
annotations:
cert-manager.io/cluster-issuer: <ваше значение параметра>
enabled: true
hostname: <ваше значение параметра>
path: /
pathType: Prefix
tls: true