Перейти к основному содержимому

Не открывается VNC-консоль

Симптом​

Консоль виртуальной машины не открывается в веб-интерфейсе, соединение не устанавливается.

Как проверить​

Пройдите по шагам в этом порядке: каждый следующий имеет смысл, только если предыдущий сошёлся.

  1. Состояние машины. Консоль открывается только у запущенной машины: смотрите колонку State в списке ВМ. У остановленной машины кнопки консоли нет.
  2. Права. Консоль открывает привилегия Access VM Console (1102). Без неё вызов отвечает -403.
  3. Журнал безопасности. Раздел Security Event Log, фильтр Category — virtual machines. Успешное подключение оставляет vm.console_connected, неуспешное — vm.console_connect_failed, а сам запрос консоли — vm.console_access. По ним видно, дошло ли дело до WSS-моста или отказ случился раньше. Оба первых типа события появились в 3.0.5.
  4. Сеть до HTTPS-endpoint. WebSocket-соединение должно проходить целиком: прокси и балансировщики, которые не пропускают Upgrade, рвут консоль, при этом обычные вызовы API продолжают работать.

Причина​

Консоль работает через WebSocket-прокси HTTPS-endpoint кластера. Недоступность обычно связана с истёкшей сессией или блокировкой WebSocket-соединения на пути до HTTPS-endpoint.

Кроме этого есть третья, менее очевидная причина: связка «токен консоли — машина» живёт в памяти диспетчера со сроком 300 секунд, столько же по умолчанию живёт WSS-мост. Персистентности у связки нет намеренно. Отсюда два следствия. Ссылку на консоль нельзя открыть «потом»: через пять минут она уже не связана ни с чем. Перезапуск диспетчера теряет связку. Открытые консоли при этом продолжают работать, потому что мост держит HTTPS-endpoint кластера. Теряется обогащение журнала: событие подключения пишется без пользователя и машины, в записи остаются отпечаток токена и адрес клиента.

Отказы самого вызова консоли разведены по кодам: -3103 — машины с таким идентификатором нет либо она вне вашей области видимости, -3112 — запрошен неподдерживаемый тип консоли, -403 — нет привилегии, -78 — ошибка базы данных.

Решение​

Обновите сессию (перелогиньтесь) и убедитесь, что сеть до HTTPS-endpoint кластера пропускает WebSocket-соединения, затем откройте консоль заново.

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

Методы API​

Операции этой страницы в API: vm-console, vm-get, security-event-list — см. Справочник API.

См. также​