Не открывается VNC-консоль
Симптом
Консоль виртуальной машины не открывается в веб-интерфейсе, соединение не устанавливается.
Как проверить
Пройдите по шагам в этом порядке: каждый следующий имеет смысл, только если предыдущий сошёлся.
- Состояние машины. Консоль открывается только у запущенной машины: смотрите колонку State в списке ВМ. У остановленной машины кнопки консоли нет.
- Права. Консоль открывает привилегия
Access VM Console(1102). Без неё вызов отвечает-403. - Журнал безопасности. Раздел
Security Event Log, фильтр Category —virtual machines. Успешное подключение оставляетvm.console_connected, неуспешное —vm.console_connect_failed, а сам запрос консоли —vm.console_access. По ним видно, дошло ли дело до WSS-моста или отказ случился раньше. Оба первых типа события появились в 3.0.5. - Сеть до 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.
См. также
- Питание и консоль ВМ — как открыть консоль и что она умеет.
- Как читать журнал и фильтровать события — фильтр по категории и разбор одной записи.
- Роли и привилегии — где лежит
Access VM Console.