The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Раздел полезных советов: Обновление сертификатов oVirt, auto_tips, 28-Фев-23, 21:17  [смотреть все]
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:
Обсуждается: https://www.opennet.ru/tips/info/3216.shtml




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру