Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Обновление сертификатов платформы

1. Обновление сертификатов, выпущенных в StarVault

Обновление сертификатов Nova Container Platform, выпущенных в StarVault, выполняется администратором кластера с помощью утилиты nova-ctl.

Процесс обновления затрагивает только серверные и клиентские сертификаты узлов платформы. Обновление сертификатов корневых центров в настоящий момент не поддерживается и находится в разработке.

В процессе обновления сертификатов на мастер-узлах платформы выполняется перезапуск следующих сервисов:

  • Сервер Kubernetes API

  • Сервер Kubernetes Controller Manager

  • Сервер Kubernetes Scheduler

  • Компоненты CNI

  • Kubelet

На инфраструктурных и рабочих узлах выполняется перезапуск следующих сервисов:

  • Компоненты CNI

  • Kubelet

В ходе перезапуска данных сервисов может наблюдаться кратковременная недоступность компонентов Nova Container Platform.

1.1. Предварительные условия

  • У вас есть закрытый ключ SSH на вашем локальном компьютере, который нужно предоставить утилите nova-ctl.

  • У вас есть токен доступа к хранилищу секретов StarVault с привилегиями root.

Для обновления сертификатов выполните следующую команду:

nova-ctl certs renew --ssh-user ec2-user --ssh-key key.pem

В качестве аргументов --ssh-key и --ssh-user укажите информацию, использованную на этапе конфигурации ключевой пары SSH.

Пример

$ nova-ctl certs renew --ssh-user ec2-user --ssh-key key.pem
Are you sure you want to renew all the certificates in the cluster? (yes/no) [no] yes

Enter Vault root token: ******************

 ■ Setting up secrets store access... done
 ■ Renewing certificates on master-nova-internal... done
 ■ Renewing certificates on infra-nova-internal... done
 ■ Renewing certificates on worker-nova-internal... done
 ■ Downloading new Kubernetes configuration...... done

All certificates are renewed.
New Kubernetes client configuration is saved to kubeadmin.conf.

2. Обновление сертификатов, выпущенных в Cert-Manager

Обновление сертификатов Nova Container Platform, выпущенных в Cert-Manager, может быть выполнено принудительно администратором кластера с помощью утилиты kubectl.

Для принудительного обновления любого сертификата необходимо удалить секрет, в котором сохранены данные сертификата. Cert-Manager автоматически перевыпустит сертификат и сохранит его в секрет с прежним именем.

Для принудительного обновления сертификата выполните следующую команду:

kubectl get certificate custom-dynamic-cert -n custom-namespace -o=jsonpath='{.spec.secretName}' | xargs kubectl delete secret -n custom-namespace

где custom-dynamic-cert - имя вашего сертификата, custom-namespace - имя пространства имен (namespace), в котором находится ваш сертификат.

3. Обновление сертификата от внешнего удостоверяющего центра

3.1. Предварительные условия

  • Установлены и доступны утилиты starvault cli (достаточно выполнять на control-plane/master ноде).

  • Установлена утилита cmctl (cert-manager cli). Она требуется для принудительного обновления сертификатов, так как cert-manager игнорирует проверку истечения срока действия сертификата при вызове этой утилиты.

3.2. Подготовка

  1. Подготовьте PEM-бандл <bundle_name>, содержащий ключ, сертификат и CA. Приватный ключ не должен быть зашифрован.

  2. В систему всех нод в кластере должен быть добавлен новый CA. В таблице ниже указаны стандартные пути для размещения сертификата и команды обновления для основных семейств ОС:

    Семейство ОС

    Путь к каталогу сертификатов

    Команда обновления

    RHEL

    /etc/pki/ca-trust/source/anchors

    update-ca-trust

    Debian

    /usr/local/share/ca-certificates

    update-ca-certificates

    SUSE

    /etc/pki/trust/anchors/

    update-ca-certificates

  3. Добавьте в кластер Kubernetes новый CA‑bundle (файл, содержащий только сертификаты без приватных ключей). Для этого создайте ConfigMap в пространстве имен nova-cert-management с меткой nova-platform.io/trusted-ca-bundle-inject: "enabled".

    Пример манифеста
    apiVersion: v1
    kind: ConfigMap
    metadata:
    	name: "<bundle_name>"
    	namespace: "nova-cert-management"
    	labels:
    		nova-platform.io/trusted-ca-bundle-inject: "enabled"
    data:
    	ca.crt: |
    		<bundle-data>

    Убедитесь, что сертификаты добавлены в кластер Kubernetes.

    Некоторые системные сервисы при обновлении сертификатов могут перезагрузиться автоматически.

4. Обновление PKI сертификата

Перед началом обновления убедитесь, что у вас есть актуальная резервная копия.

  1. Отключите PKI Engine.

    starvault secrets disable nova-kubernetes-pki-ingress
  2. Создайте новый PKI Engine.

    starvault secrets enable -path=nova-kubernetes-pki-ingress pki
  3. Запишите новый CA-сертификат в PKI Engine. CA сертификат должен находиться в начале цепочки.

    starvault write -f nova-kubernetes-pki-ingress/config/ca pem_bundle=@<bundle_name>.pem

    После успешного выполнения команды в выводе найдите первый ключ в поле mapping. Первый ключ будет использоваться как <issuer_ref> в следующих шагах.

    Пример
    mapping map[6fb349fe-fc0d-4274-9d2d-13eef7b279fa:4f9fe087-f365-c576-e948-bd2ad8c90253 82866685-46f7-459d-6c8b-595a12c8df96:]

    В данном примере ключом является 6fb349fe-fc0d-4274-9d2d-13eef7b279fa.

  4. Проверьте, установился ли новый сертификат.

    starvault read nova-kubernetes-pki-ingress/cert/ca
  5. Создайте роль kubernetes-ingress, которая определяет параметры выпуска сертификатов для Ingress (допустимые имена, использование, флаги сервера/клиента и т.п.).

    starvault write nova-kubernetes-pki-ingress/roles/kubernetes-ingress \
       allow_any_name=true \
       allowed_domains="*" \
       allow_localhost=true \
       allow_bare_domains=true \
       allow_subdomains=true \
       allow_wildcard_certificates=true \
       issuer_ref=<issuer_ref> \
       enforce_hostnames=true \
       allow_ip_sans=true \
       key_usage="DigitalSignature,KeyEncipherment" \
       server_flag=true \
       client_flag=true \
       basic_constraints_valid_for_non_ca=true \
       ou="nova-kubernetes-pki-ingress" \
       country="RU" \
       organization="nova-platform.io"
  6. Обновите CA‑сертификат, используемый для OIDC. Для этого выполните следующие шаги:

    • Получите актуальный CA‑сертификат из StarVault, считав его из PKI‑engine nova-kubernetes-pki-ingress (см. пункт выше).

    • Сохраните полученный сертификат в файле /opt/starvault/tls/ingress-ca.crt на узле, где установлен StarVault, заменив существующий файл при необходимости.

  7. Обновите сертификаты Ingress.

    cmctl renew --namespace=nova-cert-management default-ingress-certificate

    Сертификаты будут перевыпущены и автоматически применены во внутреннем Ingress. Обновление конфигурации может занять несколько минут.