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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

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

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

Почему Apache Guacamole?

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

Пример файла: 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. Для этого мы в HOSTKEY выбрали Apache Guacamole — свободно распространяемый кроссплатформенный шлюз для удаленных рабочих столов, который поддерживает все популярные протоколы и технологии: Telnet, SSH/SFTP, RDP, Kubernetes, а также VNC (RFB). Важное преимущество Apache Guacamole — он не требует установки клиентских программ или специальных плагинов. Пользователь получает доступ к управлению оборудованием из браузера, нажав одну кнопку в личном кабинете:

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

Активировать консоль можно не только в браузере, но и с помощью 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-консоли в браузере из личного кабинета клиента:

При запросе через 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:

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

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

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

 

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

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

Заключение

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

___

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

А специальный промокод «Я С ХАБРА» откроет врата щедрости: назовите его консультанту на сайте при размещении заказа — и получите дополнительную скидку. Платить можно как всегда в рублях с НДС российской компании или в евро — компании в Нидерландах.

Источник: https://habr.com/ru/company/hostkey/blog/665810/


Интересные статьи

Интересные статьи

Представьте, что вам нужно внедрить файрвол в инфраструктуре предприятия N — крупной компании с сотнями филиалов, несколькими ЦОДами и большим количеством взаимодействий с внешними организациями. Зака...
Пожалуй, каждый разработчик сталкивается с ситуациями, когда два и более компонентов оказываются тесно связаны логически, но в DOM отображаются раздельно, вперемешку с другими элементами UI. Лобовое р...
Сегодня специалисты по анализу корпоративных данных стремятся максимально эффективно использовать свои платформы. Хранилище данных играет одну из самых важных ролей, это основа для всех вычислительных...
Операции Join часто используются в типовых потоках анализа данных для корреляции двух наборов данных. Apache Spark, будучи унифицированным аналитическим движком, также об...
Уже более двух лет data build tool активно используется в компании Wheely для управления Хранилищем Данных. За это время накоплен немалый опыт, мы на тернистом пути проб ...