VMmanager устанавливает статус "Недоступен" для узла кластера, если:

  • узел недоступен по SSH;
  • нет доступа к программному обеспечению libvirt на этом узле.

Чтобы восстановить доступ, подключитесь к узлу вручную и устраните причину неполадки.

Если нет доступа по SSH


  1. Проверьте, что узел кластера доступен по сети с сервера VMmanager.
  2. Проверьте, что SSH-ключ, используемый для подключения, указан верно:
    1. Посмотрите содержимое открытого SSH-ключа на сервере с VMmanager:

      docker exec -it vm_box cat /opt/ispsystem/vm/etc/.ssh/vmmgr.1.pub
      CODE
    2. Проверьте содержится ли ssh-ключ из ответа команды в файле root/.ssh/autorized_keys на узле кластера. При необходимости добавьте ssh-ключ в этот файл.
  3. Проверьте открыты ли на узле кластера входящие соединения для SSH:

    lsof -i | grep :ssh
    CODE
  4. Проверьте, что количество соединений по SSH на узле кластера не превышает лимит:

    cat /etc/ssh/sshd_config | grep maxSessions
    CODE

Если нет доступа к libvirt


  1. Проверьте, что узел кластера доступен по сети с сервера VMmanager.
  2. Запустите подключение платформы к узлу: перейдите в Узлы → выберите узел → меню Изменить параметры подключения → не изменяйте заданные параметры → кнопка Подключиться к узлу.
  3. Проверьте запущен ли на узле кластера сервис libvirtd:

    systemctl status libvirtd.service
    CODE

    При необходимости запустите сервис:

    systemctl start libvirtd.service
    CODE
  4. Проверьте открыт ли на узле кластера порт TLS — 16514/tcp:

    Команда для firewalld

    firewall-cmd --list-ports
    CODE

    Команда для nftables

    nft list ruleset | grep 16514
    CODE
  5. При необходимости откройте порт:

    Команда для firewalld

    firewall-cmd --permanent --add-port=16514/tcp && firewall-cmd --reload
    CODE

    Команда для nftables

    nft add rule inet filter INPUT tcp dport 16514 ct state { new, untracked } accept && nft list ruleset > /etc/sysconfig/nftables.conf
    CODE

    filter — имя таблицы правил nftables

    INPUT — имя цепочки правил nftables

  6. Проверьте cрок действия сертификата libvirt. Сертификат libvirt — это TLS-сертификат, который сервис libvirt использует для проверки идентичности сервера и клиентов: 

    /usr/bin/certtool --certificate-info --infile /etc/pki/libvirt/clientcert.pem | grep 'Not After'
    CODE

    Пример ответа

    Not After: Fri Nov 18 06:12:43 UTC 2050
    CODE

    Если срок действия истёк, обновите сертификат:

    1. Получите токен авторизации:
      curl -k -X POST -H "accept: application/json" -H "Content-Type: application/json" 'https://domain.com/api/auth/v4/public/token' -d '{"email": "admin_email", "password": "admin_pass"}'
      CODE

      domain.com — доменное имя или IP-адрес сервера с платформой

      admin_email — email администратора платформы

      admin_pass — пароль администратора платформы

      В ответ придёт сообщение вида:

      Пример ответа в JSON

      {
        "confirmed": true,
        "expires_at": null,
        "id": "6",
        "token": "4-e9726dd9-61d9-2940-add3-914851d2cb8a"
      }
      CODE

      Сохраните полученное значение параметра token — токен авторизации.

    2. Выполните запрос: 

      curl -k -X POST "https://domain.com/vm/v3/node/<node_id>/cert" -H "Cookie: <auth_token> " -H "x-xsrf-token: <auth_token> " -H "isp-box-instance: true" -H "accept: */*" -H "Content-Type: application/json" -d ''
      CODE

      domain.com — доменное имя или IP-адрес сервера с платформой

      <auth_token> — токен авторизации

      <node_id> — id узла кластера

      Обновление сертификата может занять несколько минут.

    3. Чтобы узнать результат обновления, откройте список задач в интерфейсе платформы и просмотрите информацию о задаче с типом "Обновление сертификатов TLS на узле".

  7. При необходимости выполните настройку сервиса libvirt:
    1. Остановите сервис: 

      systemctl stop libvirtd.socket
      BASH
    2. Для узлов с ОС AlmaLinux 8 в файле /etc/sysconfig/libvirtd замените строку LIBVIRTD_ARGS = "–listen" на LIBVIRTD_ARGS=.
    3. В файле /etc/libvirt/libvirtd.conf:
      1. Раскомментируйте строку #listen_tls = 1.
      2. Замените строку listen_addr = на listen_addr = "0.0.0.0".
    4. В файле /etc/libvirt/qemu.conf замените строку vnc_listen = на vnc_listen = <адрес узла>.
    5. Запустите сервис: 

      systemctl start libvirtd.socket
      BASH
  8. Запустите подключение платформы к узлу: перейдите в Узлы → выберите узел → меню Изменить параметры подключения → не изменяйте заданные параметры → кнопка Подключиться к узлу.
  9. Если подключение не восстановилось, перезапустите libvirtd:

    systemctl stop libvirtd-ro.socket
    systemctl stop libvirtd-admin.socket
    systemctl stop libvirtd.socket
    systemctl stop libvirtd.service
    systemctl start libvirtd-tls.socket
    systemctl start libvirtd-ro.socket
    systemctl start libvirtd-admin.socket
    systemctl start libvirtd.socket
    CODE
  10. Если командой выше не удалось перезапустить сервис, перезапустите libvirtd одной из следующих команд в зависимости от ОС:
    • для AlmaLinux 8:

      systemctl restart libvirtd.socket
      BASH
    • для AlmaLinux 8 с версиями libvirt меньше 5.6:

      systemctl stop libvirtd-ro.socket
      systemctl stop libvirtd-admin.socket
      systemctl stop libvirtd.socket
      systemctl stop libvirtd.service
      systemctl start libvirtd-tls.socket
      CODE
    • для других ОС:

      systemctl restart libvirtd.service
      CODE