Настройка Консоли Spice Для Виртуальных Машин В Openstack

Эта статья будет интересна администраторам облачной платформы OpenStack. Мы поговорим об отображении консоли виртуальных машин в дашборде.

Дело в том, что OpenStack по умолчанию использует консоль noVNC, которая с приемлемой скоростью работает внутри локальной сети, но плохо подходит для работы с виртуальными машинами, работающими в удаленном дата-центре.

При этом отзывчивость консоли, мягко говоря, удручает. В этой статье мы поговорим о том, как настроить гораздо более быстрый OpenStack в вашей установке.

консоль SPICE .

OpenStack имеет два протокола графической консоли виртуальных машин — VNC и SPICE. Из коробки поставляется веб-реализация клиента VNC — noVNC. Гораздо меньше людей знают о SPICE. В общем, SPICE — это протокол удаленного доступа, поддерживающий массу полезных вещей, таких как потоковое видео, передача звука, копирование-вставка, переадресация по USB и многое другое.

Однако панель управления Openstek использует SPICE-HTML5 веб-клиент, который не поддерживает все эти функции, но очень качественно и быстро отображает консоль виртуальной машины, то есть делает именно то, что нужно.



Настройка консоли SPICE для виртуальных машин в OpenStack

В официальной документации ( ссылка1 , ссылка2 ) OpenStack имеет довольно много информации по настройке консоли SPICE. Кроме того, там написано, что «для получения доступа к консоли SPICE необходимо явно отключить VNC».

Это не совсем так, скорее дело в том, что если включена консоль VNC, вы не сможете использовать консоль SPICE из дашборда (но API, то есть «nova get- spice-console», используя python-novaclient).

Кроме того, консоль SPICE будет доступна только для новых виртуальных машин; старые, до полной перезагрузки, изменения размера или миграции, по-прежнему будут использовать только VNC. Итак, в этой статье я использовал две версии OpenStack от Mirantis: Kilo (Mirantis OpenStack 7.0) и Mitaka (Mirantis OpenStack 9.0).

Как и во всех корпоративных дистрибутивах, используется конфигурация с тремя узлами контроллера и HTTPS на внешнем интерфейсе.

Гипервизор qemu-kvm, везде операционная система Ubuntu 14.04, развертывание в облаке осуществлялось через Fuel. Конфигурация влияет как на узлы контроллера, так и на компьютер.

На узлах контроллера делаем следующее.

Установите сам пакет spice-html5:

  
  
  
  
  
  
  
  
  
  
  
  
  
  
   

apt-get install spice-html5

Вписываем в конфиг Новы следующие значения: /etc/nova/nova.conf

[DEFAULT] ssl_only = True cert = '/path/to/SSL/cert' key = '/path/to/SSL/key' web=/usr/share/spice-html5 [spice] spicehtml5proxy_host = :: html5proxy_base_url = https://<FRONTEND_FQDN>:6082/spice_auto.html enabled = True keymap = en-us

где — это полное доменное имя вашей информационной панели Horizon. Очевидно, что сертификат и ключ, указанные выше, должны соответствовать FRONTEND_FQDN, иначе современный браузер не позволит виджету SPICE работать.

Если ваш Horizon не использует HTTPS, вам не нужно настраивать SSL. Чтобы одновременно запустить noVNC и SPICE, вам нужно проделать следующий трюк:

cp -r /usr/share/novnc/* /usr/share/spice-html5/

Для работы по HTTPS необходимо использовать Secure Websockets, для этого вам придется отредактировать файл /usr/share/spice-html5/spice_auto.html. В этом разделе кода вам нужно изменить «ws://» на «wss://».

/usr/share/spice-html5/spice_auto.html

function connect() { var host, port, password, scheme = "wss://", uri;

Опять же, для одновременной работы noVNC и SPICE нужно подправить скрипты-выскочки /etc/init/nova-novncproxy.conf и /etc/init/nova-spicehtml5proxy.conf. В обоих скриптах нужно закомментировать одну строку: /etc/init/nova-spicehtml5proxy.conf

script [ -r /etc/default/nova-consoleproxy ] && .

/etc/default/nova-consoleproxy || exit 0 #[ "${NOVA_CONSOLE_PROXY_TYPE}" = "spicehtml5" ] || exit 0

/etc/init/nova-novncproxy.conf

script [ -r /etc/default/nova-consoleproxy ] && .

/etc/default/nova-consoleproxy || exit 0 #[ "${NOVA_CONSOLE_PROXY_TYPE}" = "novnc" ] || exit 0

Собственно, это позволяет убрать проверку типа консоли из файла /etc/default/nova-consoleproxy. Теперь нужно поправить конфиги Haproxy: /etc/haproxy/conf.d/170-nova-novncproxy.cfg

listen nova-novncproxy bind <PUBLIC_VIP>:6080 ssl crt /var/lib/astute/haproxy/public_haproxy.pem no-sslv3 no-tls-tickets ciphers AES128+EECDH:AES128+EDH:AES256+EECDH:AES256+EDH balance source option httplog option http-buffer-request timeout http-request 10s server controller1 192.168.57.6:6080 ssl verify none check server controller2 192.168.57.3:6080 ssl verify none check server controller3 192.168.57.7:6080 ssl verify none check

/etc/haproxy/conf.d/171-nova-spiceproxy.cfg

listen nova-novncproxy bind <PUBLIC_VIP>:6082 ssl crt /var/lib/astute/haproxy/public_haproxy.pem no-sslv3 no-tls-tickets ciphers AES128+EECDH:AES128+EDH:AES256+EECDH:AES256+EDH balance source option httplog timeout tunnel 3600s server controller1 192.168.57.6:6082 ssl verify none check server controller2 192.168.57.3:6082 ssl verify none check server controller3 192.168.57.7:6082 ssl verify none check

где PUBLIC_VIP — IP-адрес, на котором висит FRONTEND_FQDN. Наконец, давайте перезапустим службы на узлах контроллера:

service nova-spicehtml5proxy restart service apache2 restart crm resource restart p_haproxy

здесь p_haproxy — ресурс Pacemaker для Haproxy, через который работают многочисленные сервисы OpenStack. На каждом вычислительном узле нужно внести изменения в конфиг Nova: /etc/nova/nova.conf

[spice] spicehtml5proxy_host = :: html5proxy_base_url = https://<FRONTEND_FQDN>:6082/spice_auto.html enabled = True agent_enabled = True server_listen = :: server_proxyclient_address = COMPUTE_MGMT_IP keymap = en-us

здесь COMPUTE_MGMT_IP — адрес интерфейса управления данного вычислительного узла (у Mirantis OpenStack есть разделение на сети общего пользования и сети управления).

После этого необходимо перезапустить сервис nova-compute:

service nova-compute restart

Теперь один важный момент. Выше я уже писал, что VNC не отключаем, потому что.

в этом случае существующие виртуальные машины потеряют консоль в Дашборде.

Однако если мы разворачиваем облако с нуля, то имеет смысл полностью отключить VNC. Для этого нужно в конфиге Новы на всех узлах установить следующее:

[DEFAULT] vnc_enabled = False novnc_enabled = False

Но так или иначе, если мы активируем VNC и SPICE вместе в облаке, в котором уже запущены виртуальные машины, то после всех описанных выше действий внешне ничего не изменится ни для уже работающих виртуальных машин, ни для новых - консоль noVNC. все равно откроется.

Если вы посмотрите в настройках Horizon, тип используемой консоли контролируется следующей настройкой: /etc/openstack-dashboard/local_settings.py

# Set Console type: # valid options would be "AUTO", "VNC" or "SPICE" # CONSOLE_TYPE = "AUTO"

По умолчанию установлено значение AUTO, то есть тип консоли выбирается автоматически.

Но что это значит? Дело в одном файле, где выставлен приоритет консолей: /usr/share/openstack-dashboard/openstack_dashboard/dashboards/project/instances/console.py

.

CONSOLES = SortedDict([('VNC', api.nova.server_vnc_console), ('SPICE', api.nova.server_spice_console), ('RDP', api.nova.server_rdp_console), ('SERIAL', api.nova.server_serial_console)]) .



Как видите, консоль VNC, если она доступна, имеет приоритет. Если его нет, то будет производиться поиск консоли SPICE. Имеет смысл поменять местами первые два пункта, тогда существующие виртуальные машины продолжат работать с медленным VNC, а новые — с новым быстрым SPICE. Именно то, что вам нужно! Субъективно можно сказать, что консоль SPICE очень быстрая.

В режиме без графики тормозов вообще нет, в графическом режиме все работает так же быстро, а по сравнению с протоколом VNC просто небо и земля! Так что рекомендую всем! На этом настройку можно считать завершенной, но в конце я покажу, как на самом деле выглядят обе эти консоли в XML-конфиге libvirt:

<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'> <listen type='address' address='0.0.0.0'/> </graphics> <graphics type='spice' port='5901' autoport='yes' listen='::' keymap='en-us'> <listen type='address' address='::'/> </graphics>

Очевидно, что если у вас есть сетевой доступ к вычислительному узлу виртуальной машины, вы можете использовать любой другой клиент VNC/SPICE вместо веб-интерфейса, просто подключившись к указанному выше TCP-порту в конфигурации (в данном случае 5900 для VNC и 5901).

для СПАЙСА).

Теги: #Виртуализация #Системное администрирование #Облачные вычисления #Конфигурация Linux #kvm #openstack #Spice #openstack nova

Вместе с данным постом часто просматривают: