Добавить в кластер промежуточный и ACME сертификаты
На этой странице
В развернутом кластере платформы “Штурвал” вы можете:
- заменить сертификат, установленный в процессе инсталляции кластера на промежуточный;
- установить сертификат ACME (Automatic Certificate Management Environment).
Чтобы сгенерировать промежуточный или ACME сертификат к существующей инфраструктуре предлагается воспользоваться Step. Step представляет центр сертификации (CA) для автоматизированного управления сертификатами X.509.
Сценарий установки сертификата
Сценарий замены сертификата:
- Сделать бэкап существующей конфигурации.
- Создать сертификат и разместить его в секрете неймспейса 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
.
Команда
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 раздела Хранилище и создайте секрет с именемcorp-intermediate-ca
, выберите типkubernetes.io/tls
.
Скриншот
- Добавьте
intermediate-ca-chain.crt
иintermediate-ca.key
в ключи Secretcorp-intermediate-ca
.
Скриншот
Сертификат 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-контейнера. При необходимости выберите другой способ инсталляции из официальной документации.
- Создайте директорию, в которой будут храниться конфигурация и сертификаты 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
.
Скриншот
- В блоке Спецификация объекта:
- выберите тип 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 в блоке Текстовые ключи, в значении укажите данные сертификата (корпоративного или ACME acme-ca.crt).
Скриншот
Добавление сертификатов в системные сервисы
Если вы изменяете сертификаты в кластере управления, обновление системных компонентов “Модуль программного управления Платформой” (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
tls:
enabled: true
backend_tls_secretname: <ваше значение параметра>
auth_tls_secretname: <ваше значение параметра>
cluster_issuer_name: <ваше значение параметра>
Параметр | Описание | Тип данных | Пример |
---|---|---|---|
backend_tls_secretname |
Имя секрета для backend | string | back-tls |
auth_tls_secretname |
Имя секрета для auth | string | auth-tls |
cluster_issuer_name |
Имя созданного ClusterIssuer с корневым CA сертификатом (промежуточным или ACME) | string | corp-acme |
Скриншот
Сохраните изменения.
Frontend
- В боковом меню откройте раздел Сервисы и репозитории и перейдите на страницу Установленные сервисы, найдите Модуль графического управления Платформой (shturval-frontend). Перейдите к управлению и в блоке Спецификация сервиса:
- пропишите в параметрах
docs_tls_secretname
иfront_tls_secretname
имена секретов; - укажите в параметре
cluster_issuer_name
имя созданного ClusterIssuer.
Пример customvalues
tls:
enabled: true
front_tls_secretname: <ваше значение параметра>
docs_tls_secretname: <ваше значение параметра>
cluster_issuer_name: <ваше значение параметра>
Параметр | Описание | Тип данных | Пример |
---|---|---|---|
front_tls_secretname |
Имя секрета для front | string | front-tls |
docs_tls_secretname |
Имя секрета для docs | string | docs-tls |
cluster_issuer_name |
Имя созданного ClusterIssuer с корневым CA сертификатом ACME | string | corp-acme |
Скриншот
Сохраните изменения.
Grafana
- В ssc shturval-dashboards добавьте:
- параметр
cert-manager.io/cluster-issuer
и укажите имя созданного ClusterIssuer; - параметр
secretName
и укажите имя Secret, в котором будет сохранен сертификат для Grafana.
- параметр
Команда
kubectl edit ssc/shturval-dashboards
Изменения customvalues
ingress:
annotations:
cert-manager.io/cluster-issuer: <ваше значение параметра>
enabled: true
tls:
- hosts:
- <ваше значение параметра>
secretName: <ваше значение параметра>
Параметр | Описание | Тип данных | Пример |
---|---|---|---|
annotations.cert-manager.io/cluster-issuer |
Аннотация с именем созданного ClusterIssuer | string | corp-acme |
tls.hosts |
Список хостов, для которых устанавливается TLS-соединение | array | dashboards.apps.ip-10-11-11-13.shturval.link |
tls.secretName |
Имя секрета для установления TLS-соединения, в котором будет сохранен сертификат для Grafana | string | dashboards-ingress-tls |
Скриншот
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
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:
- <ваше значение параметра>
Параметр | Описание | Тип данных | Пример |
---|---|---|---|
cluster.annotations.cert-manager.io/cluster-issuer |
Аннотация с именем созданного ClusterIssuer для кластера Opensearch | string | corp-acme |
dashboards.annotations.cert-manager.io/cluster-issuer |
Аннотация с именем созданного ClusterIssuer для дашборда OpenSearch | string | corp-acme |
cluster.hosts |
Список хостов кластера Opensearch | array | logs.apps.ip-10-11-11-13.shturval.link |
cluster.tls.hosts |
Список хостов, для которых используется секрет с TLS-сертификатом | array | logs.apps.ip-10-11-11-13.shturval.link |
cluster.tls.secretName |
Имя секрета, в котором будет сохранен TLS-сертификат для кластера OpenSearch | string | logs-tls |
dashboards.hosts |
Список хостов для доступа к дашбордам OpenSearch | array | logs-dashboards.apps.ip-10-11-11-13.shturval.link |
dashboards.tls.secretName |
Имя секрета, в котором будет сохранен TLS-сертификат для дашборда OpenSearch | string | logs-dashboards-tls |
dashboards.tls.hosts |
Список хостов, для которых используется секрет | array | logs-dashboards.apps.ip-10-11-11-13.shturval.link |
Скриншот
Для любого типа кластера
ArgoCD
- В ssc shturval-cd добавьте параметр
cert-manager.io/cluster-issuer
и укажите название ClusterIssuercorp-acme
.
Команда
kubectl edit ssc/shturval-cd
Пример customvalues
server:
ingress:
annotations:
cert-manager.io/cluster-issuer: <ваше значение параметра>
enabled: true
hostname: <ваше значение параметра>
path: /
pathType: Prefix
tls: true
Параметр | Описание | Тип данных | Пример |
---|---|---|---|
ingress.annotations.cert-manager.io/cluster-issuer |
Аннотация с именем созданного ClusterIssuer для кластера Opensearch | string | corp-acme |
ingress.hostname |
Имя хоста сервера Argo CD | string | argocd.apps.ip-10-11-11-13.shturval.link |