VK Private Cloud logo
Помощь
Обновлена 17 июля 2026 г. в 15:55

Замена SSL-сертификата

Компонент
HAProxy

Замена SSL-сертификатов на сертификат от собственного CA

Пререквизиты

Убедитесь в наличии следующих сертификатов:

  • Full-chain сертификат.

    Сертификат должен содержать:

    • Сертификат сервера.
    • Ключ сертификата сервера.
    • Промежуточные сертификаты, если они используются.
    • Корневой сертификат (для работы haproxy).
  • Корневой сертификат (СА).

    Этот сертификат должен быть выписан на *.<stand_domain_name>. Переменная stand_domain_name задается в репозитории (каталог inventory Платформы) в файле vars.yml. Пример: stand_domain_name: "private.infra.devmail.ru". Для этого случая сертификат должен быть выписан на два DNS-имени: private.infra.devmail.ru и *.private.infra.devmail.ru.

Пример генерации сертификата требуемого формата:

# openssl genrsa -out ca.key 2048# openssl req -new -x509 -days 3650 -key ca.key -subj "/C=RU/ST=MSK/L=MSK/O=Corp, Inc./CN=Private Cloud Root CA" -out ca.crt# openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=RU/ST=MSK/L=MSK/O=VK, Inc./CN=*.<stand_domain_name>" -out server.csr# openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -sha256 -extfile v3.ext

Добавление корневого сертификата в vars.yaml

  1. Добавьте содержимое корневого сертификата (CA) в переменную trusted_ca_certs в файле vars.yml.

    trusted_ca_certs:  - name: local-ca-bundle    content: |     -----BEGIN CERTIFICATE-----     -----END CERTIFICATE-----
  2. Расшифруйте файл vault:

    $ ansible-vault decrypt vault
  3. Пропишите содержимое full-chain сертификата в переменную wildcard.vkcloud.devmail.ru в файле vault:

    #certsvault_ssl_certs:  wildcard.vkcloud.devmail.ru: |    -----BEGIN CERTIFICATE-----    -----END CERTIFICATE-----    -----BEGIN CERTIFICATE-----    -----END CERTIFICATE-----    -----BEGIN RSA PRIVATE KEY-----   -----END RSA PRIVATE KEY-----
  4. Зашифруйте файл vault:

    $ ansible-vault encrypt vault
  5. Из каталога inventory выполните команды:

    $ ansible-playbook -i vkcloud.yml  -e env=vkcloud  ../playbooks/common.yml --tags trustca$ ansible-playbook -i vkcloud.yml  -e env=vkcloud  ../playbooks/public_haproxy.yml$ ansible-playbook -i vkcloud.yml  -e env=vkcloud  ../playbooks/private_haproxy.yml$ ansible-playbook -i vkcloud.yml  -e env=vkcloud  ../playbooks/monfront.yml
  6. На узле cpn003 выполните команду:

    $ kubectl create configmap ca-bundle --from-file=<ПУТЬ_К_ФАЙЛУ_С_КОРНЕВЫМ_СЕРТИФИКАТОМ_СА> -n mcs-back-vkcloud

    Пример:

    $ kubectl create configmap ca-bundle --from-file=/root/pem/ca.crt -n mcs-back-vkcloud
  7. Добавьте созданную конфигурацию к следующим конфигурациям развертывания (deployment) в пространстве mcs-back-vkcloud:

    • auth-service-admin-api.
    • auth-service-s2s-api.

    Пример:

    $ kubectl edit deployment auth-service-admin-api -n mcs-back-vkcloud$ kubectl edit deployment auth-service-s2s-api -n mcs-back-vkcloud

    После этого поды будут перезапущены.

Добавление корневого сертификата для Marketplace

Ниже описаны шаги по добавлению корневого сертификата для Marketplace на примере узла cpn003 Платформы.

  1. На узле cpn003 выполните команды:

    # yum install guestfish libguestfs-tools -y# . openrc.sh# openstack image list | grep Market# cd /tmp# glance image-download --file CentOS-7.9-Marketplace-Basic.ca.qcow2 - -progress <image id># chmod 777 CentOS-7.9-Marketplace-Basic.ca.qcow2# systemctl start libvirtd.service# guestfish --rw -a CentOS-7.9-Marketplace-Basic.ca.qcow2Welcome to guestfish, the guest filesystem shell forediting virtual machine filesystems and disk images.Type: ‘help’ for help on commands      ‘man’ to read the manual      ‘quit’ to quit the shell><fs> run><fs> list-filesystems/dev/sda1: ext4><fs> mount /dev/sda1 /
  2. Добавьте содержимое файла корневого сертификата в конец следующих файлов (если этих файлов нет, их необходимо создать):

    • /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
    • /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
    • /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
    • /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
  3. Поместите содержимое файла корневого сертификата в /etc/pki/ca-trust/source/anchors/ca.crt:

    ><fs> touch /etc/pki/ca-trust/source/anchors/ca.crt><fs> edit /etc/pki/ca-trust/source/anchors/ca.crt# ca.crt-----BEGIN CERTIFICATE----------END CERTIFICATE-----><fs> exit
  4. Выполните команды:

    # openstack image set --name CentOS-7.9-Marketplace-Basic-old <image id># openstack image create --file CentOS-7.9-Marketplace-Basic.ca.qcow2 --container-format bare --disk-format qcow2  CentOS-7.9-Marketplace-Basic --public --property hw_qemu_guest_agent=yes --property hw_rng_model=virtio --property hw_vif_multiqueue_enabled=true --property os_distro=centos --property os_type=linux --property sid=marketplace --property mcs_name='CentOS 7.9 Marketplace’ --property  mcs_os_distro=linux
  5. Остановите libvirt:

    # systemctl stop libvirtd.service

Добавление корневого сертификата для Kubernetes

Ниже описаны шаги по добавлению корневого сертификата для Kubernetes на примере узла cpn003 Платформы.

  1. На узле cpn003 выполните команды:

    # yum install guestfish libguestfs-tools -y# . ~/openrc.sh# magnum cluster-template-list+--------------------------------------+-------------------------------------------+| uuid                                 | name                                      |+--------------------------------------+-------------------------------------------+| f9d5e927-9bc7-4f29-b9bb-5511380dc12a | Kubernetes-almalinux-v1.22.9-mcs.external |+--------------------------------------+-------------------------------------------+# magnum cluster-template-show f9d5e927-9bc7-4f29-b9bb-5511380dc12a | grep image_id| image_id              | 8eee7efd-c0b7-452c-959c-1635732fdde7# openstack image show 8eee7efd-c0b7-452c-959c-1635732fdde7+------------------+-------------------------------------------------------------------------+| Field            | Value                                                                   |+------------------+-------------------------------------------------------------------------+| checksum         | 56a3b0cc13f00d4ad189a7d0f436d0be                                        || container_format | bare                                                                    || created_at       | 2023-10-17T16:06:20Z                                                    || disk_format      | raw                                                                     || file             | /v2/images/8eee7efd-c0b7-452c-959c-1635732fdde7/file                    || id               | 8eee7efd-c0b7-452c-959c-1635732fdde7                                    || min_disk         | 2                                                                       || min_ram          | 0                                                                       || name             | almalinux-9-v1.22.9.202212021719                                        || owner            | 239b5484bb534b42bd0d710b91615702                                        || properties       | direct_url='rbd://5456e034-c7a6-4a7d-af66-1e95be8e50b1/glance-images    ||                  | /8eee7efd-c0b7-452c-959c-1635732fdde7/snap', hw_qemu_guest_agent='yes', ||                  | hw_rng_model='virtio', hw_vif_multiqueue_enabled='true',                ||                  | locations='[{u'url': u'rbd://5456e034-c7a6-4a7d-af66-1e95be8e50b1       ||                  | /glance-images/8eee7efd-c0b7-452c-959c-1635732fdde7/snap', u'metadata': ||                  | {}}]', os_admin_user='almalinux', os_distro='almalinux',                ||                  | os_require_quiesce='True', os_type='linux', os_version='9',             ||                  | sid='magnum'                                                            || protected        | False                                                                   || schema           | /v2/schemas/image                                                       || size             | 10737418240                                                             || status           | active                                                                  || tags             |                                                                         || updated_at       | 2023-10-17T16:11:32Z                                                    || virtual_size     | None                                                                    || visibility       | public                                                                  |+------------------+-------------------------------------------------------------------------+# cd /tmp# glance image-download --file almalinux-9-v1.22.9.202212021719.raw --progress 8eee7efd-c0b7-452c-959c-1635732fdde7# chmod 777 almalinux-9-v1.22.9.202212021719.raw# systemctl start libvirtd.service# guestfish --rw -a almalinux-9-v1.22.9.202212021719.rawWelcome to guestfish, the guest filesystem shell forediting virtual machine filesystems and disk images.Type: ‘help’ for help on commands      ‘man’ to read the manual      ‘quit’ to quit the shell><fs> run><fs> list-filesystems/dev/sda1: unknown/dev/sda2: ext4><fs> mount /dev/sda2 /
  2. Добавьте содержимое файла корневого сертификата в конец следующих файлов (если этих файлов нет, их необходимо создать):

    • /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
    • /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
    • /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
    • /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
    • /etc/pki/tls/cert.pem
    • /etc/pki/tls/certs/ca-bundle.crt
    • /etc/pki/tls/certs/ca-bundle.trust.crt
  3. Используя команду touch, создайте файл /etc/pki/ca-trust/source/anchors/custom.crt.

  4. Добавьте в файл /etc/pki/ca-trust/source/anchors/custom.crtсодержимое ca.crt. Пример:

    ><fs> edit /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem-----END CERTIFICATE-----# ca.crt-----BEGIN CERTIFICATE----------END CERTIFICATE-----><fs> exit
  5. Остановите libvirt:

    # systemctl stop libvirtd.service
  6. Выполните команды:

    # openstack image set --name  almalinux-9-v1.22.9.202212021719-old 8eee7efd-c0b7-452c-959c-1635732fdde7# openstack image create --file almalinux-9-v1.22.9.202212021719.raw --container-format bare --disk-format raw almalinux-9-v1.22.9.202212021719-self-ca --public --property hw_rng_model=virtio --property hw_vif_multiqueue_enabled=true --property os_distro=almalinux --property os_type=linux

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

  7. Определите ID шаблона кластера Magnum:

    # magnum cluster-template-list
  8. Замените ID старого образа на вновь созданный в ID шаблона кластера:

    # magnum cluster-template-update <cluster template id> replace image_id=<new image id>
  9. Перейдите на узел cpn003, аутентифицируйтесь в CLI и получите от Magnum версию образа magnum-scripts (запомните его):

    # . ~/openrc.sh# magnum cluster-template-list+--------------------------------------+-------------------------------------------+| uuid                                 | name                                      |+--------------------------------------+-------------------------------------------+| f9d5e927-9bc7-4f29-b9bb-5511380dc12a | Kubernetes-almalinux-v1.22.9-mcs.external |+--------------------------------------+-------------------------------------------+magnum cluster-template-show f9d5e927-9bc7-4f29-b9bb-5511380dc12a | grep executor_image_tag| executor_image_tag    | 0.0.0-202212050816.git5d6ddd9e
  10. Установите Docker на сторонней ВМ с доступом к деплой-ноде по порту 6663, например на сервере RS:

    # yum install docker -y
  11. Перейдите в конфигурацию Docker и запишите в insecure-registry адрес <deploy-сервер>:6663:

    # vi /etc/docker/daemon.json{    "insecure-registries": [        "deploy001.local:6663"    ]}
  12. Запустите Docker-сервис:

    # systemctl start docker
  13. Авторизуйтесь в Docker-регистре на Deploy-узле:

    # docker login deploy001.local:6663

    Здесь в качестве логина введите admin. Пароль доступен в скрипте run_nexus.sh.

  14. Скачайте Docker-образ, подставив в качестве тега версию, полученную на шаге 9:

    # docker pull deploy001.local:6663/magnum-scripts:0.0.0-202212050816.git5d6ddd9e
  15. Подготовьте среду для сборки Docker-образа — перейдите во временный каталог и переместите туда файл с самоподписанным CA-сертификатом:

    # mkdir /tmp/magnum-scripts-build# cd /tmp/magnum-scripts-build# cp /root/pem/ca.crt .# lsca.crt
  16. Создайте Dockerfile со следующим содержимым:

    # vi DockerfileFROM deploy001.local:6663/magnum-scripts:0.0.0-202212050816.git5d6ddd9eCOPY ca.crt /etc/pki/ca-trust/source/anchors/ca-bundle.crtRUN update-ca-trust
  17. Запустите сборку Docker-образа с обновленным именем, например с подписью -self-ca:

    # docker build . -t deploy001.local:6663/magnum-scripts:0.0.0-202212050816.git5d6ddd9e-self-ca
  18. Загрузите новый образ в Docker-registry:

    # docker push deploy001.local:6663/magnum-scripts:0.0.0-202212050816.git5d6ddd9e-self-ca
  19. Отредактируйте файл repos_mcs_distr_box-x.x.x/ansible-openstack/inventory/group_vars/vkcloud_kube/magnum.yml в каталоге inventory:

    helm_magnum_cluster_image: "Almalinux-8-v1.22.6-mcs.8_private_magnum"executor_image_tag: 0.0.0-202212050816.git5d6ddd9e-self-ca
  20. Из каталога ansible-openstack выполните команду:

    ansible-playbook -i inventory/vkcloud.yml  -e env=vkcloud  -e bootstrap=true playbooks/helm-magnum.yml
  21. На сервере cpn003 отредактируйте конфигурацию развертывания (deployment) nexus-proxy-nexus-proxy — замените существующий magnum-scripts на измененный magnum-scripts:v1.22.6-mcs.2-MCSPC-5847-self-signed-crt.202211081347.gite43c0e12:

    $ kubectl edit deployment nexus-proxy-nexus-proxy -n nexus-vkcloud…..     - name: nexus_proxy_docker_images       value: magnum-scripts:0.0.0-202212050816.git5d6ddd9e-self-ca….
  22. Отредактируйте шаблон кластера Magnum. Пример:

    [cpn003: ~]# magnum cluster-template-list +--------------------------------------+-------------------------------------------+| uuid                                 | name                                      |+--------------------------------------+-------------------------------------------+| f9d5e927-9bc7-4f29-b9bb-5511380dc12a | Kubernetes-almalinux-v1.22.9-mcs.external |+--------------------------------------+-------------------------------------------+[cpn003: ~]# magnum cluster-template-update f9d5e927-9bc7-4f29-b9bb-5511380dc12 replace executor_image_tag=0.0.0-202212050816.git5d6ddd9e-self-ca

Замена устаревшего SSL-сертификата

В разделе описаны шаги по замене устаревшего SSL-сертификата, если до этого Платформа была настроена для работы с самоподписанным сертификатом (были выполнены действия из раздела Добавление корневого сертификата для Kubernetes) и корневой сертификат не изменялся.

Пререквизиты

Убедитесь в наличии следующих сертификатов:

  • Full-chain сертификат.

    Сертификат должен содержать:

    • Сертификат сервера.
    • Ключ сертификата сервера.
    • Промежуточные сертификаты, если они используются.
    • Корневой сертификат (для работы haproxy).
  • Корневой сертификат (СА). Если у вас нет сертификата, добавьте его. Подробнее в разделе Добавление корневого сертификата для Kubernetes.

Порядок действий

  1. Расшифруйте файл vault:
$ ansible-vault decrypt vault
  1. Пропишите содержимое full-chain сертификата в переменную wildcard.vkcloud.devmail.ru в файле vault. Пример:

    #certsvault_ssl_certs:  wildcard.vkcloud.devmail.ru: |    -----BEGIN CERTIFICATE-----    -----END CERTIFICATE-----    -----BEGIN CERTIFICATE-----    -----END CERTIFICATE-----    -----BEGIN RSA PRIVATE KEY-----    -----END RSA PRIVATE KEY-----
  2. Зашифруйте файл vault:

    $ ansible-vault encrypt vault
  3. Из каталога inventory выполните команды:

    $ ansible-playbook -i vkcloud.yml  -e env=vkcloud  ../playbooks/public_haproxy.yml$ ansible-playbook -i vkcloud.yml  -e env=vkcloud  ../playbooks/private_haproxy.yml$ ansible-playbook -i vkcloud.yml  -e env=vkcloud  ../playbooks/monfront.yml