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. Проверьте запущен ли на узле кластера сервис libvirtd:

    service libvirtd status
    CODE

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

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

    Команда для firewalld

    firewall-cmd --list-ports
    CODE

    Команда для nftables

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

    Команда для 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

  5. Проверьте 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 -X POST '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,
        "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 на узле".

  6. Запустите подключение платформы к узлу: перейдите в Узлы → выберите узел → меню Изменить параметры подключения → не изменяйте заданные параметры → кнопка Подключиться к узлу.
  7. Если подключение не востановилось, выполните команды: 

    systemctl stop libvirtd.service
    CODE
    systemctl stop libvirtd-ro.socket
    CODE
    systemctl stop libvirtd-admin.socket
    CODE
    systemctl stop libvirtd.socket
    CODE
    systemctl stop libvirtd.service
    CODE
    systemctl start libvirtd-tls.socket
    CODE