Промежуточный и 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.
Команда
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
Промежуточный сертификат
В кластере перейдите в раздел “Администрирование” на страницу ClusterIssuers и создайте объект, указав корпоративный тип сертификата и имя секрета corp-intermediate-ca:
Пример ClusterIssuer

Сертификат 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
Скриншот

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