вложенная виртуализация, libvirt: сеть обычно не работает

Вопрос или проблема

Итак, у меня есть VPS, на котором включена вложенная виртуализация аппаратного обеспечения, и я пытаюсь использовать эту вложенную виртуализацию. VPS работает на Debian 12 и имеет 16 Гб оперативной памяти.

Я установил libvirt/virt-manager и т.д. и скачал образы “nocloud” и “genericcloud” с https://cdimage.debian.org/images/cloud/. В описании говорится, что образ “nocloud” должен позволять вход без пароля для пользователя root, но, к сожалению, этого не происходит. Я запускаю вещи от имени root (это тестовая установка), но я изменил владельца всех qcow образов на “libvirt-qemu”.

Я использую следующую командную строку:

# virt-install --name test-cloud-vnc --os-variant debian11 --ram 8192 --disk debian-12-genericcloud-amd64.qcow2,device=disk,bus=virtio,size=10,format=qcow2 --hvm --import
--noautoconsole --network default --graphics vnc,port=-1,listen=0.0.0.0

(Или то же самое для образа nocloud)

Образ nocloud иногда, редко, получает DHCP аренду (видно в virsh net-dhcp-leases-default) и затем отвечает на пинги. Но обычно образ nocloud, и всегда облачный образ (но это может быть просто случайными числами), не получают DHCP аренду и не могут быть пинговыми. Это означает, что моя попытка настроить cloud-init через временный веб-сервер (согласно https://cloudinit.readthedocs.io/en/latest/tutorial/qemu.html) никогда не была протестирована, потому что образ cloud-init не может получить доступ к сети изначально.

Вывод dmesg за это время:

[71382.495314] audit: type=1400 audit(1732157273.151:173): apparmor="STATUS" operation="profile_load" profile="unconfined" name="libvirt-3ca46e41-5cca-40b0-a5cd-d7d7e60de326" pid=30675 comm="apparmor_parser"
[71382.855419] audit: type=1400 audit(1732157273.511:174): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="libvirt-3ca46e41-5cca-40b0-a5cd-d7d7e60de326" pid=30678 comm="apparmor_parser"
[71383.228796] audit: type=1400 audit(1732157273.883:175): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="libvirt-3ca46e41-5cca-40b0-a5cd-d7d7e60de326" pid=30682 comm="apparmor_parser"
[71383.626483] audit: type=1400 audit(1732157274.279:176): apparmor="STATUS" operation="profile_replace" info="same as current profile, skipping" profile="unconfined" name="libvirt-3ca46e41-5cca-40b0-a5cd-d7d7e60de326" pid=30686 comm="apparmor_parser"
[71383.664542] virbr0: port 1(vnet0) entered blocking state
[71383.667108] virbr0: port 1(vnet0) entered disabled state
[71383.671212] device vnet0 entered promiscuous mode
[71383.674775] virbr0: port 1(vnet0) entered blocking state
[71383.677431] virbr0: port 1(vnet0) entered listening state
[71384.077738] audit: type=1400 audit(1732157274.731:177): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="libvirt-3ca46e41-5cca-40b0-a5cd-d7d7e60de326" pid=30697 comm="apparmor_parser"
[71385.702614] virbr0: port 1(vnet0) entered learning state
[71387.718555] virbr0: port 1(vnet0) entered forwarding state
[71387.720995] virbr0: topology change detected, propagating

Я пробовал --network default,model=e1000 – без изменений. Я успешно вижу консоль гостя, когда подключаюсь к VPS по VNC. К сожалению, у меня нет пароля для входа, так что я не могу даже проверить, видит ли он какой-либо сетевой адаптер.

Я пытался загрузить ISO GRML (https://grml.org/) с помощью следующей команды:

# virt-install --name test-cloud-vnc --os-variant debian11 --ram 8192 --disk debian-12-genericcloud-amd64.qcow2,device=disk,bus=virtio,size=10,format=qcow2 --hvm --import
--noautoconsole --network default --cdrom grml64-full_2024.02.iso --boot cdrom  --graphics vnc,port=-1,listen=0.0.0.0

К сожалению, загрузка GRML зависает вскоре после старта, очевидно, при попытке загрузить initrd. Так что я не могу исследовать гостя таким образом.

Буду признателен за советы по отладке этого.

Ответ или решение

Проблема с вложенной виртуализацией и сетевой конфигурацией libvirt: пошаговое руководство по отладке

Введение

Вложенная виртуализация — это мощная функция, позволяющая запускать гипервизоры внутри гипервизоров. Однако настройка сетевого взаимодействия в таких условиях может вызывать определённые сложности. Рассмотрим вашу ситуацию и предложим пошаговые рекомендации для диагностики и решения проблемы с сетью на виртуальных машинах (ВМ), которые вы пытаетесь настроить на VPS с установленным Debian 12.

Проблема

Вы уже установили необходимые компоненты libvirt/virt-manager и загрузили образы "nocloud" и "genericcloud", но сталкиваетесь с проблемами доступа ВМ к сети, что затрудняет использование cloud-init и затрудняет дальнейшую работу.

Предварительная проверка конфигурации

  1. Контроль сетевых настроек
    Убедитесь, что виртуальный сетевой интерфейс правильно настроен. В libvirt используется интерфейс virbr0 для NAT. Убедитесь, что этот интерфейс активен:

    ip addr show virbr0

    Если virbr0 не активен, вы можете активировать его с помощью:

    virsh net-start default

    Также убедитесь, что у вас есть доступ к DHCP-серверу, который предоставляет IP-адреса вашим ВМ.

  2. Проверка DHCP
    Используйте команду для получения списка DHCP-аренд:

    virsh net-dhcp-leases default

    Если ваши ВМ не отображаются в данном списке, это может указывать на проблемы с сетью.

Настройка сети

  1. Проверьте конфигурацию сети libvirt
    Убедитесь, что у вас есть правильная конфигурация для default сети. Вы можете просмотреть конфигурацию с помощью:

    virsh net-info default
    virsh net-dumpxml default

    Вам нужно убедиться, что у вас правильно настроены параметры DHCP и NAT.

  2. Параметры сетевого адаптера
    Вы можете попробовать изменить параметры сетевого адаптера с virtio на e1000 или rtl8139, что иногда решает проблемы с совместимостью:

    --network network=default,model=e1000

Проверка cloud-init

  1. Попробуйте получить доступ непосредственно к консоли
    Подключитесь к консоли вашей ВМ через VNC и проверьте доступные интерфейсы через команду:

    ip a

    Это поможет вам узнать, видит ли операционная система сетевые адаптеры.

  2. Проверка конфигурации cloud-init
    Убедитесь, что образ cloud-init настроен правильно, и соответствующие файлы настроек (например, user-data и meta-data) присутствуют и корректны. Попробуйте создать эти файлы и указать их при установке:

    --disk path=/path/to/user-data,device=cdrom,bus=virtio,format=raw

Дополнительные рекомендации

  1. Логи и отладка
    Проверяйте системные логи ВМ через dmesg и лог cloud-init (/var/log/cloud-init.log и /var/log/cloud-init-output.log) для выявления возможных ошибок.

  2. Обновление пакетов
    Убедитесь, что все пакеты и компоненты libvirt, qemu и virt-manager обновлены:

    apt update && apt upgrade
  3. Использование ISO-образов для тестирования
    Если boot с GRML ISO зависает, попробуйте использовать другие минималистичные дистрибутивы, например, Alpine или Debian netinst, для отладки и получения доступа к командной строке.

Заключение

Проблемы с сетевой доступностью во вложенной виртуализации могут быть сложными и требуют системного подхода к диагностике. Приведённые рекомендации помогут вам наладить работу сетевой конфигурации и успешно интегрировать cloud-init. Если вы продолжаете сталкиваться с трудностями, рассмотрите возможность получения дополнительной помощи на специализированных форумах или сообществах пользователей libvirt.

Оцените материал
Добавить комментарий

Капча загружается...