Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021)
Материал из 0x1.tv
- Докладчик
- Станислав Левин
Добавление поддержки альтернативного SPICE-клиента (remote-viewer) для Fleet Commander.
Сложности реализации и дополнительные предусловия.
Содержание
Видео
Презентация
Thesis
Введение в FC
FC позволяет легко администрировать профили окружений рабочего стола доменных пользователей. Для этого авторизованному на соответствующие манипуляции с данными администратору профилей достаточно один раз создать шаблон(VM), запустить этот шаблон в режиме живой сессии плагина Cockpit(web консоль), произвести необходимые изменения в графической сессии и сохранить изменения в профиль. Профили и политики хранятся в LDAP, а среди поддерживаемых контроллеров домена: Windows AD(только прямая интеграция) и FreeIPA. Применять профили можно для пользователей, групп пользователей, узлов и групп узлов.
FC работает со следующими приложениями/подсистемами:
- Gsettings
- LibreOffice
- Chromium
- Chrome
- Firefox
- NetworkManager
FC состоит из трёх частей:
1. Административная часть — это FC admin, представляющий из себя плагин для Cockpit и служащий для:
- управления всеми профилями, хранящимся во FreeIPA или AD
- настройки подключения к libvirt узлу
- настройки профиля
- настройки типа SPICE клиента
2. Регистратор изменений — это FC logger. Будучи установленным на шаблоне(VM) для профилей, в режиме живой сессии детектирует вносимые изменения в конфигурацию окружения пользователя и производит оповещение о наступившем событии FC admin. FC использует libvirt(KVM) для управления живой сессией в режиме snapshot (все изменения вносимые в VM существуют только пока она запущена).
В случае с FreeIPA профили хранятся в base64 закодированном JSON и с ними можно работать через CLI.
3. Клиентская часть — это FC client, применяет профиль пользователя.
При входе пользователя в систему, SSSD запрашивает профиль у соответствующего домен контроллера и оповещает о готовности FC client.
А что не так?
Режим живой сессии работает через компонент spice-html5. В официальной документации к этому продукту утверждается, что он работает только в современных Web браузерах, является медленным, отсутствует множество из функциональностей SPICE и, по сути, является прототипом. А рекомендовано к использованию virt-viewer. На практике это подтверждается, особенно на стендах с вложенной виртуализацией, где spice-html5 оказался непригоден к использованию. В то же время remote-viewer прекрасно справляется с задачей, поэтому было решено добавить поддержку remote-viewer как SPICE клиента.
Текущая архитектура FC
- открытые порты на libvirt и cockpit узлах
- незащищённая SPICE сессия
- нет возможности просматривать логи FC logger из Web браузера
- ограничение на максимальный размер изменения (FC logger отправляет JSON данные как есть)
- единая точка взаимодействия(Web браузер)
- достаточно открыть один порт(HTTPS) на Cockpit узле для живой сессии FC
Улучшенная архитектура FC для spice-html5
Преимущества:
- нет незащищённых открытых портов FC на libvirt и cockpit узлах
- защищённая SPICE сессия(тикет)
- возможно просматривать логи FC logger в Web браузере
- базовый протокол для FC logger
Архитектура FC для remote-viewer
Недостатки:
- требуется дополнительная программа SPICE-клиент (remote-viewer)
- недостаточно открыть один порт для живой сессии FC(HTTPS) на Cockpit узле, требуется пул SPICE портов для libvirt узла.
Предусловия для изменений.
Планируемые изменения были значительны и почти наверняка вызвали бы регрессии. Поэтому обязательным условием принятия новой функциональности является покрытие её тестами. Однако, оказалось, что у проекта есть unit тесты, но нет CI(по крайней мере, публичного), где можно запустить эти тесты. Было решено добавить и CI.
Исходники проекта хостятся на github, поэтому выбор был между Azure Pipelines и Github Actions. Оба CI имеют как преимущества, так и недостатки по сравнению друг с другом, но схожы в одном — предоставление бесплатных worker’ов для opensource проектов(Azure — 10, GH Actions — 20). Но последний в то время был ещё в бета версии, поэтому остановились на Azure.
Код FC в основном Python и JavaScript.
Для Python были использованы:
- black — автоформатирование по PEP8
- pylint — статический анализатор
Для JS — eslint и плагины для него.
Данные инструменты помогли найти в коде множество проблемных мест и исправить их. CI запущен, можно двигаться дальше.
Принятие изменений и итоги
В сентябре 20-го года были приняты в апстрим патчи для CI, а в декабре изменения для remote-viewer. Важными итогами можно считать:
- поддержка remote-viewer как SPICE клиента
- поддержка как TLS, так и plain SPICE(не рекомендуется, было добавлено по просьбе апстрима)
- покрытие тестами новой функциональности
- исправление некоторых проблем с безопасностью
- адаптация и запуск публичного CI (Azure Pipelines)
- адаптация и применение инструментов для статического анализа кода(pylint, eslint)
- переход JS на систему модулей
- возможность просмотра вывода логгера с VM в консоли Web браузера
- исправление множества найденных ошибок
Примечания и ссылки
Plays:0
Comments:0