Как добавить сертификат в кластер
В развернутом кластере РОСА Кубис можно:
- заменить сертификат, установленный в процессе инсталляции кластера на промежуточный, корпоративный;
- установить сертификат ACME (Automatic Certificate Management Environment).
Сценарий замены сертификата
Сценарий замены сертификата:
- сделать бэкап существующей конфигурации;
- добавить сертификат в кластер Комплекса:
- промежуточный;
- сертификат ACME;
- сертификат ACME сервера Let’s Enсrypt;
- корпоративный.
- обновить настройки сертификатов в системных сервисах. Это действие необходимо выполнить, если добавляется промежуточный сертификат или сертификат ACME.
Создание бэкапа
Перед изменением сертификата в кластере следует создать бэкап ресурсов, чтобы иметь возможность оперативно откатить изменения
В кластере нужно перейти в раздел "Резервное копирование и восстановление". Следует убедиться, что подключено S3-хранилище или подключить его.
Далее необходимо создать резервную копию, после чего перейти к добавлению в кластер сертификата:
- промежуточный;
- сертификат ACME;
- сертификат ACME сервера Let’s Enсrypt;
- корпоративный.
Типы сертификатов
Промежуточный и ACME-сертификаты
Сценарий добавления в кластер
- Создать сертификат.
- Разместить созданный сертификат в секрете неймспейса cert-manager (только для промежуточного сертификата).
- Настроить ClusterIssuer.
- Обновить корневой сертификат (CA-bundle).
- Обновить настройки сертификатов в системных сервисах.
Чтобы сгенерировать промежуточный или ACME-сертификат к существующей инфраструктуре, предлагается воспользоваться Step. Step представляет собой центр сертификации (CA) для автоматизированного управления сертификатами X.509.
Важно ‒ Если в кластер добавлен сертификат ACME, необходимо мониторить работу ACME-сервера. В случае сбоя на сервере кластеры с сертификатами ACME будут недоступны.
Создание сертификата
Промежуточный сертификат
Если у вас есть промежуточный сертификат центра сертификации (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" раздела "Хранилище" (рисунок 65), создать секрет с именем corp-intermediate-ca, выбрать тип kubernetes.io/tls (рисунок 66).

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

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

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

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

Рисунок 69 ‒ Добавление ключей. Шаг 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
Промежуточный сертификат
В кластере нужно перейти в раздел "Администрирование" на страницу "ClusterIssuers" и создать объект, указав корпоративный тип сертификата и имя секрета corp-intermediate-ca (рисунок 70).

Рисунок 70 ‒ Пример ClusterIssuer
Сертификат ACME
Важно ‒ Если устанавливается сертификат в кластер управления, необходимо выполнить все действия, описанные в инструкции. При установке в клиентский кластер требуется выполнить шаги 1)-2) инструкции:
- в кластере перейти на страницу "ClusterIssuers" раздела "Администрирование". Создать ClusterIssuer, например, с именем corp-acme (рисунки 71‒72).

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

Рисунок 72 ‒ Страница "ClusterIssuers"
- в блоке "Спецификация объекта" (рисунок 73):

Рисунок 73 ‒ Блок "Спецификация объекта"
- выбрать тип 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
Обновление корневого сертификата
На странице "Configmaps" раздела "Хранилище" нужно найти Configmap с именем root-ca:
- Если Configmap с именем root-ca есть, перейти на страницу просмотра и в блоке "Текстовые ключи" заменить значение ключа ca.crt данными сертификата (корпоративного или ACME acme-ca.crt).
- Если такого Configmap нет, то создать Configmap с именем root-ca, добавить ключ в блоке "Текстовые ключи", в значении указать данные сертификата (корпоративного или ACME acme-ca.crt) (рисунок 74).

Рисунок 74 ‒ Добавление Configmap
Корпоративный сертификат
Прежде чем перейти к добавлению сертификата в кластер, нужно создать бэкап. В случае ошибки изменения сертификата в кластере можно будет использовать бэкап для отката изменений.
Сценарий добавления корпоративного сертификата в кластер:
- Создать сертификат.
- Обновить корневой сертификат в неймспейсе cert-manager.
- Разместить созданный сертификат в секрете неймспейса ingress.
- Добавить customvalues в Модуль управления внешними подключениями (shturval-ingress-controller).
После добавления в кластер корпоративного сертификата дополнительная настройка в системных сервисах не требуется. По умолчанию будет использован корпоративный сертификат.
Создание сертификата
Подготовка корпоративного сертификата описана в Руководстве.
Обновление корневого сертификата
При наличии корпоративного сертификата нужно в кластере перейти в неймспейс cert-manager. В разделе "Хранилище" найти "Configmap" с именем root-ca (рисунок 75). На странице root-ca изменить значение ключа ca.crt. В значении должен быть ваш корпоративный сертификат (рисунок 76).

Рисунок 75 ‒ Корпоративный сертификат

Рисунок 76 ‒ Изменение корпоративного сертификата
Далее необходимо сохранить изменения в Configmap root-ca.
Затем в неймcпейсе ingress следует перейти в раздел "Хранилище", открыть страницу "Secrets" и создать секрет с именем corp-tls (рисунок 77), выбрав тип kubernetes.io/tls (рисунок 78).

Рисунок 77 ‒ Создание секрета corp-tls

Рисунок 78 ‒ Выбор типа
Размещение сертификата в секрете
Для размещения сертификата в секрете нужно добавить корпоративный сертификат и ключ корпоративного сертификата в ключ Secret corp-tls (рисунок 79).

Рисунок 79 ‒ Добавление ключа
Затем необходимо сохранить Secret corp-tls.
Добавление customvalues в ingress-controller
Чтобы внести изменения в customvalues Модуля управления внешними подключениями (shturval-ingress-controller), следует использовать объект ShturvalServicePatch (PatchSSC):
- Подготовить манифест ShturvalServicePatch с требуемым параметром в customvalues, как в приведенном примере (описание параметров ‒ в таблице 19):
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-ingress-controller
customvalues:
controller:
extraArgs:
default-ssl-certificate: "ingress/corp-tls"
- В графическом интерфейсе с помощью импорта манифеста загрузить в кластер ShturvalServicePatch, для чего нажать на иконку импорта манифестов, расположенную слева от имени пользователя, загрузить файл с подготовленным манифестом ShturvalServicePatch для shturval-ingress-controller или переместить манифест в открывшееся окно, затем выполнить проверку и нажать
Загрузить. - В кластере перейти в раздел "Сервисы и репозитории" на страницу "Установленные сервисы", найти Модуль управления внешними подключениями (shturval-ingress-controller) и перейти к управлению (рисунок 80). На вкладке "Примененные PatchSSC" отобразится загруженный ShturvalServicePatch. Когда ShturvalServicePatch будет применен, на вкладке "Сервис" статус будет Patched (рисунок 81).

Рисунок 80 ‒ Модуль управления внешними подключениями

Рисунок 81 ‒ Вкладка "Сервис"
Создание и установка сертификата с помощью Let’s Enсrypt
Для создания сертификатов с помощью Let’s Enсrypt необходимо, чтобы ingress-контроллер был доступен из сети Интернет. Для реализации этого требования должно выполняться хотя бы одно из следующих условий:
- Внешний балансировщик должен иметь белый (публичный) IP-адрес;
- Должен быть указан белый (публичный) IP адрес для IngressVIP.
Сценарий добавления в кластер:
- Настроить и добавить ClusterIssuer в кластер.
- Обновить настройки сертификатов в системных сервисах.
Создание и установика сертификат в кластере с помощью Let’s Enсrypt
- Создать YAML-файл acme-issuer.yaml с манифестом объекта ClusterIssuer.
Пример ClusterIssuer (описание параметров ‒ в таблице 20):
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: <имя ресурса>
namespace: cert-manager
spec:
acme:
server: <ваше значение параметра>
email: <ваше значение параметра>
privateKeySecretRef:
name: <ваше значение параметра>
solvers:
- http01:
ingress:
class: nginx
- Применить созданный манифест ClusterIssuer:
kubectl apply -f acme-issuer.yaml
- Присвоить секреты в системных сервисах.
Добавление сертификатов в системные сервисы
Если требуется изменить сертификаты в кластере управления, всегда требуется обновление системных компонентов:
- "Модуль программного управления Комплексом" (shturval-backend);
- "Модуль графического управления Комплексом" (shturval-frontend);
- "Модуль управления аутентификацией" (shturval-auth).
Если в кластере работают сервисы, такие как ArgoCD, Grafana, то при добавлении промежуточного или ACME-сертификата в кластер требуется настройка customvalues в в этих системных сервисах (shturvalserviceconfigs). Это обеспечит корректную работу авторизации при переходе в сервисы из кластера.
Для кластера управления
Backend, Frontend, Auth
- Подготовить манифесты ресурсов ShturvalServicePatch для применения к спецификациям (SSC) Модуля программного управления (shturval-backend), Модуля графического управления (shturval-frontend), Модуля управления аутентификацией (shturval-auth). В блок customvalues добавить параметры, как в приведенных ниже примерах.
Пример ShturvalServicePatch для backend (описание параметров ‒ в таблице 21):
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-backend
customvalues:
tls:
enabled: true
backend_tls_secretname: <ваше значение параметра>
cluster_issuer_name: <ваше значение параметра>
Пример ShturvalServicePatch для frontend (описание параметров ‒ в таблице 22):
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-frontend
customvalues:
tls:
enabled: true
front_tls_secretname: <ваше значение параметра>
docs_tls_secretname: <ваше значение параметра>
cluster_issuer_name: <ваше значение параметра>
Пример ShturvalServicePatch для auth (описание параметров ‒ в таблице 23):
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-auth
customvalues:
tls:
enabled: true
auth_tls_secretname: <ваше значение параметра>
cluster_issuer_name: <ваше значение параметра>
- Загрузить с помощью импорта манифеста подготовленные ShturvalServicePatches, для чего нажать на иконку импорта манифестов, расположенную слева от имени пользователя, загрузить файлы или переместить манифесты ShturvalServicePatch в открывшееся окно, выполнить проверку и нажать
Загрузить. - Для просмотра примененных манифестов перейти в раздел "Сервисы и репозитории", открыть страницу "Установленные сервисы", перейти к управлению:
- Модуль программного управления (shturval-backend) ‒ на вкладке "Примененные PatchSSC" отобразится загруженный ShturvalServicePatch.
- Модуль графического управления (shturval-frontend) ‒ на вкладке "Примененные PatchSSC" отобразится загруженный ShturvalServicePatch.
- Модуль управления аутентификацией (shturval-auth) ‒ на вкладке "Примененные PatchSSC" отобразится загруженный ShturvalServicePatch.
Grafana
- Подготовить манифест ShturvalServicePatch для применения к спецификации (SSC) Модуля графического отображения метрик (Grafana) (shturval-dashboards). В блок customvalues добавить параметры, как в приведенном примере (описание параметров ‒ в таблице 24).
Пример ShturvalServicePatch для shturval-dashboards:
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-dashboards
customvalues:
grafana.ini:
security:
cookie_secure: true
auth.generic_oauth:
tls_skip_verify_insecure: true
ingress:
annotations:
cert-manager.io/cluster-issuer: <ваше значение параметра>
enabled: true
tls:
- hosts:
- <ваше значение параметра>
secretName: <ваше значение параметра>
- Загрузить в кластер управления с помощью импорта манифеста подготовленный ShturvalServicePatch для shturval-dashboards, для чего нажать на иконку импорта манифестов, расположенную слева от имени пользователя, загрузить файл или переместить манифест созданного ShturvalServicePatch в открывшееся окно, выполнить проверку и нажать
Загрузить. - После загрузки манифеста из раздела "Сервисы и репозитории" открыть страницу "Установленные сервисы", найти Модуль графического отображения метрик (Grafana) (shturval-dashboards) и перейти к управлению. На вкладке "Примененные PatchSSC" отобразится загруженный ShturvalServicePatch.
Для любого типа кластера
ArgoCD:
- Подготовить манифест ShturvalServicePatch для применения к спецификации (SSC) Модуля непрерывной доставки приложений (ArgoCD) (shturval-cd). В блок customvalues добавьить параметры, как в приведенном примере ShturvalServicePatch для shturval-cd (описание параметров ‒ в таблице 25):
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-cd
customvalues:
server:
ingress:
annotations:
cert-manager.io/cluster-issuer: <ваше значение параметра>
enabled: true
hostname: <ваше значение параметра>
path: /
pathType: Prefix
tls: true
- Загрузить в кластер управления с помощью импорта манифеста подготовленный ShturvalServicePatch для shturval-dashboards, для чего нажать на иконку импорта манифестов, расположенную слева от имени пользователя, загрузить файл или переместить манифест созданного ShturvalServicePatch в открывшееся окно, выполнить проверку и нажать
Загрузить. - После загрузки манифеста из раздела "Сервисы и репозитории" открыть страницу "Установленные сервисы", найти Модуль графического отображения метрик (Grafana) (shturval-dashboards) и перейти к управлению. На вкладке "Примененные PatchSSC" отобразится загруженный ShturvalServicePatch.