Предоставление доступа к VDI машине

Модуль TIONIX.VDIserver предоставляет следующие способы доступа к VDI машине:

  1. Веб-интерфейс TIONIX.Dashboard: для доступа к VDI машине перейдите по адресу <IP-адрес>:8888/vdi/.
  2. Клиент TIONIX.VDIclient: для доступа к VDI машине через клиент укажите <IP-адрес> в поле адрес сервера в настройках клиента.

Эксклюзивная очередь

Поскольку при подключении к TIONIX.VDIserver ожидается ответ на конкретный запрос, то очередь, в которую придет ответ должна быть уникальна. Кроме того, в условиях асинхронности процессов необходимо защищать объекты от повреждений. Для решения этих задач и избежания ошибок получения виртуальных машин других проектов/доменов в процессе подключения был принят механизм мьютекса, реализованный через эксклюзивную очередь в RabbitMQ.

Мьютекс - механизм, служащий в программировании для синхронизации одновременно выполняющихся потоков. Мьютексы могут находиться в одном из двух состояний - отмеченном или неотмеченном (открыт и закрыт соответственно). Когда какой-либо поток, принадлежащий любому процессу, становится владельцем объекта мьютекс, последний переводится в неотмеченное состояние. Если задача освобождает мьютекс, его состояние становится отмеченным. Задача мьютекса — защита объекта от доступа к нему других потоков, отличных от того, который завладел мьютексом. В каждый конкретный момент только один поток может владеть объектом, защищенным мьютексом. Если другому потоку будет нужен доступ к переменной, защищенной мьютексом, то этот поток блокируется до тех пор, пока мьютекс не будет освобожден.

Тот же принцип применен в TIONIX.VDIserver: при подключении к виртуальной машине одного проекта устанавливается мьютекс на данный проект, который запрещает в текущей момент времени доступ к проекту, пока задача не освободит мьютекс. Реализован данный механизм в TIONIX.VDIserver через эксклюзивную очередь в RabbitMQ. Для этого предусмотрена опция exclusive: true в вызове assertQueue. Опция гарантирует, что данная очередь будет доступна исключительно клиенту, совершившему запрос, и видна только в пределах данного канала связи. И при этом очередь предназначена для не более чем одного подключения единовременно. Если на пользователя уже была назначена виртуальная машина, то механизм мьютекса не будет задействован, поскольку в этом случае синхронизация не нужна.

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

Особенности подключения

  1. Если при подключении не указывается VDI проект пользователя, то сначала выполняется проверка на то, имеется ли назначенная на пользователя VDI машина, и если такая машина имеется, то подключение осуществляется к ней. Если назначенная на пользователя VDI машина отсутствует, то выполняется поиск VDI проекта пользователя, в котором будет произведен запуск новой VDI машины или назначение на пользователя имеющейся свободной машины.

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

  3. В случае если пользователь подключается к домену или VDI проекту типа Standard, где нет назначенных ему VDI машин, но есть не назначенные никому, он автоматически получает назначение, в этом случае всегда взамен назначенной запускается резервная VDI машина в том же проекте (если в проекте не исчерпаны квоты).

  4. Если в домене или VDI проекте типа Standard, к которому осуществляется подключение пользователя, нет доступных VDI машин (со статусами Активна, На паузе, Отключена) клиент отправляет запрос на создание новой VDI машины. VDI машина автоматически назначается данному пользователю.

  5. Если в домене или VDI проекте типа Simultaneous, к которому осуществляется подключение пользователя, нет доступных VDI машин (со статусами Активна, На паузе, Отключена), назначенных на пользователя, то подключение не будет произведено. Подключение осуществляется только к VDI машине, назначенной на данного пользователя.

  6. Если в домене или VDI проекте любого типа, к которому осуществляется подключение пользователя, нет активных VDI машин, но есть назначенная на пользователя VDI машина в статусе На паузе, клиент отправляет запрос на снятие VDI машины с паузы.

  7. Если в домене или VDI проекте любого типа, к которому осуществляется подключение пользователя, нет активных VDI машин, но есть назначенная на пользователя VDI машина в статусе Отключена, клиент отправляет запрос на включение VDI машины.

  8. Для ограничения доступа пользователей к 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