Для удаленного доступа к физическим серверам клиенты хостеров используют программные средства, которые работают только при наличии операционной системы и специального софта.
Если система не установлена или возникли какие-то проблемы с ее настройкой (например, при попытке изменить правила межсетевого экрана), доступ можно потерять. В таких ситуациях на помощь приходят специализированные контроллеры, позволяющие управлять серверами без ОС, как если бы вы сидели за физической консолью. Рассказываем, как это работает у нас в HOSTKEY.
Проблемы традиционных решений
Обычным методом организации удаленного доступа к арендованным серверам считается управление на основе IPMI* — запуск Java-плагина KVM.
* IPMI — интеллектуальный интерфейс управления платформой (отраслевой стандарт).
Для доступа к консоли нашим клиентам приходилось выполнять множество действий: активировать подключение, ждать, пока система выполнит проброс серого адреса, создавать временную учетную запись, переходить по ссылке с IP-адресом, авторизоваться в веб-интерфейсе и использовать интегрированный в сервер модуль IPMI.
На клиентском устройстве требовалось установить программное обеспечение Java, что часто приводило к повышенной нагрузке на службу поддержки: не всем пользователям удавалось запустить скачанную консоль, были проблемы с версиями ПО, с запуском на Мас и т. д.
Эти недостатки стимулировали нас разработать более удобный и простой в обращении механизм управления оборудованием. Идея довольно очевидна: чтобы клиенту не пришлось устанавливать и настраивать софт, нужно сделать все на стороне хостера в безопасном виртуальном окружении.
Мы создали HOSTKEY INVAPI — сервисную панель, позволяющую выполнять любые действия по управлению оборудованием: от заказа серверов до переустановки ОС. Панель реализована в виде одностраничного веб-приложения, а все ее функции доступны также через API. Действия пользователя и запросы к API можно отслеживать в браузере через консоль разработчика (вызывается по Ctrl + Shift + I). Это позволяет анализировать все вызовы для отладки интеграции. Более подробно о концепции Invapi и процессе ее создания мы расскажем в отдельной статье.
Внутреннее устройство INVAPI
Чтобы избавить пользователей от лишних телодвижений, мы реализовали прямой вызов веб-консоли HTML5 из личного кабинета без локальной установки Java. Для практического воплощения идеи был использован Docker, а в основу решения легли сборки NoJava-IPMI-KVM-Server и ipmi-kvm-docker. Панель поддерживает материнские платы Supermicro до поколения 10X включительно, поскольку одиннадцатое поколение уже оснащено средством просмотра HTML5 Supermicro iKVM/IPMI.
Для доступа к консоли пользователю достаточно нажать кнопку:
Активировать консоль также возможно с помощью запроса напрямую к 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":"http://rcnl1.hostkey.com:32800/vnc.html?host=IP ХОСТА&port=32800&autoconnect=true&password=YVhMxxhiuTpe3mH6y3ry",
"context":{"action":"novnc","id":"25250","location":"NL"},
"debug":"debug",
"key":"71ccb18b1fa499458526acc15fb6a40b"
}
Остается дождаться загрузки консоли — и можно работать, хотя внутреннее устройство процесса получения доступа выглядит сложнее. Для примера рассмотрим вызов HTML5-консоли для сервера с IPMI.
Общая схема вызова веб-консоли HTML5 из личного кабинета клиента:
При запросе через INVAPI дается команда в API на открытие консоли для определенного сервера через кластер брокера сообщений (RabbitMQ). Для вызова консоли достаточно передать в брокер сообщений IP-адрес сервера и его локацию (наши серверы расположены в Нидерландах, США и России).
RabbitMQ передает данные сервера и задачу на открытие консоли созданному нашими специалистами вспомогательному сервису-ресиверу. Ресивер забирает данные, преобразует всю необходимую информацию, разделяет задачи (например, Cisco, IPMI и т. д.) и направляет их агентам.
Агенты (fence agents) соответствуют типам используемого в нашей инфраструктуре оборудования. Они обращаются на сервер с Docker-novnc, у которого есть доступ в закрытую сеть IPMI. Агент передает на сервер с Docker-novnc GET-запрос, в котором содержится IP-адрес и ID сервера, сессионный токен, а также ссылка на закрытие сеанса.
Структура запроса:
http://rcnl1.hostkey.com:ПОРТ/api/v1/server/IP_СЕРВЕРА/skey/КЛЮЧ_ЗАПРОСА/ID_СЕРВЕРА/closeurl/ССЫЛКА_НА_ЗАКРЫТИЕ
Содержание контейнера:
Xvfb — X11 в виртуальном фрейм-буфере;
x11vnc — сервер VNC, который очищает указанный сервер X11;
noNVC — просмотрщик VNC на HTML5;
Fluxbox — оконный менеджер;
Firefox — браузер для просмотра консолей IPMI;
Java-плагин — Java требуется для доступа к большинству консолей IPMI KVM.
NoJava-IPMI-KVM-Server — это сервер на основе Python, позволяющий централизованно предоставлять sciapp/nojava-ipmi-kvm через браузер. Решение не требует установки Java или nojava-ipmi-kvm на локальных устройствах.
Ссылка для автоматического завершения сеанса добавлена нами для удобства пользователя и обеспечения безопасности оборудования: при отсутствии активности в течение определенного времени консоль будет закрыта автоматически. Этот вызов стартует сервис, запускающий контейнер с Docker-novnc, в котором содержится внешний IP-адрес для открытия консоли. Полное описание сборки и процесса установки контейнера NoJava-IPMI-KVM можно найти на GitHub.
Пример конфигурационного файла (~/.nojava-ipmi-kvmrc.yaml):
templates:
kvm-openjdk-7u51:
skip_login: False
login_user: ADMIN
login_endpoint: rpc/WEBSES/create.asp
allow_insecure_ssl: False
user_login_attribute_name: WEBVAR_USERNAME
password_login_attribute_name: WEBVAR_PASSWORD
send_post_data_as_json: False
session_cookie_key: SessionCookie
download_endpoint: Java/jviewer.jnlp
java_version: 7u51
format_jnlp: False
Запуск контейнера Docker:
usr/bin/nojava-ipmi-kvm -i 10.77.21.239 -u ADMIN -p PASSWD mykvmhost
[INFO] Check if 'http://10.77.21.239/' is reachable...
[INFO] The url 'http://10.77.21.239/' is reachable.
[INFO] Starting the Docker container...
[INFO] Waiting for the Docker container to be up and ready...
[INFO] Docker container is up and running.
[INFO] Url to view kvm console: http://IP_SERV:ID_SERV/vnc.html?host=IP_SERV&port=32769&autoconnect=true&password=PASSWD
http://IP_SERV:ID_SERV/vnc.html?host=IP_SERV&port=ID_SERV&autoconnect=true&password=PASSWD
Скрипт для запуска сервиса:
#/bin/python3
# EASY-Install-Entry_Script: 'nojava-ipmi-kvm==0.9.0', 'console_scripts', 'nojava-ipmi-kvm'
__requires__ = 'nojava-ipmi-kvm==0.9.0'
import re
import sys
from pkg_resources import load_entry_point
if __name__ == ' __main__ ':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(
load_entry_point('nojava-ipmi-kvm==0.9.0', 'console_scripts', 'nojava-ipmi-kvm')()
)
Итоги
Внедрение нового решения значительно упростило для конечных пользователей процесс управления оборудованием Supermicro, а также снизило нагрузку на нашу службу поддержки. Для серверов с доступом по протоколу VNC мы реализовали консоль HTML5 с помощью Apache Guacamole, что также позволило упростить управление «железом» других производителей.
Кстати, в нашей панели управления серверами HOSTKEY кроме описанных возможностей планируется расширение функциональности. Если вас интересуют дополнительные функции и особенности работы панели или нашего API – пишите в комментариях.
Комментарии (15)
Alexsey
16.04.2022 04:40+2Отличная штука этот NoJava-IPMI-KVM-Server, и как я про него раньше не слышал.
Если кому нужно накидал конфиг для supermicro, по идее должен заработать если не на всех платах с java kvm, то на многих:
templates: supermicro: skip_login: False login_user: ЛОГИН_АДМИНА login_endpoint: /cgi/login.cgi allow_insecure_ssl: True user_login_attribute_name: name password_login_attribute_name: pwd send_post_data_as_json: False session_cookie_key: SID download_endpoint: /cgi/url_redirect.cgi?url_name=ikvm&url_type=jwsk java_version: 7u51 format_jnlp: False hosts: myhost: based_on: supermicro full_hostname: АДРЕС_ВЕБ_ИНТЕРФЕЙСА_IPMI
Altaev
16.04.2022 10:45С вашим сайтом что-то не то (актуальная версия Хрома на Андроид, никаких дополнений).
ULP
16.04.2022 10:47Интересно.. А откуда этот снапшот? На сайте www.hostkey.ru иной шаблон. Тут я вижу валюта попутана и количество доступных машин не показывает
Altaev
16.04.2022 17:56+1hostkey.ru/instant-servers/dedicated/ выбрать локацию RU, затем выше нажать «Выбрать сервер»
edo1h
я бы на вашем месте постарался обойтись без java-приложения
https://basraayman.com/2016/12/03/using-a-novnc-branch-to-connect-to-your-supermicro-ikvm/
https://github.com/novnc/noVNC/issues/385
https://github.com/kelleyk/noVNC/tree/bmc-support
подсовывать свои iso для загрузки можно? если да, то как это реализовано?
ULP
Тут есть несколько моментов:
Все ипми висят в серой сети и снаружи так вот просто не доступны
Клиенты желают нажать одну кнопку и что бы появилась консоль, ничего к себе не ставя
У нас в эксплуатации около 70 разных вариантов матерей с разнообразными ипми разных видов, не везде так будет работать. А выкачать jnlp файл из веб-интерфейса получается почти всегда.
Для html5 доступа к vnc-образным консолям (например dell idrac или ovirt) мы используем guacamole с novnc, про это выложим позднее.
Iso монтируется с внутренней шары, образ с неё можно выбрать там в консоли. Соответственно, на шаре лежат основные популярные образа ОС и дрова. По запросу клиента мы оперативно добавляем туда желаемое. В планах автоматизировать эту историю
raamid
Как обстоят дела с фреймрейтом? Например, пойдет ли видео через guacamole? И какова отзывчивость курсора при работе со сложным софтом? Предположим графический редактор, где требуется точность наведения курсора мыши.
Alexsey
Вы переоцениваете возможности KVM в IPMI. Это в первую очередь чисто утилитарный инструмент для администрирования железки с соответствующей производительностью (у меня показывает 5-6 фпс в консоли линукса, под виндой может быть до 15-20 можно дотянуть). Для понимания - в качестве видеоядра в IPMI чипах используется Matrox G200 и аналоги.
ULP
Там многие годы я вижу Aspeed AST2400 и его последователи, весь видеовывод на серверах с консоли чтоже через него. производительность графики там чисто номинальная, хорошо если картинка не волнами идет. Ссылка на стандартный чип IPMI - https://www.aspeedtech.com/server_ast2500/
ULP
Забудьте, это что бы в шелле что-то делать или в винде настройки сети поправить. Аккуратно, медленно и печально
edo1h
да ну насчёт медленно и печально вы преувеличиваете, если сервер не на другом континенте, то именно административные задачи решаются вполне комфортно.
ютуб смотреть не пойдёт, да )
edo1h
это никак не противоречит тому, что я написал.
речь про то, что уже есть готовый порт novnc, умеющий работать со старыми микрами без java. да, разработчик так и не влил изменения в апстрим, но я не думаю, что это неразрешимое препятствие.
надо тестировать, подозреваю, что везде или почти везде всё-таки заработает.
ну, может быть, придётся немного приложить напильник.