Настройка платформы¶
Содержание
Важно
Вначале необходимо произвести настройку окружения. Все команды выполняются только от суперпользователя.
Режим суперпользователя:
sudo -i
Важно
Установка производится на управляющий узел. Для работы модуля необходимо установить службу OpenStack Nova API.
Введение¶
Для поддержки протокола SPICE платформой TIONIX необходимо включить поддержку SPICE в Nova, установить в клиентскую систему TIONIX.VDIclient и обновить пакеты модулей TIONIX.VDIserver и TIONIX.Client. Также на всех вычислительных узлах необходимо наличие установленного TIONIX.Agent с типом spice_proxy
.
Настройка поддержки протокола SPICE в OpenStack Nova¶
Примечание
Все действия выполняются на вычислительных узлах с запущенной службой Nova.
Включите протокол SPICE. Для этого в
/etc/nova/nova.conf
укажите необходимые параметры:[spice] agent_enabled = True enabled = True keymap = en-us server_listen = 127.0.0.1 html5proxy_host = 0.0.0.0 html5proxy_port = 6082 # For usb redirection usb_controller_type = XHCI
Где:
agent_enabled
- включает поддержку VDI-агента, который необходимо запустить внутри гостевой ОС. Он предоставляет улучшенные функции по работе input-устройств, типа мыши и улучшает поддержку мультимониторности (только для QXL-драйвера). В зависимости от операционной системы:- В Linux достаточно установить пакет spice-vdagent.
- Для Windows нужно установить guest-tools из пакета virtio-win.
enabled
- параметр, включающий протокол SPICE в процессе виртуальной машины;keymap
- необязательный параметр, включающий по умолчанию карту символов. Желательно всегда использовать значениеen-us
, ввод кириллицы корректно работает с этой настройкой;server_listen
- адрес прослушивания для порта SPICE в процессе виртуальной машины. Всегда должен быть установлен равным127.0.0.1
для предотвращения появления SPICE-сессии в сети в беспарольном режиме;html5proxy_host
- адрес прокси-сервера Nova для SPICE. Нужен для подключения к сессии SPICE noVNC-сервисом;html5proxy_port
- порт прокси-сервера Nova для SPICE. Нужен для подключения к сессии SPICE noVNC-сервисом;usb_controller_type
- тип USB-интерфейса. Возможные значения:XHCI
интерфейс USB, который поддерживает USB 1.1, 2.0 и 3.0. Используется по умолчанию;EHCI+UHCI
интерфейсы USB, которые поддерживают USB 1.1, 2.0 и 1.1 соответственно.
Важно
Для корректного включения устройств перенаправления USB необходимо наличие TIONIX.Agent и включение драйвера
TnxLibvirtDriver
на вычислительном узле, а также указания следующих параметров вDEFAULT
конфигурации Nova:[DEFAULT] ... compute_driver = tnx_libvirt.TnxLibvirtDriver
¶ Хостовая операционная система Гостевая операционная система XHCI EHCI+UHCI Linux Linux Linux Windows 7 Linux Windows 10 Windows 7 Linux Windows 7 Windows 10 Windows 10 Windows 10 Windows 10 Linux
Также рекомендуется явно выключить поддержку VNC-консоли:
[vnc] enabled = False
Выполните команду:
systemctl restart openstack-nova-compute.service
При подключении к уже существующим виртуальным машинам необходимо выполнить жесткую перезагрузку машины, чтобы новые настройки были применены. Для новых виртуальных машин параметры SPICE уже будут указаны.
Включение шифрования в SPICE-сессиях¶
Примечание
Настройка производится в конфигурационном файле VDI-брокера, расположенном на контроллере.
Примечание
Для полноценной работы шифрования по протоколу SPICE требуется, чтобы серверный сертификат содержал SAN с указанием DNS вычислительных узлов.
Для включения шифрования в
/etc/tionix/vdi_server.yaml
необходимо указать соответствующий параметр (по умолчанию -False
):VDI_TLS_ENABLED: True
После включения самой функции необходимо указать путь до серверного сертификата в вычислительных узлах:
TLS_SERVER_CERT: '/etc/pki/tls/tionix/vdi.pem'
Если CA-сертификат серверного сертификата будет отсутствовать в системном хранилище CA в вычислительных узлах, то его путь можно указать отдельным параметром:
CA_CERT: '/etc/pki/tls/tionix/ca.crt'
Дополнительно можно указать параметры поддомена для VDI-адресов и таймаут ответа от HAProxy (указанные значения - по умолчанию):
VDI_HOST_SUBDOMAIN: 'vdi' HAPROXY_TCP_REQUEST_TIMEOUT: 30000
Для принятия изменений перезапустите службы TIONIX:
systemctl restart tionix-*
Настройка DNS¶
Примечание
Предполагается, что DNS-сервер уже имеется в инфраструктуре заказчика. Сами адреса DNS нужно указывать в контроллерах облачной платформы, вычислительных узлах и клиентских машинах. Главное правило: все они должны видеть одну и ту же DNS-зону.
Для полноценной работы шифрования все соединения должны использовать доменные имена. Поэтому во всех машинах, где задействуются функции VDI, должен быть указан адрес DNS-сервера с зоной для адресов вычислительных узлов в сети VDI.
Особой настройки не требуется, главное, чтобы в конфигурационном файле /etc/resolv.conf
были настроены адреса DNS.
Для прокси-сервера в HAProxy DNS предоставляет ещё одну функцию: она позволяет открыть порт прокси для сервера VDI в соответствующем интерфейсе. Об этом будет сказано далее.
Установка и настройка HAProxy¶
Примечание
HAProxy и интерпретатор Lua устанавливаются на вычислительных узлах. Запуском сервиса HAProxy управляет TIONIX.Agent.
Установка¶
Перед установкой новой версии HAProxy необходимо удалить старую. Проверить установлен ли HAProxy можно при помощи команды:
rpm -qa | grep "haproxy"
Для удаления старой версии HAProxy без удаления зависимостей используйте команду:
rpm -e --nodeps haproxy-1.5.18-9.el7.x86_64
Установите HAProxy:
yum install --disablerepo=* --enablerepo=tionix-extras haproxy
Настройка¶
Настройте конфигурационный файл
/etc/haproxy/haproxy.cfg.template
:global daemon maxconn 256 user root group root chroot /var/lib/haproxy defaults mode tcp option tcpka option tcplog timeout connect 5000ms timeout client 24h timeout server 24h
Отдельно необходимо отметить про параметры в
defaults
:option tcpka
- необходим для нормального функционирования keep-alive-пакетов;option tcplog
- будет сохранять в журналах информацию от TCP-сессиях;timeout client
- таймаут для клиента. Значение в 24 часа необходимо для обхода проблемы разрыва соединений до SPICE-серверов из-за отсутствия учета активности в сессиях;timeout server
- таймаут для сервера. Значение в 24 часа необходимо для обхода проблемы разрыва соединений до SPICE-серверов из-за отсутствия учета активности в сессиях.
Настройте постоянное HTTP-соединение на уровне операционной системы:
/proc/sys/net/ipv4/tcp_keepalive_time /proc/sys/net/ipv4/tcp_keepalive_intvl /proc/sys/net/ipv4/tcp_keepalive_probes
Все остальные изменения конфигурации будут применены VDI-брокером.
Lua¶
Для полноценной работы скрипта, который должен проверять валидность токена сессии, необходимо обновить пакет Lua. Системный пакет трогать нельзя (из-за того, что система управления пакетами RPM используется системный Lua 5.1), поэтому был подготовлен пакет RPM с Lua версии 5.3, который устанавливается в локальный префикс приложений.
Установите пакет Lua 5.3:
yum install --disablerepo=* --enablerepo=tionix-extras lua
Убедитесь, что при запуске приложения Lua в терминале загружается версия 5.3. Для этого выполните команду
lua
от суперпользователя. Пример вывода команды:[root@haproxy-2-0-test ~]# lua Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio >
Также внутри самого скрипта для HAProxy можно проверить версию интерпретатора: для этого просто выведите системную переменную
_VERSION
:print(_VERSION)
Скрипт верификации токена сессии¶
Для того, чтобы HAProxy мог узнать, тот ли пользователь подключился к сессии, ему нужно указать специально подготовленный скрипт Lua. Установите RPM-пакет при помощи команды:
yum install --disablerepo=* --enablerepo=tionix-extras tionix-haproxy-extensions
В секцию
global
файла/etc/haproxy/haproxy.cfg.template
укажите путь до этого скрипта, а также переменную окруженияvdibroker-addr
с указанием IP-адреса и порт брокера (доменные имена пока не поддерживаются):global ... lua-load /usr/local/share/lua/5.3/validate-token-action.lua setenv vdibroker-addr $BROKER_IP:9365
Пример готовой конфигурации шаблона HAProxy -
/etc/haproxy/haproxy.cfg.template
:global daemon chroot /var/lib/haproxy user root group root maxconn 256 lua-load /usr/local/share/lua/5.3/validate-token-action.lua setenv vdibroker-addr $BROKER_IP:9365 log 127.0.0.1:514 local2 defaults log global mode tcp option tcplog timeout connect 5000ms timeout client 24h timeout server 24h option tcpka
Конфигурация фронтенда HAProxy¶
Примечание
Конфигурация фронтенда и бэкенд генерируются автоматически средствами TIONIX.Agent. Настраивать ее вручную не нужно.
После выполнения всех пунктов настроек фронтенд в HAProxy должен иметь следующий вид:
frontend $instance_uuid mode tcp bind vdi.$cloud_hypervisor_hostname:$port ssl verify optional crt /etc/pki/tls/tionix/vdi.pem use_backend $instance_uuid
Где адрес
vdi.$cloud_hypervisor_hostname
должен резолвить адрес интерфейса вычислительного узла, который находится в сети VDI. Это необходимо, чтобы фронтенд открыл порт в нужном интерфейсе.Описание синтаксиса указания адреса:
vdi
- поддомен основного доменного пути;$cloud_hypervisor_hostname
- имя хоста гипервизора в облаке. Обычно он имеет видcn-FFLLLL.customer_domain
, гдеFF
- это первые иLLLL
- последние четыре символа строкиproduct_uuid
у вычислительного узла.
В случае, если в конфигурацию необходимо добавить CA-сертификат, то в
bind
нужно добавить дополнительные параметры:bind vdi.$cloud_hypervisor_hostname:$port ... ca-file /etc/pki/tls/tionix/ca.crt
Настройте конфигурационный файл бэкенда, он должен включать в себя адрес конечного сервера и скрипт валидации принятого токена:
backend $instance_uuid mode tcp tcp-request inspect-delay 30s tcp-request content lua.validate_token_action tcp-request content accept if { var(req.allow) -m bool } tcp-request content reject server $instance_uuid 127.0.0.1:$port
Адрес сервера SPICE всегда должен быть равен адресу
127.0.0.1
, как и в конфигурации Nova, шифрование данных между бэкендом и самим сервером SPICE включать не требуется.
Требования к сертификатам TLS для протокола SPICE¶
При подключении к SPICE-серверу по протоколу TLS, клиент SPICE по умолчанию и в обязательном порядке верифицирует получаемый при соединении сертификат на инициалиацию канала шифрования. В частности:
- клиент SPICE проверяет, что сертификат был выдан корректным центром сертификации, который имеется в ОС, откуда производится подключение;
- сертификат должен содержать SAN или Subject Alternative Names, в котором указывается список доменных адресов подключения;
- клиент проверяет в строгом соответствии, то есть имя домена должно быть явно указано в SAN сертификата. Wildcard-сертификаты в SAN не поддерживается.
Так же нужно учитывать то, что брокер настраивает доступ до SPICE-сессии через отдельный интерфейс и с использованием сети, отличной от управляющей или вычислительной сети. Для адресов в этой сети брокер добавляет поддомен "vdi", который требуется добавить в зону DNS. То есть если в управляющей сети у вычислительного узла будет имя compute1.tionix.loc
, то брокер для подключения клиенту будет предлагать адрес vdi.compute1.tionix.loc
.
Отсюда вытекают следующие требования к сертификатам:
- Обязательным требованием по шифрованию является наличие зоны DNS для вычислительных узлов (как часть корпоративного DNS или внутреннего сервиса) и в частности в эту зону должны быть включены имена для сети VDI. Этот DNS должен быть доступен как для вычислительных узлов, так и для клиентов.
- В промышленной среде всегда используйте сертификаты из аккредитованных центров сертификации. Это может быть как внутренний PKI, так и внешние службы CA типа Let's Encrypt. Иными словами, в ОС клиентов сертификат CA должен быть зарегистрирован в хранилище CA.
- Так как клиент строго проверяет соответствие имени домена для сети VDI и SAN, то лучше всего для каждого вычислительного узла сгенерировать свой личный сертификат с SAN с явным указанием его доменного имени в сети VDI в теле сертификата.
- Этот сертификат вместе с ключом в виде отдельного файла должен быть добавлен в службу прокси для возможности инициирования канала шифрования, а путь до сертификата должен быть указан в параметрах брокера.
Пример настройки SAN в теле сертификата для вычислительного узла с доменным именем compute1.tionix.loc
в управляемой сети:
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
fc:74:bd:31:c1:a7:74:82:28:d3:60:04:60:85:5c:c5
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=compute1
Validity
Not Before: Apr 8 15:09:06 2021 GMT
Not After : Jul 12 15:09:06 2023 GMT
Subject: CN=vdi-compute1-tionix-loc
...
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Subject Key Identifier:
2C:7A:57:55:BA:F3:F0:EF:43:89:E7:34:6B:E5:1A:FB:44:A7:C0:07
X509v3 Authority Key Identifier:
keyid:8C:5B:ED:71:58:F1:56:C4:EA:DF:32:6C:59:DC:B1:7D:C0:4C:13:FB
DirName:/CN=compute1
serial:99:4C:F4:09:2F:53:00:33
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Key Usage:
Digital Signature, Key Encipherment
X509v3 Subject Alternative Name:
DNS:vdi.compute1.tionix.loc
Примечание
В DNS:vdi.compute1.tionix.loc
- указан адрес вычислительного узла в сети VDI.