Удаленный доступ к физическим серверам обязателен для работы IT-специалиста. Если у вас есть свой сервер или вы арендуете его, скорее всего, вы уже заходили на него через SSH или RDP. Однако традиционные методы управления такими системами могут быть уязвимы из-за необходимости иметь операционную систему и специализированное программное обеспечение на сервере.
При отсутствии ОС или при возникновении проблем с ее настройкой, такими как ошибка загрузки или сбой настроек сети/файрвола, доступ к ресурсам сервера на хостинге может быть утрачен, что вызывает волну заявок в техподдержку от клиентов хостеров. В таких ситуациях эффективным решением становятся специализированные контроллеры для удаленного управления серверами без операционной системы.
Традиционный вариант
Выход из описанной выше ситуации есть. Например, можно использовать IPMI — промышленный стандарт для мониторинга и управления платформами, позволяющий работать с оборудованием независимо от наличия или работоспособности ОС. И для этого вам потребуется соответствующее программное обеспечение для управления консолью и настройками оборудования. В нашем случае это запуск Java-плагина KVM.
Покажем процесс на примере серверов Supermicro. Для доступа к консоли удаленного сервера нашим клиентам приходилось активировать подключение, ждать проброса серого IP-адреса, создания временной учетной записи и получения ссылки с IP-адресом для авторизации в веб-интерфейсе. Только после этого они могли использовать интегрированный в сервер IPMI-модуль для управления его настройками и функциями.
На клиентских устройствах требовалось установить программное обеспечение Java, что часто приводило к увеличению нагрузки на службу поддержки, поскольку некоторым пользователям не удавалось запустить скачанную консоль.
Возникали и другие проблемы, связанные с совместимостью версий ПО или запуском консоли на устройствах от Apple. Эти недостатки стимулировали нас разработать более удобный и простой в обращении механизм управления оборудованием.
Мы решили, что все должно «крутиться» на стороне хостера в безопасном виртуальном окружении, а потому решили исключить необходимость установки и настройки дополнительного программного обеспечения на клиентских устройствах.
Закажите виртуальный или выделенный сервер в дата-центре в России или в дата-центрах в Европе, США или Турции. Оплата в рублях по счету от российской компании.
INVAPI и ее HTML5 консоль
Наша консоль работает из INVAPI — сервисной панели управления оборудованием, которую мы используем у себя в HOSTKEY на всех этапах: от заказа серверов до переустановки операционных систем. Поэтому логично было встроить консоль в панель управления. Поскольку мы хотели избавить пользователей от лишних телодвижений по локальной установке ПО, то в ТЗ для HTML5 консоли изначально прописали вызов прямо из личного кабинета пользователя.
Для доступа к консоли пользователю достаточно нажать кнопку Open HTML5 console в соответствующем разделе панели управления.
Для практического воплощения идеи был использован Docker, а в основу решения легли сборки NoJava-IPMI-KVM-Server и ipmi-kvm-docker. Консоль поддерживает материнские платы Supermicro до десятого поколения включительно (одиннадцатое поколение уже оснащено средством просмотра HTML5 Supermicro iKVM/IPMI).
INVAPI имеет достаточно удобный API, поэтому для консоли был сделан соответствующий вызов eq/nonvc :
curl -s "https://invapi.hostkey.ru/eq.php" -X POST \
--data "action=novnc" \
--data "token={HOSTKEY TOCKEN}" \
--data "id={SERVER_ID}" \
--data "pin={PIN_CODE}"
Пример ответа:
{
"result":"OK",
"scope":"https://rcnl1.hostkey.ru:32800/vnc.html?host=IP ХОСТА&port=32800&autoconnect=true&password=YVhMxxhiuTpe3mH6y3ry",
"context":{"action":"novnc","id":"25250","location":"RU"},
"debug":"debug",
"key":"71ccb18b1fa499458526acc15fb6a40b"
}
Логика работы INVAPI построена на таких вызовах, и ранее мы реализовывали VNC-доступ похожим образом через Apache Guacamole, поэтому повторим описание процесса работы.
Нажав на кнопку, вы запрашиваете через API это действие и запускаете более сложный процесс, который схематично выглядит так:
При запросе через INVAPI дается команда в API на открытие консоли для определенного сервера через кластер брокера сообщений (RabbitMQ). Для вызова консоли достаточно передать в брокер сообщений IP-адрес сервера и его локацию (наши серверы расположены в Нидерландах, США и России).
RabbitMQ передает данные сервера и задачу на открытие консоли созданному нашими специалистами вспомогательному сервису-ресиверу. Ресивер забирает данные, преобразует всю необходимую информацию, разделяет задачи (Cisco, IPMI и т. д.) и направляет их агентам.
Агенты (fence agents) соответствуют типам используемого в нашей инфраструктуре оборудования. Они обращаются на сервер с Docker-novnc, у которого есть доступ в закрытую сеть IPMI. Агент передает на сервер с Docker-novnc GET-запрос, в котором содержится IP-адрес и ID сервера, сессионный токен, а также ссылка на закрытие сеанса.
Структура запроса следующая:
https://rcnl1.hostkey.ru:ПОРТ/api/v1/server/{IP_СЕРВЕРА}/skey/{КЛЮЧ_ЗАПРОСА}/{ID_СЕРВЕРА}/closeurl/{ССЫЛКА_НА_ЗАКРЫТИЕ}
Контейнер Docker-novnc внутри содержит следующие компоненты:
Xvfb — X11 в виртуальном фрейм-буфере
x11vnc — сервер VNC, который подключается к указанному сервер X11
noNVC — просмотрщик VNC на HTML5
Fluxbox — оконный менеджер
Firefox — браузер для просмотра консолей IPMI
Java-плагин — Java требуется для доступа к большинству консолей IPMI KVM
NoJava-IPMI-KVM-Server — это сервер на основе Python, позволяющий получать доступ к инструменту для запуска консолей IPMI-KVM на базе Java без локальной ее установки (nojava-ipmi-kvm) через браузер.
Он работает в контейнере Docker в фоновом режиме, запускает подходящую версию Java Webstart (с OpenJDK или Oracle) и подключается к контейнеру с помощью noVNC.
Использование Docker автоматически изолирует Java Webstart, поэтому вам не нужно устанавливать устаревшие версии Java на рабочих станциях, а благодаря нашему серверу не нужно ставить и сам docker-контейнер nojava-ipmi-kvm.
Консоль запускается в течение минуты после запроса и открывается в отдельном окне браузера. Минус тут один: если консоль закрыть, то можно открыть ее сразу еще раз, поэтому мы добавили ссылку для автоматического завершения сеанса.
Это сделано для удобства пользователя и обеспечения безопасности оборудования: при отсутствии активности в течение определенного времени (двух часов по умолчанию) консоль будет закрыта автоматически.
Важный момент: если сервер будет перезагружен или из панели будет вызвана обычная VNC-консоль, то доступ к html5 консоли надо будет перезапустить.
А какой результат?
Внедрение нового решения значительно упростило для конечных пользователей процесс управления оборудованием Supermicro, а также снизило нагрузку на нашу службу поддержки, что среди прочего позволило упростить управление «железом» других производителей.
С ростом парка оборудования (в настоящий момент это 5000+ серверов и 12 000 виртуалок во всех локациях) мы также столкнулись со сложностью в развитии и поддержки единого универсального решения аналогичного тому, что существует на базе NoJava-IPMI-KVM-Server, поэтому сервис docker-novnc по факту имеет разные контейнерные сборки, оптимизированные для определенных типов серверов:
html5_asmb9 — серверы с материнскими платами ASUS (со своими «приколами»);
java_dell_r720 — серверы Dell;
java_viewer_supermicro — серверы Supermicro;
java_viewer_tplatform — серверы T-Platforms — V5000 Blade Chassis.
Зачем такая сложность? К примеру, блейд-шасси от T-Platform достаточно древнее и требует для открытия консоли Java7 и браузер Internet Explorer.
На каждой материнской плате у нас выставлен тег с версией Java и типом платформы, поэтому в вызове нам достаточно передать только IP-адрес машины и тип Java.
В итоге у нас может быть запущено большое число контейнеров docker-novnc, которые горизонтально масштабируются и могут быть подвержены оркестрации в Kubernetes.
Все это позволяет получить единый интерфейс доступа к серверам через браузер, унифицировать интерфейс и API, упростить доступ по IPMI и также отказаться от Apache Guacamole.
Также решается проблема горячих клавиш — интерфейс везде остается стандартным и понятным, поддержка выполняется нашими силами, мы можем гибко настраивать доступ.
Закажите виртуальный или выделенный сервер в дата-центре в России или в дата-центрах в Европе, США или Турции. Оплата в рублях по счету от российской компании.
Комментарии (6)
seyko2
15.11.2024 13:05При отсутствии ОС или при возникновении проблем с ее настройкой, такими как ошибка загрузки или сбой настроек сети/файрвола, доступ к ресурсам сервера на хостинге может быть утрачен...
Непонятный момент, однако. Про версии Java - тут без вопросов. Про неудобство доступа раньше - тоже. А вот в чем разница старого и нового в данной ситуации?
AlexGluck
15.11.2024 13:05Одна из ключевых вещей это установка ОС из своего образа, как вы планируете это предоставлять?
c46fd3da
HTML5 на Supermicro завезли в 10 поколении, по крайней мере мои x10drl уже HTML5 умеют из коробки.
inkvizitor68sl
Не из коробки, в какой-то момент вышло обновление BMC, в котором появился HTML5. А BMC мало кто обновляет -)
edo1h
Ага, статья некрофилией попахивает. Для экспериментов со списанными серверами нормально, а в проде лучше обновить железо…
omgiafs
Особенно в России, особенно сейчас. Ну да, серверов - огромный выбор...