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

Если система не установлена или возникли какие-то проблемы с ее настройкой (например, при попытке изменить правила межсетевого экрана), доступ можно потерять. В таких ситуациях на помощь приходят специализированные контроллеры, позволяющие управлять серверами без ОС, как если бы вы сидели за физической консолью. Рассказываем, как это работает у нас в 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)


  1. edo1h
    16.04.2022 00:10

    я бы на вашем месте постарался обойтись без 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


    Мы создали HOSTKEY INVAPI — сервисную панель, позволяющую выполнять любые действия по управлению оборудованием: от заказа серверов до переустановки ОС

    подсовывать свои iso для загрузки можно? если да, то как это реализовано?


    1. ULP
      16.04.2022 00:22

      Тут есть несколько моментов:

      • Все ипми висят в серой сети и снаружи так вот просто не доступны

      • Клиенты желают нажать одну кнопку и что бы появилась консоль, ничего к себе не ставя

      • У нас в эксплуатации около 70 разных вариантов матерей с разнообразными ипми разных видов, не везде так будет работать. А выкачать jnlp файл из веб-интерфейса получается почти всегда.

        Для html5 доступа к vnc-образным консолям (например dell idrac или ovirt) мы используем guacamole с novnc, про это выложим позднее.

        Iso монтируется с внутренней шары, образ с неё можно выбрать там в консоли. Соответственно, на шаре лежат основные популярные образа ОС и дрова. По запросу клиента мы оперативно добавляем туда желаемое. В планах автоматизировать эту историю


      1. raamid
        16.04.2022 02:15

        Как обстоят дела с фреймрейтом? Например, пойдет ли видео через guacamole? И какова отзывчивость курсора при работе со сложным софтом? Предположим графический редактор, где требуется точность наведения курсора мыши.


        1. Alexsey
          16.04.2022 04:30

          Вы переоцениваете возможности KVM в IPMI. Это в первую очередь чисто утилитарный инструмент для администрирования железки с соответствующей производительностью (у меня показывает 5-6 фпс в консоли линукса, под виндой может быть до 15-20 можно дотянуть). Для понимания - в качестве видеоядра в IPMI чипах используется Matrox G200 и аналоги.


          1. ULP
            16.04.2022 10:54

            Там многие годы я вижу Aspeed AST2400 и его последователи, весь видеовывод на серверах с консоли чтоже через него. производительность графики там чисто номинальная, хорошо если картинка не волнами идет. Ссылка на стандартный чип IPMI - https://www.aspeedtech.com/server_ast2500/


        1. ULP
          16.04.2022 10:39

          Забудьте, это что бы в шелле что-то делать или в винде настройки сети поправить. Аккуратно, медленно и печально


          1. edo1h
            16.04.2022 13:04

            да ну насчёт медленно и печально вы преувеличиваете, если сервер не на другом континенте, то именно административные задачи решаются вполне комфортно.
            ютуб смотреть не пойдёт, да )


      1. edo1h
        16.04.2022 12:54

        Все ипми висят в серой сети и снаружи так вот просто не доступны
        Клиенты желают нажать одну кнопку и что бы появилась консоль, ничего к себе не ставя

        это никак не противоречит тому, что я написал.


        Для html5 доступа к vnc-образным консолям (например dell idrac или ovirt) мы используем guacamole с novnc, про это выложим позднее.

        речь про то, что уже есть готовый порт novnc, умеющий работать со старыми микрами без java. да, разработчик так и не влил изменения в апстрим, но я не думаю, что это неразрешимое препятствие.


        У нас в эксплуатации около 70 разных вариантов матерей с разнообразными ипми разных видов, не везде так будет работать

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


  1. 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


  1. litos
    16.04.2022 08:27
    +1

    Новые прошивки IPMI в супермикро содержат в себе помимо java еще и html5 версию окна kvm


    1. ULP
      16.04.2022 10:42
      +1

      Ага, только у нас на ходу ещё Х8 и масса других матерей похожих вендоров тоже с java.

      HTML5 мы открываем через guacamole, скоро выложим статью.


  1. Altaev
    16.04.2022 10:45

    С вашим сайтом что-то не то (актуальная версия Хрома на Андроид, никаких дополнений).


    1. ULP
      16.04.2022 10:47

      Интересно.. А откуда этот снапшот? На сайте www.hostkey.ru иной шаблон. Тут я вижу валюта попутана и количество доступных машин не показывает


      1. Altaev
        16.04.2022 17:56
        +1

        hostkey.ru/instant-servers/dedicated/ выбрать локацию RU, затем выше нажать «Выбрать сервер»


        1. ULP
          16.04.2022 19:08

          И в самом деле, сейчас поправим.