11.05.2022

Apache Guacamole и взаимодействие с API: реальный кейс использования oVirt

server one

Производители оборудования предлагают заказчикам разные методы удаленного управления серверами, не зависящие от операционной системы. Мы уже писали о разработанной специалистами HOSTKEY веб-консоли для материнских плат Supermicro, которая не требует локальной установки Java. Оборудованием Dell тоже можно управлять удаленно с помощью встроенной в DRAC консоли VNC. Рассказываем, как это делать.

Арендуйте выделенные и виртуальные серверы с моментальным деплоем в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.
HOSTKEY

VNC (Virtual Network Computing) — система, обеспечивающая подключение к удаленному компьютеру по протоколу RFB (Remote FrameBuffer). Этот протокол позволяет обслуживать несколько одновременных пользовательских сессий.

Почему Apache Guacamole?

В первой реализации нашего решения требовалось активировать проброс порта удаленного управления и открыть консоль DARC через VNC с помощью специальной кнопки. Потом нужно было дождаться загрузки файла console.vv и открыть его, предварительно установив Virtual Machine Manager tools на локальном компьютере. Метод несложный, но он доставлял пользователям неудобства и приводил к дополнительным ошибкам при работе с арендованным оборудованием.

Access VNC console

Пример файла: console.vv

[virt-viewer]
type=vnc
host=HOST_IP
port=5906
password=3dB2h1Ey/gTb
# Password is valid for 120 seconds.
delete-this-file=1
fullscreen=0
toggle-fullscreen=shift+f11
release-cursor=shift+f12
secure-attention=ctrl+alt+end
versions=rhev-win64:2.0-160;rhev-win32:2.0-160;rhel7:2.0-6;rhel6:99.0-1
newer-version-url=http://www.ovirt.org/documentation/admin-guide/virt/console-client-resources

[ovirt]
host=localhost.localdomain:443
vm-guid=0ecc8183-b0a9-4a95-b045-1967acf2dab7
sso-token=sG6zUyrXT0X8qOkCWoVL_vWLcYTPQfo2hqHrH1AHvXPz4G9PofFlqarEFXcH9bizILPufhF_2KghkD-o5Qxktw
admin=1

Чтобы упростить пользователям жизнь, пришлось реализовать прямой вызов веб-консоли HTML5 из личного кабинета без локальной установки Virtual Machine Manager tools. Для этого мы выбрали Apache Guacamole — свободно распространяемый кроссплатформенный шлюз для удаленных рабочих столов, который поддерживает все популярные протоколы и технологии: Telnet, SSH/SFTP, RDP, Kubernetes, а также VNC (RFB). Важное преимущество Apache Guacamole — он не требует установки клиентских программ или специальных плагинов. Пользователь получает доступ к управлению оборудованием из браузера, нажав одну кнопку в личном кабинете:

Access HTML5 console

Как это работает?

Активировать консоль можно не только в браузере, но и с помощью curl-запроса напрямую к нашему API:

curl -s "https://invapi.hostkey.com/eq.php" -X POST \
--data "action=novnc" \
--data "token=SESSION_TOKEN" \
--data "id=SERVER_ID" \
--data "pin=PIN_CODE"

Пример ответа:

{
"result":"OK",
"scope":"https://rcnl1.hostkey.com:8443/guacamole/#/?username=USER_NAME&password=PASSWORD",
"context":{"action":"novnc","id":"14494","location":"NL"},
"Debug":"debug",
"Key":"36ecafa60a13fd8000dcca73fd9528f5"
}

Пользователю остается дождаться загрузки консоли, но на стороне сервиса процесс выглядит сложнее. Для примера рассмотрим вызов VNC-консоли в браузере.

Общая схема вызова VNC-консоли в браузере из личного кабинета клиента:

Общая схема вызова VNC-консоли

При запросе через Invapi дается команда в API на открытие консоли определенного сервера через кластер брокера сообщений (RabbitMQ). Для этого достаточно передать в брокер сообщений номер сервера.

RabbitMQ передает данные сервера и задачу на созданный нашими специалистами вспомогательный сервис-ресивер. Ресивер забирает данные в RabbitMQ, преобразует всю необходимую информацию, разделяет задачи (например, oVirt, Cisco, IPMI и т. д.) и отправляет их агенту (fence agent).

Чтобы управлять виртуальными машинами через API или через web-интерфейс, мы выбрали oVirt. Система использует гипервизор KVM и основана на нескольких проектах, в том числе libvirt, Gluster, PatternFly и Ansible. Она достаточно проста в эксплуатации и отличается высокой надежностью. Подробнее о нашем опыте интеграции oVirt в рабочую инфраструктуру речь пойдет в отдельной статье.

Структура oVirt fence agent:

inputRawURLConsole := inputRawURL + "/vms" + "/" + vm.MustId() + "/graphicsconsoles" + "/" + Vnc
//
……..
//
url := noVncURL + url + "/skey/" + *key + "/id/" + *name + "/ovirt/pass/" + passwd_encode + "/port/" + port + "/location/" + *location1

item := APICallBack{Result: "OK", Debug: "debug"}
item.Message = string(body)
jitem, err := json.Marshal(item)
if err != nil {
	fmt.Println(err.Error())
	return
}

fmt.Println(string(jitem))

Fence agents соответствуют типам используемого в нашей инфраструктуре оборудования. Они обращаются на сервер с docker-novnc, у которого есть доступ в сеть oVirt. Агент загружает консоль и забирает необходимые параметры хоста (IP и пароль), после чего декодирует полученные данные и отправляет запрос к API noVnc на роутер oVirt, откуда происходит обмен данными с API Guacamole. Агент передает на сервер запрос GET, в котором содержится IP-адрес и ID сервера, а также сессионный токен для сервера.

Структура запроса:

r.Get("/{id}/skey/{key}/id/{uid}/ovirt/pass/{upass}/port/{uport}/location/{uloc}", StageHandler)

После завершения обработки запроса клиент получает доступ к управлению оборудованием через консоль VNC.

Пример открытой консоли для Windows:

Пример открытой консоли для Windows

Пример открытой консоли для CentOS:

Пример открытой консоли для CentOS

Проблема горячих клавиш

Определенные комбинации клавиш невозможно нажать в веб-приложении, поскольку они зарезервированы ОС (например, Ctrl-Alt-Del или Alt-Tab) или браузером. Эту проблему можно решить с помощью вызова меню навигации Apache Guacamole с помощью комбинации клавиш Ctrl-Alt-Shift (скрыть меню позволяет повторное нажатие этой комбинации). В нем можно выбрать метод ввода (текст, экранная клавиатура), включить режим эмуляции мыши, выбрать язык и часовой пояс, а также закрыть рабочую сессию.

Англоязычная версия меню навигации:

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

Заключение

Использование Apache Guacamole упрощает управление серверным оборудованием различных производителей. В будущем мы планируем разработать решение, позволяющее избежать автоматического закрытия консоли спустя два часа.

Арендуйте выделенные и виртуальные серверы с моментальным деплоем в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

Другие статьи

01.06.2023

Сравниваем процессоры Ryzen 9 7950X и Ryzen 9 5950X в тестах

Сравниваем новый CPU Ryzen 9 7950X с Ryzen 9 5950X: рассказываем об их характеристиках и оцениваем эффективность в решении бизнес-задач.

27.05.2023

Сервер с собственным облаком

Мощный и удобный инструмент для хранения и обмена файлами, который обеспечит безопасность и конфиденциальность данных.

09.05.2023

Настройка автоматической установки TrueNAS

Частые проблемы при реализации автоматической установки TrueNAS SCALE на сервере и их решения.

09.05.2023

Настройка сервера для Rocket.Chat

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

23.04.2023

Персональный VPN сервер в Европе, США и России

Закажите персональный VPN сервер в Нидерландах, Финляндии, США или России за рубли

HOSTKEY Выделенные серверы в Европе, России и США Готовые выделенные серверы и серверы индивидуальных конфигураций на базе процессоров AMD, Intel, карт GPU, Бесплатной защитой от DDoS -атак и безлимитный соединением на скорости 1 Гбит/с 30
4.3 48 48
Upload