oVirt — свободная, кроссплатформенная система управления виртуализацией. Была разработана компанией Red Hat как проект сообщества на котором основан продукт Red Hat Virtualization.oVirt состоит из двух основных компонентов - oVirt engine и oVirt node.
oVirt engine управляет всеми хостами виртуализации, общими дисковыми ресурсами и виртуальными сетями. Может быть размещён как на отдельном сервере (standalone), так и на виртуальной машине внутри гипервизоров, которыми управляет (self-hosted engine).
oVirt node - физический сервер с RHEL, Centos, Scientific Linux с KVM гипервизором и службой VDSM (Virtual Desktop and Server Manager), которая управляет всеми ресурсами, доступными серверу (вычисления, ОЗУ, хранилище, сеть), а также управляет запуском виртуальных машин. Несколько узлов могут быть объединены в кластер.
В примерах ниже будут один oVirt engine и три oVirt node:
*** oVirt engine - virt-he.example.test
*** oVirt node - virt-host1.example.test, virt-host2.example.test, virt-host3.example.test
Обмен данными между oVirt engine и oVirt node осуществляется с использованием SSL-сертификатов.
[]Автоматическое обновление сертификатов не производится, поэтому очень важно обновлять сертификаты вручную до истечения сроков их действия.[]
Стандартными средствами обновить сертификаты можно, если до окончания срока действия осталось менее 60 дней (для версии 4.5).
В oVirt необходимо обновлять вручную два типа сертификатов:
*** сертификаты oVirt Engine - службы, которая предоставляет графический интерфейс и REST API для управления ресурсами виртуальных машин
*** сертификаты для обмена данным между гипервизорами oVirt node и центром управления виртуальными машинами oVirt Engine
Определить дату окончания действия сертификатов oVirt Engine можно в свойствах сертификата сайта.
Определить дату окончания действия сертификатов oVirt node можно с помощью openssl:
*** Подключаемся через SSH на физический сервер oVirt node
*** Определяем дату:
[root@virt-host1 ~]# openssl x509 -noout -enddate -in /etc/pki/vdsm/certs/vdsmcert.pem
В версиях oVirt до 4.5, у всех сертификатов время жизни составляет 398 дней.
Начиная с версии 4.5, у самоподписанных сертификатов для обмена данным между гипервизорами oVirt node и центром управления виртуальными машинами oVirt engine установлено время действия 5 лет.
У сертификатов, которые видят браузеры, срок действия установлен в 398 дней, их необходимо обновлять раз в год.
Процедура обновления действующих сертификатов описана в официальной [[https://www.ovirt.org/documentation/administration_guide/ind... документации]].
[]Если вы допустите истечение срока действия сертификатов, то гипервизоры и центр управления Engine перестанут взаимодействовать. []
В Web-консоль невозможно будет войти, виртуальные машины продолжать работать, но с ними ничего нельзя будет сделать: нельзя изменить параметры виртуального железа, нельзя мигрировать на другой узел, после выключения ВМ её будет невозможно включить снова.
Восстановление займёт много времени.
Процедура восстановления просроченных сертификатов описана в [[https://access.redhat.com/solutions/3532921 руководстве]]. Для доступа к нему необходима действующая платная подписка Red Hat Virtualization (RHV) 4.x.
Решение для восстановления без подписки я обнаружил на [[https://github.com/natman/ovirt_renew_certs GitHub]].
Автор подготовил решения для Ansible в соответствии с рекомендациями от Red hat. Если вы знакомы с Ansible и у вас много гипервизоров с просроченными сертификатами, то можно использовать решение от natman.
Решение ниже подходит для небольшого числа гипервизоров, но при условии, что центр управления Engine у вас запущен и вы можете получить к нему доступ через ssh. Предполагается, что в качестве центра управления используется HostedEngine - центр управления гипервизорами запускается внутри самого гипервизора.
Если центр управления Engine выключен и не запускается, а в журнале journalctl на гипервизоре появляются записи
libvirtd[2101]: The server certificate /etc/pki/vdsm/certs/vdsmcert.pem has expired
...
systemd[1]: Failed to start Virtualization daemon
то единственным вариантом восстановления будет изменение времени на гипервизоре на более ранее (в пределах срока действия сертификатов) и обновление сертификатов стандартным образом.
++ Обновление сертификатов до истечения сроков действия
Обновление сертификатов oVirt node
Переводим узел (гипервизор) в режим обслуживания (Managament -> Maintenance) - все машины на узле будут мигрированы, привязаные (pinned) машины будут выключены.
[[IMG /opennews/pics_base/CFD0C5CECEC5D4_1677558915.png]]
Выбираем Installation -> Enroll Certificate
[[IMG /opennews/pics_base/CFD0C5CECEC5D4_1677558941.png]]
Выводим узел из режима обслуживания
[[IMG /opennews/pics_base/CFD0C5CECEC5D4_1677558985.png]]
Повторяем операции для всех оставшихся узлов в кластере
++ Обновление сертификатов oVirt Engine
Подключаемся к физическому серверу гипервизору oVirt node через SSH
С узла Ovirt host переводим центр управления ВМ в режим обслуживания (для Self-hosted типа развёртывания)
[root@virt-host1 ~]# hosted-engine --set-maintenance --mode=global
Подключаемся к виртуальной машине с центром управления oVirt engine через SSH, запускаем настройку engine ([]web-консоль будет остановлена[])
[root@virt-he ~]# engine-setup --offline
Отвечаем на вопросы
Если до истечения срока действия сертификата []осталось менее 60 дней[], то скрипт предложит обновить сертификаты:
[]Renew certificates? (Yes, No) [No]: Yes[]
[[IMG /opennews/pics_base/CFD0C5CECEC5D4_1677559026.png]]
Дожидаемся окончания работы скрипта.
С узла Ovirt host выводим центр управления ВМ из режима обслуживания:
[root@virt-host1 ~]# hosted-engine --set-maintenance --mode=none
Подключаемся к web-консоли и проверяем дату окончания действия сертификата.
++ Обновление сертификатов после истечения сроков действия
Если вы допустите истечение срока действия сертификатов, то в web-консоль невозможно будет войти.
[[IMG /opennews/pics_base/CFD0C5CECEC5D4_1677559056.png]]
Гипервизоры и центр управления Engine перестанут взаимодействовать.
[[IMG /opennews/pics_base/CFD0C5CECEC5D4_1677559077.png]]
Чтобы восстановить сертификаты выполняем следующие шаги.
Подключаемся через SSH на узел гипервизора oVirt node с истёкщим сертификатом (в примере имя узла virt-host1).
Создаем запрос сертификата на основании ключа службы VDSM /etc/pki/vdsm/keys/vdsmkey.pem
[root@virt-host1 ~]# openssl req -new \
-key /etc/pki/vdsm/keys/vdsmkey.pem \
-out /tmp/test_virt-host1_vdsm.csr \
-batch \
-subj "/"
Подписываем запрос с помощью корневого сертификата oVirt engine, для этого подключаемся через SSH на ВМ с oVirt engine, копируем запрос с oVirt node (virt-host1) на oVirt engine в /tmp и выполняем команды
[root@virt-he ~]# cd /etc/pki/ovirt-engine/
[root@virt-he ~]# openssl ca -batch \
-policy policy_match \
-config openssl.conf \
-cert ca.pem \
-keyfile private/ca.pem \
-days +"365" \
-in /tmp/test_virt-host1_vdsm.csr \
-out /tmp/test_virt-host1_vdsm.cer \
-startdate `(date --utc --date "now -1 days" +"%y%m%d%H%M%SZ")` \
-subj "/O=example.test/CN=virt-host1.example.test\
-utf8
Имя субъекта в сертификате должно быть в формате "/O=example.test/CN=virt-host1.example.test", укажите ваши значения.
Копируем новый сертификат с oVirt engine на oVirt node (virt-host1) в /tmp.
Копируем новый сертификат в каталоги служб предварительно создав копию существующих сертификатов
[root@virt-host1 ~]# cp /etc/pki/vdsm/certs/vdsmcert.pem /etc/pki/vdsm/certs/vdsmcert.pem.bak
[root@virt-host1 ~]# cp /tmp/test_virt-host1_vdsm.cer /etc/pki/vdsm/certs/vdsmcert.pem
[root@virt-host1 ~]# cp /etc/pki/vdsm/libvirt-spice/server-cert.pem /etc/pki/vdsm/libvirt-spice/server-cert.pem.bak
[root@virt-host1 ~]# cp /etc/pki/vdsm/certs/vdsmcert.pem /etc/pki/vdsm/libvirt-spice/server-cert.pem
[root@virt-host1 ~]# cp /etc/pki/libvirt/clientcert.pem /etc/pki/libvirt/clientcert.pem.bak
[root@virt-host1 ~]# cp /etc/pki/vdsm/certs/vdsmcert.pem /etc/pki/libvirt/clientcert.pem
Перезапускаем службы:
[root@virt-host1 ~]# systemctl restart libvirtd
[root@virt-host1 ~]# systemctl restart vdsmd
Проверяем срок действия сертификата
[root@virt-host1 ~]# openssl x509 -noout -enddate -in /etc/pki/vdsm/certs/vdsmcert.pem
Повторяем процедуру на остальных узлах с истёкшим сроком действия сертификатов.
Выполняем обновления сертификатов центра управления, как описано в "Обновление сертификатов oVirt Engine"
Заходим на web-консоль и проверяем работу кластера.
У созданных таким образом сертификатов будет отсутствовать subject alternative name, о чём будет выдано предупреждение (через несколько часов):
Certificate of host virt-host1.example.test is invalid. The
certificate doesn't contain valid subject alternative name, please
enroll new certificate for the host.
Поэтому после восстановления доступа к web-консоли необходимо выполнить обновление сертификатов согласно официальной [[https://www.ovirt.org/documentation/administration_guide/ind... документации]].
++ Обновление сертификатов после истечения сроков действия при недоступном HostedEngine
На практике данное решение не проверялось, но теоретически оно должно сработать.
Если центр управления Engine выключен и не запускается, а в журнале journalctl на гипервизоре появляются записи
libvirtd[2101]: The server certificate /etc/pki/vdsm/certs/vdsmcert.pem has expired
...
systemd[1]: Failed to start Virtualization daemon
Оставляем включенным один гипервизор oVirt node.
Определяем время окончания действия сертификата гипервизора:
[root@virt-host1 ~]# openssl x509 -noout -enddate -in /etc/pki/vdsm/certs/vdsmcert.pem
Устанавливаем дату и время до окончания действия сертификата
[root@virt-host1 ~]# systemctl stop chronyd
[root@virt-host1 ~]# timedatectl set-time "2023-01-01 12:00:00"
Перезапускам службы
[root@virt-host1 ~]# systemctl restart libvirtd
[root@virt-host1 ~]# systemctl restart vdsmd
Подключаемся к libvirtd через virsh и ждём когда запустится HostedEngine
[root@virt-host1 ~]# virsh -c qemu:///system?authfile=/etc/ovirt-hosted-engine/virsh_auth.conf
virsh # list --all
Id Name State
------------------------------
1 HostedEngine running
Выполняем обновление сертификатов по процедуре "Обновление сертификатов до истечения сроков действия"
++ Использованные материалы
[[https://ovirt.org/documentation/administration_guide/index.html Документация oVirt]]
[[https://github.com/natman/ovirt_renew_certs Проект natman]]
[[https://en.wikipedia.org/wiki/OVirt Wikipedia]]
[[https://blog.it-kb.ru/2016/09/10/install-ovirt-4-0-part-1-cr.../ Блог IT-KB]]
URL:
Обсуждается: http://www.opennet.dev/tips/info/3216.shtml