Замена SSL-сертификата
Убедитесь в наличии следующих сертификатов:
-
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
-
Добавьте содержимое корневого сертификата (CA) в переменную
trusted_ca_certsв файлеvars.yml.trusted_ca_certs:- name: local-ca-bundlecontent: |-----BEGIN CERTIFICATE----------END CERTIFICATE----- -
Расшифруйте файл
vault:$ ansible-vault decrypt vault -
Пропишите содержимое 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----- -
Зашифруйте файл
vault:$ ansible-vault encrypt vault -
Из каталога
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 -
На узле
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 -
Добавьте созданную конфигурацию к следующим конфигурациям развертывания (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 на примере узла cpn003 Платформы.
-
На узле
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 / -
Добавьте содержимое файла корневого сертификата в конец следующих файлов (если этих файлов нет, их необходимо создать):
/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/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 -
Выполните команды:
# 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 -
Остановите libvirt:
# systemctl stop libvirtd.service
Ниже описаны шаги по добавлению корневого сертификата для Kubernetes на примере узла cpn003 Платформы.
-
На узле
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 / -
Добавьте содержимое файла корневого сертификата в конец следующих файлов (если этих файлов нет, их необходимо создать):
/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
-
Используя команду
touch, создайте файл/etc/pki/ca-trust/source/anchors/custom.crt. -
Добавьте в файл
/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 -
Остановите libvirt:
# systemctl stop libvirtd.service -
Выполните команды:
# 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 вновь созданного образа.
-
Определите ID шаблона кластера Magnum:
# magnum cluster-template-list -
Замените ID старого образа на вновь созданный в ID шаблона кластера:
# magnum cluster-template-update <cluster template id> replace image_id=<new image id> -
Перейдите на узел
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 -
Установите Docker на сторонней ВМ с доступом к деплой-ноде по порту
6663, например на сервере RS:# yum install docker -y -
Перейдите в конфигурацию Docker и запишите в
insecure-registryадрес<deploy-сервер>:6663:# vi /etc/docker/daemon.json{"insecure-registries": ["deploy001.local:6663"]} -
Запустите Docker-сервис:
# systemctl start docker -
Авторизуйтесь в Docker-регистре на Deploy-узле:
# docker login deploy001.local:6663Здесь в качестве логина введите
admin.Пароль доступен в скриптеrun_nexus.sh. -
Скачайте Docker-образ, подставив в качестве тега версию, полученную на шаге 9:
# docker pull deploy001.local:6663/magnum-scripts:0.0.0-202212050816.git5d6ddd9e -
Подготовьте среду для сборки Docker-образа — перейдите во временный каталог и переместите туда файл с самоподписанным CA-сертификатом:
# mkdir /tmp/magnum-scripts-build# cd /tmp/magnum-scripts-build# cp /root/pem/ca.crt .# lsca.crt -
Создайте 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 -
Запустите сборку Docker-образа с обновленным именем, например с подписью
-self-ca:# docker build . -t deploy001.local:6663/magnum-scripts:0.0.0-202212050816.git5d6ddd9e-self-ca -
Загрузите новый образ в Docker-registry:
# docker push deploy001.local:6663/magnum-scripts:0.0.0-202212050816.git5d6ddd9e-self-ca -
Отредактируйте файл
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 -
Из каталога
ansible-openstackвыполните команду:ansible-playbook -i inventory/vkcloud.yml -e env=vkcloud -e bootstrap=true playbooks/helm-magnum.yml -
На сервере
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_imagesvalue: magnum-scripts:0.0.0-202212050816.git5d6ddd9e-self-ca…. -
Отредактируйте шаблон кластера 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-сертификата, если до этого Платформа была настроена для работы с самоподписанным сертификатом (были выполнены действия из раздела Добавление корневого сертификата для Kubernetes) и корневой сертификат не изменялся.
Убедитесь в наличии следующих сертификатов:
-
Full-chain сертификат.
Сертификат должен содержать:
- Сертификат сервера.
- Ключ сертификата сервера.
- Промежуточные сертификаты, если они используются.
- Корневой сертификат (для работы haproxy).
-
Корневой сертификат (СА). Если у вас нет сертификата, добавьте его. Подробнее в разделе Добавление корневого сертификата для Kubernetes.
- Расшифруйте файл
vault:
$ ansible-vault decrypt vault
-
Пропишите содержимое 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----- -
Зашифруйте файл
vault:$ ansible-vault encrypt vault -
Из каталога
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