Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021)

Материал из 0x1.tv

Докладчик
Станислав Левин

Добавление поддержки альтернативного SPICE-клиента (remote-viewer) для Fleet Commander.

Сложности реализации и дополнительные предусловия.

Видео

on youtube

Презентация

Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021).pdf Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021).pdf Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021).pdf Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021).pdf Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021).pdf Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021).pdf Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021).pdf Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021).pdf Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021).pdf Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021).pdf Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021).pdf Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021).pdf

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 клиента
Slevin-img001-ossdevconf2021.png

2. Регистратор изменений — это FC logger. Будучи установленным на шаблоне(VM) для профилей, в режиме живой сессии детектирует вносимые изменения в конфигурацию окружения пользователя и производит оповещение о наступившем событии FC admin. FC использует libvirt(KVM) для управления живой сессией в режиме snapshot (все изменения вносимые в VM существуют только пока она запущена).

Slevin-img002-ossdevconf2021.png

В случае с FreeIPA профили хранятся в base64 закодированном JSON и с ними можно работать через CLI.

3. Клиентская часть — это FC client, применяет профиль пользователя.

При входе пользователя в систему, SSSD запрашивает профиль у соответствующего домен контроллера и оповещает о готовности FC client.

А что не так?

Режим живой сессии работает через компонент spice-html5. В официальной документации к этому продукту утверждается, что он работает только в современных Web браузерах, является медленным, отсутствует множество из функциональностей SPICE и, по сути, является прототипом. А рекомендовано к использованию virt-viewer. На практике это подтверждается, особенно на стендах с вложенной виртуализацией, где spice-html5 оказался непригоден к использованию. В то же время remote-viewer прекрасно справляется с задачей, поэтому было решено добавить поддержку remote-viewer как SPICE клиента.

Текущая архитектура FC

Slevin-img003-ossdevconf2021.png
  • открытые порты на libvirt и cockpit узлах
  • незащищённая SPICE сессия
  • нет возможности просматривать логи FC logger из Web браузера
  • ограничение на максимальный размер изменения (FC logger отправляет JSON данные как есть)
  • единая точка взаимодействия(Web браузер)
  • достаточно открыть один порт(HTTPS) на Cockpit узле для живой сессии FC

Улучшенная архитектура FC для spice-html5

Slevin-img004-ossdevconf2021.png

Преимущества:

  • нет незащищённых открытых портов FC на libvirt и cockpit узлах
  • защищённая SPICE сессия(тикет)
  • возможно просматривать логи FC logger в Web браузере
  • базовый протокол для FC logger

Архитектура FC для remote-viewer

Slevin-img005-ossdevconf2021.png

Недостатки:

  • требуется дополнительная программа 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 запущен, можно двигаться дальше.

Slevin-img006-ossdevconf2021.png

Принятие изменений и итоги

В сентябре 20-го года были приняты в апстрим патчи для CI, а в декабре изменения для remote-viewer. Важными итогами можно считать:

  • поддержка remote-viewer как SPICE клиента
  • поддержка как TLS, так и plain SPICE(не рекомендуется, было добавлено по просьбе апстрима)
  • покрытие тестами новой функциональности
  • исправление некоторых проблем с безопасностью
  • адаптация и запуск публичного CI (Azure Pipelines)
  • адаптация и применение инструментов для статического анализа кода(pylint, eslint)
  • переход JS на систему модулей
  • возможность просмотра вывода логгера с VM в консоли Web браузера
  • исправление множества найденных ошибок
Fleet Commander и remote-viewer (Станислав Левин, OSSDEVCONF-2021)!.jpg

Примечания и ссылки


Plays:0   Comments:0