Как добавить сертификат в кластер
На этой странице
В развернутом кластере платформы “Штурвал” вы можете:
- вручную или через ClusterConfig заменить сертификат, установленный в процессе инсталляции кластера, на промежуточный, корпоративный;
- установить сертификат ACME (Automatic Certificate Management Environment).
ClusterConfig кластера вы можете получить:
- в GUI: кластер управления → Администрирование → страница Кастомные ресурсы → API-группа cluster.shturval.tech → ClusterConfig.
- в CLI: кластер управления → команда
kubectl -n ВВЕДИТЕ-ИМЯ-КЛАСТЕРА get clusterconfig ВВЕДИТЕ-ИМЯ-КЛАСТЕРА
Ниже сценарии замены по типам сертификатов.
Промежуточный сертификат
Промежуточный сертификат можно добавить вручную или через конфигурацию ClusterConfig. Если у вас уже есть промежуточный сертификат CA, подписанный корпоративным центром сертификации, используйте его и переходите к выбранному способу добавления в кластер.
Подготовить резервную копию
В кластере перейдите в раздел “Резервное копирование и восстановление”. Убедитесь, что у вас подключено S3 хранилище или подключите его.
В резервную копию включите ресурсы, связанные с выпуском сертификатов и системными сервисами, которые используют сертификат.
Ненеймспейсные ресурсы:
shturvalserviceconfigs.
Неймспейсы:
Для любого типа кластера:
shturval-cd, если используется ArgoCD;cert-manager.
Для кластера управления:
shturval-backend;shturval-dashboards, если используется Grafana.
Неймспейсные ресурсы:
secrets;clusterissuers.
Шаг 1. Подготовить сертификат
Чтобы сгенерировать промежуточный сертификат к существующей инфраструктуре, предлагается воспользоваться Step. Step представляет центр сертификации (CA) для автоматизированного управления сертификатами X.509.
- Сформируйте запрос на подпись сертификата (CSR) и сгенерируйте ключ промежуточного сертификата:
step certificate create "Intermediate CA Name" intermediate-ca.csr intermediate-ca.key --csr
- Отправьте
intermediate-ca.csrна подпись администратору удостоверяющего корпоративного центра сертификации (Certificate Authority, CA). - Получите подписанный промежуточный сертификат
intermediate-ca.crtв формате PEM. - Создайте цепочку сертификатов в формате PEM, например
intermediate-ca-chain.crt:
cat intermediate-ca.crt root-ca.crt >intermediate-ca-chain.crt
Где intermediate-ca.crt - промежуточный сертификат, root-ca.crt - корпоративный корневой сертификат CA.
Для добавления в кластер потребуются:
- цепочка
intermediate-ca-chain.crt; - закрытый ключ
intermediate-ca.key; - корпоративный корневой сертификат CA.
Шаг 2. Добавить в кластер
ClusterConfig, если у вас есть доступ к кластеру управления и права на редактирование ресурса.
Заменить сертификат вручную
- В кластере перейдите в неймспейс
cert-manager, откройте страницу Secrets раздела Хранилище и создайте секрет:
- имя:
corp-intermediate-ca; - тип:
kubernetes.io/tls.
Скриншоты создания Secret corp-intermediate-ca


- Добавьте в Secret
corp-intermediate-caключи с даннымиintermediate-ca-chain.crtиintermediate-ca.key.
Скриншоты добавления сертификата и ключа в Secret corp-intermediate-ca



- В разделе Администрирование откройте страницу ClusterIssuers и создайте объект, указав корпоративный тип сертификата и имя секрета
corp-intermediate-ca.
Скриншот ClusterIssuer для промежуточного сертификата

- В неймспейсе
cert-managerоткройте ConfigMaps и найдитеroot-ca:
- если ConfigMap
root-caесть, откройте его и замените значение ключаca.crtданными корневого сертификата CA; - если ConfigMap
root-caнет, создайте его, добавьте ключca.crtи укажите в значении данные корневого сертификата CA.
Скриншот ConfigMap root-ca

Шаг 3. Настроить системные сервисы
Если в кластере работают системные сервисы Grafana или ArgoCD, настройте их через ShturvalServicePatch (shturvalserviceconfigs). Это обеспечит корректную работу авторизации при переходе в сервисы из кластера.
Для кластера управления
Для кластера управления обновите:
- Модуль программного управления Платформой (
shturval-backend); - Модуль графического управления Платформой (
shturval-frontend); - Модуль управления аутентификацией (
shturval-auth).
Backend, Frontend, Auth
Подготовьте манифесты ресурсов ShturvalServicePatch для применения к спецификациям shturval-backend, shturval-frontend и shturval-auth. В блок customvalues добавьте параметры, как в примерах ниже.
Пример ShturvalServicePatch для backend
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-backend
customvalues:
global:
tls:
enabled: true
backend_tls_secretname: <ваше значение параметра>
cluster_issuer_name: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-backend-cert |
backend_tls_secretname |
Имя секрета для установления TLS-соединения | string | shturval-tls |
cluster_issuer_name |
Имя созданного ClusterIssuer | string | corp-acme |
Пример ShturvalServicePatch для frontend
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: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-frontend-cert |
front_tls_secretname |
Имя секрета для установления TLS-соединения | string | shturval-tls |
docs_tls_secretname |
Имя секрета для docs | string | docs-tls |
cluster_issuer_name |
Имя созданного ClusterIssuer | string | corp-acme |
Пример ShturvalServicePatch для auth
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-auth
customvalues:
tls:
enabled: true
auth_tls_secretname: <ваше значение параметра>
cluster_issuer_name: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-auth-cert |
auth_tls_secretname |
Имя секрета для установления TLS-соединения | string | shturval-tls |
cluster_issuer_name |
Имя созданного ClusterIssuer | string | corp-acme |
Загрузите подготовленные ShturvalServicePatch через импорт манифестов. Нажмите на иконку импорта манифестов слева от имени пользователя, загрузите файлы или перетащите манифесты в открывшееся окно. Выполните проверку и нажмите Загрузить.
Скриншоты импорта манифестов для backend, frontend и auth


Чтобы проверить применение манифестов, перейдите в раздел Сервисы и репозитории, откройте страницу Установленные сервисы и перейдите к управлению нужным сервисом:
- Модуль программного управления Платформой (
shturval-backend); - Модуль графического управления Платформой (
shturval-frontend); - Модуль управления аутентификацией (
shturval-auth).
На вкладке Примененные ShturvalServicePatch отобразится загруженный ShturvalServicePatch.
Скриншоты примененных ShturvalServicePatch для backend, frontend и auth



Grafana
Если используется Grafana, подготовьте манифест ShturvalServicePatch для применения к спецификации Модуля графического отображения метрик (Grafana) (shturval-dashboards). В блок customvalues добавьте параметры, как в примере ниже.
Пример 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: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-dashboards-cert |
grafana.ini.security.cookie_secure |
Настройка передачи файлов аутентификации Grafana по соединению HTTPS | boolean | true |
grafana.ini.auth.generic_oauth.tls_skip_verify_insecure |
Настройка отключения проверки SSL/TLS-сертификата на сервисе аутентификации | boolean | true |
annotations.cert-manager.io/cluster-issuer |
Аннотация с именем созданного ClusterIssuer | string | corp-acme |
tls.hosts |
Список хостов, для которых устанавливается TLS-соединение | array | dashboards.clustername.ip-10-11-11-13.shturval.link |
tls.secretName |
Имя секрета для установления TLS-соединения, в котором будет сохранен сертификат для Grafana | string | dashboards-ingress-tls |
Загрузите подготовленный ShturvalServicePatch через импорт манифестов.
Скриншоты импорта манифеста для Grafana


После загрузки манифеста из раздела Сервисы и репозитории откройте страницу Установленные сервисы, найдите Модуль графического отображения метрик (Grafana) (shturval-dashboards) и перейдите к управлению. На вкладке Примененные ShturvalServicePatch отобразится загруженный ShturvalServicePatch.
Скриншот примененного ShturvalServicePatch для Grafana

Для любого типа кластера
ArgoCD
Если используется ArgoCD, подготовьте манифест ShturvalServicePatch для применения к спецификации Модуля непрерывной доставки приложений (ArgoCD) (shturval-cd). В блок customvalues добавьте параметры, как в примере ниже.
Пример ShturvalServicePatch для shturval-cd
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
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-cd-cert |
annotations.cert-manager.io/cluster-issuer |
Аннотация с именем созданного ClusterIssuer | string | corp-acme |
ingress.hostname |
Имя хоста сервера Argo CD | string | argocd.clustername.ip-10-11-11-13.shturval.link |
Загрузите подготовленный ShturvalServicePatch через импорт манифестов.
Скриншоты импорта манифеста для ArgoCD


После загрузки манифеста из раздела Сервисы и репозитории откройте страницу Установленные сервисы, найдите Модуль непрерывной доставки приложений (ArgoCD) (shturval-cd) и перейдите к управлению. На вкладке Примененные ShturvalServicePatch отобразится загруженный ShturvalServicePatch.
Скриншот примененного ShturvalServicePatch для ArgoCD

Заменить сертификат через ClusterConfig
Шаг 1. Подготовить значения
Для обновления через ClusterConfig подготовьте значения в формате base64:
- цепочка сертификатов
intermediate-ca-chain.crt; - закрытый ключ промежуточного сертификата
intermediate-ca.key; - корневой сертификат CA, если его нужно указать явно.
base64 -w0 intermediate-ca-chain.crt
base64 -w0 intermediate-ca.key
base64 -w0 root-ca.crt
Шаг 2. Обновить ClusterConfig
- Сохраните исходную конфигурацию, чтобы при ошибке можно было откатить изменения:
export CLUSTER_NAMESPACE=<неймспейс_кластера>
export CLUSTER_NAME=<имя_кластера>
kubectl -n "$CLUSTER_NAMESPACE" get clusterconfig "$CLUSTER_NAME" -o yaml > "clusterconfig-$CLUSTER_NAME-backup.yaml"
- Откройте
ClusterConfigна редактирование:
kubectl -n "$CLUSTER_NAMESPACE" edit clusterconfig "$CLUSTER_NAME"
- В
spec.systemServicesConfig.ingressукажите блокintermediateCA:
apiVersion: cluster.shturval.tech/v1beta1
kind: ClusterConfig
metadata:
name: <имя_кластера>
namespace: <неймспейс_кластера>
spec:
clusterName: <имя_кластера>
systemServicesConfig:
ingress:
intermediateCA:
cert: <цепочка_сертификатов>
key: <закрытый_ключ_промежуточного_сертификата>
rootca: <корневой_сертификат>
| Параметр | Обязательность | Описание |
|---|---|---|
cert |
Да | Цепочка сертификатов (промежуточный сертификат CA -> корневой CA) в формате PEM, закодированная в base64 |
key |
Да | Ключ промежуточного сертификата, закодированный в base64 |
rootca |
Нет | Корневой сертификат CA, закодированный в base64 |
После сохранения ClusterConfig cluster-manager обновит связанные ресурсы сертификата. Дополнительно обновлять системные сервисы не требуется.
ACME
Сертификат ACME автоматизирует получение SSL-сертификатов через ACME-сервер. Чтобы настроить автоматическую выдачу сертификатов через ACME-сервер, нужно получить корневой CA сертификат, который использует ACME-сервер, закодировать его данные и добавить сертификат в кластер вручную или через ClusterConfig.
Подготовить резервную копию
В резервную копию включите ресурсы, связанные с ACME-сервером, cert-manager и системными сервисами, для которых будут выпускаться сертификаты.
Ненеймспейсные ресурсы:
shturvalserviceconfigs.
Неймспейсы:
Для любого типа кластера:
shturval-cd, если используется ArgoCD;cert-manager.
Для кластера управления:
shturval-backend;shturval-dashboards, если используется Grafana.
Неймспейсные ресурсы:
secrets;clusterissuers.
Шаг 1. Подготовить ACME
Если в организации уже есть ACME-сервер, запросите у администратора корневой CA сертификат этого сервера.
Если ACME-сервера нет, можно установить step-ca и получить корневой CA сертификат. Использование в платформе корневого CA сертификата от step-ca обеспечит доверие ко всем сертификатам, которые будут выписаны сертификатом от step-ca.
step-ca можно установить несколькими способами. Ниже приведен пример установки через Docker-контейнер. При необходимости выберите другой способ установки в официальной документации step-ca.
- Создайте директорию для конфигурации и сертификатов:
mkdir data
chown 1000:1000 data
- Создайте файл
docker-compose.yaml:
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"
В параметре DOCKER_STEPCA_INIT_DNS_NAMES укажите DNS-имя, по которому отвечает сервер.
- Запустите
step-ca:
# Запуск step-ca сервера
docker compose up -d
# Проверка запуска
docker compose ps
Если контейнер находится в состоянии UP, сервер готов выписывать сертификаты.
- Получите корневой CA сертификат сервера
step-ca:
cat data/certs/root_ca.crt
Пример ответа:
-----BEGIN CERTIFICATE-----
MIIBoDCCAUagAwIBAgIRAJV9+1S0q+d9+V/UmBXhR+4wCgYIKoZIzj0EAwIwLjER
MA8GA1UEChMIc2h0dXJ2YWwxGTAXBgNVBAMTEHNodHVydmFsIFJvb3QgQ0EwHhcN
MjQxMTIyMTUyMzQ5WhcNMzQxMTIwMTUyMzQ5WjAuMREwDwYDVQQKEwhzaHR1cnZh
bDEZMBcGA1UEAxMQc2h0dXJ2YWwgUm9vdCBDQTBZMBMGByqGSM49AgEGCCqGSM49
AwEHA0IABNhNCtkBTfs+HXA6h1Ty8Qlg+zKQNu
-----END CERTIFICATE-----
Шаг 2. Добавить в кластер
ClusterConfig, если у вас есть доступ к кластеру управления и права на редактирование ресурса.
Заменить сертификат вручную
- В кластере откройте страницу ClusterIssuers раздела Администрирование и создайте ClusterIssuer, например
corp-acme.
Скриншоты создания ClusterIssuer


- В блоке Спецификация объекта:
- выберите тип ACME;
- заполните адрес сервера ACME;
- в CA Bundle загрузите корневой CA сертификат ACME-сервера;
- в блоке Ключ учетной записи укажите имя секрета, в котором будет сохранен автоматически созданный ключ;
- добавьте solver с типом
http01и значениемnginxвClassIngress.
Пример ClusterIssuer:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: corp-acme
spec:
acme:
caBundle: <корневой_CA_сертификат_ACME_сервера_base64>
email: 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
Скриншот ClusterIssuer corp-acme

- В неймспейсе
cert-managerоткройте ConfigMaps и найдитеroot-ca:
- если ConfigMap
root-caесть, откройте его и замените значение ключаca.crtданными корневого сертификата CA от ACME; - если ConfigMap
root-caнет, создайте его, добавьте ключca.crtи укажите в значении данные корневого сертификата CA от ACME.
Скриншот ConfigMap root-ca

Шаг 3. Настроить системные сервисы
Если в кластере работают системные сервисы Grafana или ArgoCD, настройте их через ShturvalServicePatch (shturvalserviceconfigs). Это обеспечит корректную работу авторизации при переходе в сервисы из кластера.
Для кластера управления
Для кластера управления обновите:
- Модуль программного управления Платформой (
shturval-backend); - Модуль графического управления Платформой (
shturval-frontend); - Модуль управления аутентификацией (
shturval-auth).
Backend, Frontend, Auth
Подготовьте манифесты ресурсов ShturvalServicePatch для применения к спецификациям shturval-backend, shturval-frontend и shturval-auth. В блок customvalues добавьте параметры, как в примерах ниже.
Пример ShturvalServicePatch для backend
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-backend
customvalues:
global:
tls:
enabled: true
backend_tls_secretname: <ваше значение параметра>
cluster_issuer_name: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-backend-cert |
backend_tls_secretname |
Имя секрета для установления TLS-соединения | string | shturval-tls |
cluster_issuer_name |
Имя созданного ClusterIssuer | string | corp-acme |
Пример ShturvalServicePatch для frontend
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: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-frontend-cert |
front_tls_secretname |
Имя секрета для установления TLS-соединения | string | shturval-tls |
docs_tls_secretname |
Имя секрета для docs | string | docs-tls |
cluster_issuer_name |
Имя созданного ClusterIssuer | string | corp-acme |
Пример ShturvalServicePatch для auth
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-auth
customvalues:
tls:
enabled: true
auth_tls_secretname: <ваше значение параметра>
cluster_issuer_name: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-auth-cert |
auth_tls_secretname |
Имя секрета для установления TLS-соединения | string | shturval-tls |
cluster_issuer_name |
Имя созданного ClusterIssuer | string | corp-acme |
Загрузите подготовленные ShturvalServicePatch через импорт манифестов. Нажмите на иконку импорта манифестов слева от имени пользователя, загрузите файлы или перетащите манифесты в открывшееся окно. Выполните проверку и нажмите Загрузить.
Скриншоты импорта манифестов для backend, frontend и auth


Чтобы проверить применение манифестов, перейдите в раздел Сервисы и репозитории, откройте страницу Установленные сервисы и перейдите к управлению нужным сервисом:
- Модуль программного управления Платформой (
shturval-backend); - Модуль графического управления Платформой (
shturval-frontend); - Модуль управления аутентификацией (
shturval-auth).
На вкладке Примененные ShturvalServicePatch отобразится загруженный ShturvalServicePatch.
Скриншоты примененных ShturvalServicePatch для backend, frontend и auth



Grafana
Если используется Grafana, подготовьте манифест ShturvalServicePatch для применения к спецификации Модуля графического отображения метрик (Grafana) (shturval-dashboards). В блок customvalues добавьте параметры, как в примере ниже.
Пример 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: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-dashboards-cert |
grafana.ini.security.cookie_secure |
Настройка передачи файлов аутентификации Grafana по соединению HTTPS | boolean | true |
grafana.ini.auth.generic_oauth.tls_skip_verify_insecure |
Настройка отключения проверки SSL/TLS-сертификата на сервисе аутентификации | boolean | true |
annotations.cert-manager.io/cluster-issuer |
Аннотация с именем созданного ClusterIssuer | string | corp-acme |
tls.hosts |
Список хостов, для которых устанавливается TLS-соединение | array | dashboards.clustername.ip-10-11-11-13.shturval.link |
tls.secretName |
Имя секрета для установления TLS-соединения, в котором будет сохранен сертификат для Grafana | string | dashboards-ingress-tls |
Загрузите подготовленный ShturvalServicePatch через импорт манифестов.
Скриншоты импорта манифеста для Grafana


После загрузки манифеста из раздела Сервисы и репозитории откройте страницу Установленные сервисы, найдите Модуль графического отображения метрик (Grafana) (shturval-dashboards) и перейдите к управлению. На вкладке Примененные ShturvalServicePatch отобразится загруженный ShturvalServicePatch.
Скриншот примененного ShturvalServicePatch для Grafana

Для любого типа кластера
ArgoCD
Если используется ArgoCD, подготовьте манифест ShturvalServicePatch для применения к спецификации Модуля непрерывной доставки приложений (ArgoCD) (shturval-cd). В блок customvalues добавьте параметры, как в примере ниже.
Пример ShturvalServicePatch для shturval-cd
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
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-cd-cert |
annotations.cert-manager.io/cluster-issuer |
Аннотация с именем созданного ClusterIssuer | string | corp-acme |
ingress.hostname |
Имя хоста сервера Argo CD | string | argocd.clustername.ip-10-11-11-13.shturval.link |
Загрузите подготовленный ShturvalServicePatch через импорт манифестов.
Скриншоты импорта манифеста для ArgoCD


После загрузки манифеста из раздела Сервисы и репозитории откройте страницу Установленные сервисы, найдите Модуль непрерывной доставки приложений (ArgoCD) (shturval-cd) и перейдите к управлению. На вкладке Примененные ShturvalServicePatch отобразится загруженный ShturvalServicePatch.
Скриншот примененного ShturvalServicePatch для ArgoCD

Заменить сертификат через ClusterConfig
Шаг 1. Подготовить значения
Подготовьте:
- CA bundle для проверки TLS-соединения с ACME-сервером;
- адрес ACME-сервера;
- корневой CA сертификат, если его нужно задать явно;
- email для регистрации в ACME, если он используется.
Сертификаты укажите в base64:
base64 -w0 acme-ca-bundle.crt
base64 -w0 acme-root-ca.crt
Шаг 2. Обновить ClusterConfig
- Сохраните исходную конфигурацию, чтобы при ошибке можно было откатить изменения:
export CLUSTER_NAMESPACE=<неймспейс_кластера>
export CLUSTER_NAME=<имя_кластера>
kubectl -n "$CLUSTER_NAMESPACE" get clusterconfig "$CLUSTER_NAME" -o yaml > "clusterconfig-$CLUSTER_NAME-backup.yaml"
- Откройте
ClusterConfigна редактирование:
kubectl -n "$CLUSTER_NAMESPACE" edit clusterconfig "$CLUSTER_NAME"
- В
spec.systemServicesConfig.ingress.acmeConfigукажите параметры ACME-сервера:
apiVersion: cluster.shturval.tech/v1beta1
kind: ClusterConfig
metadata:
name: <имя_кластера>
namespace: <неймспейс_кластера>
spec:
clusterName: <имя_кластера>
systemServicesConfig:
ingress:
acmeConfig:
acmerootcabundle: <CA_bundle_base64>
acmeserverurl: https://issuer.ip-XX-XX-XX-XX.shturval.link:9443/acme/acme/directory
acmerootca: <корневой_CA_сертификат_base64>
email: cluster@shturval.tech
| Параметр | Обязательность | Описание |
|---|---|---|
acmerootcabundle |
Да | CA bundle для проверки TLS-соединения с ACME-сервером, закодированный в base64. Может содержать цепочку публичных CA-сертификатов. Он передается в cert-manager как spec.acme.caBundle и нужен, чтобы cert-manager доверял TLS-сертификату корпоративного ACME-сервера |
acmeserverurl |
Да | Адрес ACME-сервера |
acmerootca |
Нет | Корневой CA сертификат, закодированный в base64. Если не указывать, корневой CA будет заполнен автоматически. Укажите acmerootca вручную, если нужно явно переопределить ранее заданный корневой CA сертификат |
email |
Нет | Email для регистрации в ACME |
После сохранения ClusterConfig cluster-manager обновит связанные ресурсы сертификата. Дополнительно обновлять системные сервисы не требуется.
Let’s Encrypt
Для создания сертификатов с помощью Let’s Encrypt необходимо, чтобы ingress-контроллер был доступен из сети Интернет. Должно выполняться хотя бы одно условие:
- внешний балансировщик имеет белый (публичный) IP-адрес;
- для
IngressVIPуказан белый (публичный) IP-адрес.
Подготовить резервную копию
В резервную копию включите ресурсы, связанные с cert-manager и системными сервисами, для которых Let’s Encrypt будет выпускать сертификаты.
Ненеймспейсные ресурсы:
shturvalserviceconfigs.
Неймспейсы:
Для любого типа кластера:
shturval-cd, если используется ArgoCD;cert-manager.
Для кластера управления:
shturval-backend;shturval-dashboards, если используется Grafana.
Неймспейсные ресурсы:
secrets;clusterissuers.
ClusterConfig, если у вас есть доступ к кластеру управления и права на редактирование ресурса.
Заменить сертификат вручную
Шаг 1. Создать ClusterIssuer
Создайте YAML-файл acme-issuer.yaml с манифестом объекта ClusterIssuer:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: <имя ресурса>
namespace: cert-manager
spec:
acme:
server: <URL сервера Let's Encrypt>
email: <email учетной записи Let's Encrypt>
privateKeySecretRef:
name: <имя секрета для ключа учетной записи>
solvers:
- http01:
ingress:
class: nginx
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ClusterIssuer |
string | letsencrypt |
acme.server |
URL адрес сервера Let’s Encrypt | string | https://acme-v02.api.letsencrypt.org/directory |
acme.email |
Email учетной записи Let’s Encrypt | string | name@example.com |
acme.privateKeySecretRef.name |
Имя секрета, в котором будет сохранен автоматически созданный ключ учетной записи | string | letsencrypt |
Шаг 2. Применить манифест
Примените созданный манифест ClusterIssuer:
kubectl apply -f acme-issuer.yaml
Шаг 3. Настроить системные сервисы
Если в кластере работают системные сервисы Grafana или ArgoCD, настройте их через ShturvalServicePatch (shturvalserviceconfigs). Это обеспечит корректную работу авторизации при переходе в сервисы из кластера.
Для кластера управления
Для кластера управления обновите:
- Модуль программного управления Платформой (
shturval-backend); - Модуль графического управления Платформой (
shturval-frontend); - Модуль управления аутентификацией (
shturval-auth).
Backend, Frontend, Auth
Подготовьте манифесты ресурсов ShturvalServicePatch для применения к спецификациям shturval-backend, shturval-frontend и shturval-auth. В блок customvalues добавьте параметры, как в примерах ниже.
Пример ShturvalServicePatch для backend
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-backend
customvalues:
global:
tls:
enabled: true
backend_tls_secretname: <ваше значение параметра>
cluster_issuer_name: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-backend-cert |
backend_tls_secretname |
Имя секрета для установления TLS-соединения | string | shturval-tls |
cluster_issuer_name |
Имя созданного ClusterIssuer | string | letsencrypt |
Пример ShturvalServicePatch для frontend
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: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-frontend-cert |
front_tls_secretname |
Имя секрета для установления TLS-соединения | string | shturval-tls |
docs_tls_secretname |
Имя секрета для docs | string | docs-tls |
cluster_issuer_name |
Имя созданного ClusterIssuer | string | letsencrypt |
Пример ShturvalServicePatch для auth
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-auth
customvalues:
tls:
enabled: true
auth_tls_secretname: <ваше значение параметра>
cluster_issuer_name: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-auth-cert |
auth_tls_secretname |
Имя секрета для установления TLS-соединения | string | shturval-tls |
cluster_issuer_name |
Имя созданного ClusterIssuer | string | letsencrypt |
Загрузите подготовленные ShturvalServicePatch через импорт манифестов. Нажмите на иконку импорта манифестов слева от имени пользователя, загрузите файлы или перетащите манифесты в открывшееся окно. Выполните проверку и нажмите Загрузить.
Скриншоты импорта манифестов для backend, frontend и auth


Чтобы проверить применение манифестов, перейдите в раздел Сервисы и репозитории, откройте страницу Установленные сервисы и перейдите к управлению нужным сервисом:
- Модуль программного управления Платформой (
shturval-backend); - Модуль графического управления Платформой (
shturval-frontend); - Модуль управления аутентификацией (
shturval-auth).
На вкладке Примененные ShturvalServicePatch отобразится загруженный ShturvalServicePatch.
Скриншоты примененных ShturvalServicePatch для backend, frontend и auth



Grafana
Если используется Grafana, подготовьте манифест ShturvalServicePatch для применения к спецификации Модуля графического отображения метрик (Grafana) (shturval-dashboards). В блок customvalues добавьте параметры, как в примере ниже.
Пример 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: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-dashboards-cert |
grafana.ini.security.cookie_secure |
Настройка передачи файлов аутентификации Grafana по соединению HTTPS | boolean | true |
grafana.ini.auth.generic_oauth.tls_skip_verify_insecure |
Настройка отключения проверки SSL/TLS-сертификата на сервисе аутентификации | boolean | true |
annotations.cert-manager.io/cluster-issuer |
Аннотация с именем созданного ClusterIssuer | string | letsencrypt |
tls.hosts |
Список хостов, для которых устанавливается TLS-соединение | array | dashboards.clustername.ip-10-11-11-13.shturval.link |
tls.secretName |
Имя секрета для установления TLS-соединения, в котором будет сохранен сертификат для Grafana | string | dashboards-ingress-tls |
Загрузите подготовленный ShturvalServicePatch через импорт манифестов.
Скриншоты импорта манифеста для Grafana


После загрузки манифеста из раздела Сервисы и репозитории откройте страницу Установленные сервисы, найдите Модуль графического отображения метрик (Grafana) (shturval-dashboards) и перейдите к управлению. На вкладке Примененные ShturvalServicePatch отобразится загруженный ShturvalServicePatch.
Скриншот примененного ShturvalServicePatch для Grafana

Для любого типа кластера
ArgoCD
Если используется ArgoCD, подготовьте манифест ShturvalServicePatch для применения к спецификации Модуля непрерывной доставки приложений (ArgoCD) (shturval-cd). В блок customvalues добавьте параметры, как в примере ниже.
Пример ShturvalServicePatch для shturval-cd
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
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch | string | shturval-cd-cert |
annotations.cert-manager.io/cluster-issuer |
Аннотация с именем созданного ClusterIssuer | string | letsencrypt |
ingress.hostname |
Имя хоста сервера Argo CD | string | argocd.clustername.ip-10-11-11-13.shturval.link |
Загрузите подготовленный ShturvalServicePatch через импорт манифестов.
Скриншоты импорта манифеста для ArgoCD


После загрузки манифеста из раздела Сервисы и репозитории откройте страницу Установленные сервисы, найдите Модуль непрерывной доставки приложений (ArgoCD) (shturval-cd) и перейдите к управлению. На вкладке Примененные ShturvalServicePatch отобразится загруженный ShturvalServicePatch.
Скриншот примененного ShturvalServicePatch для ArgoCD

Заменить сертификат через ClusterConfig
Шаг 1. Подготовить значения
Подготовьте URL сервера Let’s Encrypt и email учетной записи:
https://acme-v02.api.letsencrypt.org/directory
Шаг 2. Обновить ClusterConfig
- Сохраните исходную конфигурацию:
export CLUSTER_NAMESPACE=<неймспейс_кластера>
export CLUSTER_NAME=<имя_кластера>
kubectl -n "$CLUSTER_NAMESPACE" get clusterconfig "$CLUSTER_NAME" -o yaml > "clusterconfig-$CLUSTER_NAME-backup.yaml"
- Откройте
ClusterConfig:
kubectl -n "$CLUSTER_NAMESPACE" edit clusterconfig "$CLUSTER_NAME"
- В
spec.systemServicesConfig.ingress.acmeConfigукажите параметры Let’s Encrypt:
apiVersion: cluster.shturval.tech/v1beta1
kind: ClusterConfig
metadata:
name: <имя_кластера>
namespace: <неймспейс_кластера>
spec:
clusterName: <имя_кластера>
systemServicesConfig:
ingress:
acmeConfig:
acmerootcabundle: <CA_base64>
acmeserverurl: https://acme-v02.api.letsencrypt.org/directory
email: name@example.com
| Параметр | Обязательность | Описание | Тип данных |
|---|---|---|---|
acmeserverurl |
Да | URL адрес сервера Let’s Encrypt | string |
email |
Нет | Email учетной записи Let’s Encrypt | string |
acmerootcabundle |
Да | Сертификат для проверки TLS-соединения с сервером, закодированный в base64. Может содержать цепочку публичных CA-сертификатов. Он передается в cert-manager как spec.acme.caBundle и нужен, чтобы cert-manager доверял TLS-сертификату корпоративного ACME-сервера. Для Let’s Encrypt получить СА wget https://letsencrypt.org/certs/isrgrootx1.pem |
string |
После сохранения ClusterConfig cluster-manager обновит связанные ресурсы сертификата. Дополнительно обновлять системные сервисы не требуется.
Корпоративный сертификат
После добавления в кластер корпоративного сертификата дополнительная настройка в системных сервисах не требуется. По умолчанию будет использован корпоративный сертификат.
Подготовить резервную копию
В резервную копию включите ресурсы, связанные с корпоративным сертификатом Ingress.
Ненеймспейсные ресурсы:
shturvalserviceconfigs.
Неймспейсы:
Для любого типа кластера:
ingress;cert-manager.
Неймспейсные ресурсы:
secrets;configmaps.
Шаг 1. Подготовить сертификат
- Создайте конфигурационный файл
openssl-san.cnf. В блокеalt_namesукажите доменное имя Ingress:
cat > openssl-san.cnf <<EOF
[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
C=RU
ST=Moscow
L=Moscow
O=My Company
OU=Department
emailAddress=admin@example.com
CN = example.com
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = *.clustername.corp.domain
[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName=@alt_names
EOF
Где corp.domain - домен Ingress, с которым работает платформа.
- Создайте запрос на сертификат (CSR):
openssl req -newkey rsa:2048 -sha256 -days 365 -nodes -keyout tls.key -out tls.csr -extensions req_ext -config openssl-san.cnf
- Отправьте
tls.csrна подпись в ваш удостоверяющий центр (Certificate Authority, CA). - Получите подписанный сертификат в формате PEM и переименуйте его в
tls.crt.
Для добавления корпоративного сертификата в кластер потребуется:
- корпоративный сертификат в формате PEM, содержащий конечный сертификат, промежуточные сертификаты CA и корневой CA. Сертификат должен быть выпущен центром сертификации или быть самоподписанным для доменного имени Ingress;
- закрытый ключ корпоративного сертификата Ingress
tls.key.
Шаг 2. Добавить в кластер
ClusterConfig, если у вас есть доступ к кластеру управления и права на редактирование ресурса.
Заменить сертификат вручную
- В неймспейсе
cert-managerоткройте ConfigMaps, найдитеroot-caи измените значение ключаca.crt. В значении должен быть корпоративный корневой сертификат.
Скриншоты изменения ConfigMap root-ca


- Сохраните изменения в ConfigMap
root-ca. - В неймспейсе
ingressоткройте страницу Secrets раздела Хранилище и создайте секрет:
- имя:
corp-tls; - тип:
kubernetes.io/tls.
Скриншоты создания Secret corp-tls


- Добавьте корпоративный конечный сертификат и его ключ в Secret
corp-tls.
Скриншоты добавления сертификата и ключа в Secret corp-tls


- Сохраните Secret
corp-tls.
Настроить ingress-controller
Чтобы внести изменения в customvalues Модуля управления внешними подключениями (shturval-ingress-controller), подготовьте ShturvalServicePatch:
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-ingress-controller
customvalues:
controller:
extraArgs:
default-ssl-certificate: "ingress/corp-tls"
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя создаваемого ShturvalServicePatch |
string | shturval-ingress-controller-cert |
Загрузите манифест через импорт манифестов в графическом интерфейсе. Нажмите на иконку импорта манифестов слева от имени пользователя, загрузите файл с подготовленным манифестом ShturvalServicePatch для shturval-ingress-controller или перетащите манифест в открывшееся окно. Выполните проверку и нажмите Загрузить.
Скриншоты импорта ShturvalServicePatch для ingress-controller


После применения на странице Установленные сервисы откройте Модуль управления внешними подключениями (shturval-ingress-controller) и проверьте:
- на вкладке Примененные ShturvalServicePatch отображается загруженный
ShturvalServicePatch; - на вкладке Сервис статус изменился на Patched.
Скриншоты примененного ShturvalServicePatch для ingress-controller


Заменить сертификат через ClusterConfig
Шаг 1. Подготовить значения
Подготовьте значения в формате base64:
- корпоративный сертификат Ingress;
- закрытый ключ корпоративного сертификата Ingress;
- корневой сертификат для Ingress.
base64 -w0 tls.crt
base64 -w0 tls.key
base64 -w0 root-ca.crt
Шаг 2. Обновить ClusterConfig
- Сохраните исходную конфигурацию:
export CLUSTER_NAMESPACE=<неймспейс_кластера>
export CLUSTER_NAME=<имя_кластера>
kubectl -n "$CLUSTER_NAMESPACE" get clusterconfig "$CLUSTER_NAME" -o yaml > "clusterconfig-$CLUSTER_NAME-backup.yaml"
- Откройте
ClusterConfig:
kubectl -n "$CLUSTER_NAMESPACE" edit clusterconfig "$CLUSTER_NAME"
- В
spec.systemServicesConfig.ingress.wildcardCertукажите корпоративный сертификат:
apiVersion: cluster.shturval.tech/v1beta1
kind: ClusterConfig
metadata:
name: <имя_кластера>
namespace: <неймспейс_кластера>
spec:
clusterName: <имя_кластера>
systemServicesConfig:
ingress:
wildcardCert:
ingresscert: <корпоративный_сертификат_ingress>
ingresskey: <закрытый_ключ_корпоративного_сертификата_ingress>
rootingresscert: <корневой_сертификат_ingress>
| Параметр | Обязательность | Описание | При ручном способе указывается |
|---|---|---|---|
ingresscert |
Нет | Корпоративный сертификат Ingress. Значение должно быть закодировано в base64 | В неймспейсе ingress в Secret corp-tls, данные сертификата |
ingresskey |
Нет | Закрытый ключ корпоративного сертификата Ingress. Значение должно быть закодировано в base64 | В неймспейсе ingress в Secret corp-tls, данные ключа |
rootingresscert |
Нет | Корневой сертификат для Ingress. Значение должно быть закодировано в base64 | В неймспейсе cert-manager в ConfigMap root-ca, ключ ca.crt |
После изменения корпоративного сертификата через ClusterConfig cluster-manager обновит:
- корневой сертификат в неймспейсе
cert-manager; - секрет в неймспейсе
ingressс сертификатом; ShturvalServiceConfigshturval-ingress-controller.