Предоставление доступа к VDI машине¶
Модуль TIONIX.VDIserver предоставляет следующие способы доступа к VDI машине:
- Веб-интерфейс TIONIX.Dashboard: для доступа к VDI машине перейдите по адресу
<IP-адрес>:8888/vdi/
. - Клиент TIONIX.VDIclient: для доступа к VDI машине через клиент укажите
<IP-адрес>
в поле адрес сервера в настройках клиента.
Эксклюзивная очередь¶
Поскольку при подключении к TIONIX.VDIserver ожидается ответ на конкретный запрос, то очередь, в которую придет ответ должна быть уникальна. Кроме того, в условиях асинхронности процессов необходимо защищать объекты от повреждений. Для решения этих задач и избежания ошибок получения виртуальных машин других проектов/доменов в процессе подключения был принят механизм мьютекса, реализованный через эксклюзивную очередь в RabbitMQ.
Мьютекс - механизм, служащий в программировании для синхронизации одновременно выполняющихся потоков. Мьютексы могут находиться в одном из двух состояний - отмеченном или неотмеченном (открыт и закрыт соответственно). Когда какой-либо поток, принадлежащий любому процессу, становится владельцем объекта мьютекс, последний переводится в неотмеченное состояние. Если задача освобождает мьютекс, его состояние становится отмеченным. Задача мьютекса — защита объекта от доступа к нему других потоков, отличных от того, который завладел мьютексом. В каждый конкретный момент только один поток может владеть объектом, защищенным мьютексом. Если другому потоку будет нужен доступ к переменной, защищенной мьютексом, то этот поток блокируется до тех пор, пока мьютекс не будет освобожден.
Тот же принцип применен в TIONIX.VDIserver: при подключении к виртуальной машине одного проекта устанавливается мьютекс на данный проект, который запрещает в текущей момент времени доступ к проекту, пока задача не освободит мьютекс. Реализован данный механизм в TIONIX.VDIserver через эксклюзивную очередь в RabbitMQ. Для этого предусмотрена опция exclusive: true
в вызове assertQueue
. Опция гарантирует, что данная очередь будет доступна исключительно клиенту, совершившему запрос, и видна только в пределах данного канала связи. И при этом очередь предназначена для не более чем одного подключения единовременно. Если на пользователя уже была назначена виртуальная машина, то механизм мьютекса не будет задействован, поскольку в этом случае синхронизация не нужна.
В случае возникновении ситуации, когда к проекту получил эксклюзивный доступ запрос от клиента, но к тому же проекту продолжают поступать повторные запросы, в логах RabbitMQ появляются сообщения об ошибках доступа к эксклюзивной очереди. Данное поведение является нормальным и ошибкой не является.
Особенности подключения¶
Если при подключении не указывается VDI проект пользователя, то сначала выполняется проверка на то, имеется ли назначенная на пользователя VDI машина, и если такая машина имеется, то подключение осуществляется к ней. Если назначенная на пользователя VDI машина отсутствует, то выполняется поиск VDI проекта пользователя, в котором будет произведен запуск новой VDI машины или назначение на пользователя имеющейся свободной машины.
Подключение по умолчанию осуществляется к произвольной активной VDI машине выбранного VDI проекта, которая назначена данному пользователю или группе пользователей, в которую включен данный пользователь.
В случае если пользователь подключается к домену или VDI проекту типа Standard, где нет назначенных ему VDI машин, но есть не назначенные никому, он автоматически получает назначение, в этом случае всегда взамен назначенной запускается резервная VDI машина в том же проекте (если в проекте не исчерпаны квоты).
Если в домене или VDI проекте типа Standard, к которому осуществляется подключение пользователя, нет доступных VDI машин (со статусами Активна, На паузе, Отключена) клиент отправляет запрос на создание новой VDI машины. VDI машина автоматически назначается данному пользователю.
Если в домене или VDI проекте типа Simultaneous, к которому осуществляется подключение пользователя, нет доступных VDI машин (со статусами Активна, На паузе, Отключена), назначенных на пользователя, то подключение не будет произведено. Подключение осуществляется только к VDI машине, назначенной на данного пользователя.
Если в домене или VDI проекте любого типа, к которому осуществляется подключение пользователя, нет активных VDI машин, но есть назначенная на пользователя VDI машина в статусе На паузе, клиент отправляет запрос на снятие VDI машины с паузы.
Если в домене или VDI проекте любого типа, к которому осуществляется подключение пользователя, нет активных VDI машин, но есть назначенная на пользователя VDI машина в статусе Отключена, клиент отправляет запрос на включение VDI машины.
Для ограничения доступа пользователей к VDI машине, при подключении к VDI проекту типа Standard создается группа безопасности, в которую включаются правила, позволяющие обеспечить доступ пользователя к назначенной ему VDI машине:
Направление Тип Ethernet IP протокол Диапазон портов Префикс удаленного IP-адреса Удаленная группа безопасности Ingress IPv4 ICMP Any <source_ip>/32 Ingress IPv4 TCP 1 - 65535 <source_ip>/32 Ingress IPv4 UDP 1 - 65535 <source_ip>/32 Egress IPv4 ICMP Any <source_ip>/32 Egress IPv4 TCP 1 - 65535 <source_ip>/32 Egress IPv4 UDP 1 - 65535 <source_ip>/32