Обновление сертификатов платформы
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
|
В качестве аргументов |
Пример
$ 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. Подготовка
-
Подготовьте PEM-бандл
<bundle_name>, содержащий ключ, сертификат и CA. Приватный ключ не должен быть зашифрован. -
В систему всех нод в кластере должен быть добавлен новый CA. В таблице ниже указаны стандартные пути для размещения сертификата и команды обновления для основных семейств ОС:
Семейство ОС
Путь к каталогу сертификатов
Команда обновления
RHEL
/etc/pki/ca-trust/source/anchorsupdate-ca-trust
Debian
/usr/local/share/ca-certificatesupdate-ca-certificates
SUSE
/etc/pki/trust/anchors/update-ca-certificates
-
Добавьте в кластер 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 сертификата
Перед началом обновления убедитесь, что у вас есть актуальная резервная копия.
-
Отключите PKI Engine.
starvault secrets disable nova-kubernetes-pki-ingress -
Создайте новый PKI Engine.
starvault secrets enable -path=nova-kubernetes-pki-ingress pki -
Запишите новый 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. -
Проверьте, установился ли новый сертификат.
starvault read nova-kubernetes-pki-ingress/cert/ca -
Создайте роль 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" -
Обновите CA‑сертификат, используемый для OIDC. Для этого выполните следующие шаги:
-
Получите актуальный CA‑сертификат из StarVault, считав его из PKI‑engine nova-kubernetes-pki-ingress (см. пункт выше).
-
Сохраните полученный сертификат в файле
/opt/starvault/tls/ingress-ca.crtна узле, где установлен StarVault, заменив существующий файл при необходимости.
-
-
Обновите сертификаты Ingress.
cmctl renew --namespace=nova-cert-management default-ingress-certificateСертификаты будут перевыпущены и автоматически применены во внутреннем Ingress. Обновление конфигурации может занять несколько минут.