Вопрос или проблема
Итак, у меня есть 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 и затрудняет дальнейшую работу.
Предварительная проверка конфигурации
-
Контроль сетевых настроек
Убедитесь, что виртуальный сетевой интерфейс правильно настроен. В libvirt используется интерфейсvirbr0
для NAT. Убедитесь, что этот интерфейс активен:ip addr show virbr0
Если
virbr0
не активен, вы можете активировать его с помощью:virsh net-start default
Также убедитесь, что у вас есть доступ к DHCP-серверу, который предоставляет IP-адреса вашим ВМ.
-
Проверка DHCP
Используйте команду для получения списка DHCP-аренд:virsh net-dhcp-leases default
Если ваши ВМ не отображаются в данном списке, это может указывать на проблемы с сетью.
Настройка сети
-
Проверьте конфигурацию сети libvirt
Убедитесь, что у вас есть правильная конфигурация дляdefault
сети. Вы можете просмотреть конфигурацию с помощью:virsh net-info default virsh net-dumpxml default
Вам нужно убедиться, что у вас правильно настроены параметры DHCP и NAT.
-
Параметры сетевого адаптера
Вы можете попробовать изменить параметры сетевого адаптера сvirtio
наe1000
илиrtl8139
, что иногда решает проблемы с совместимостью:--network network=default,model=e1000
Проверка cloud-init
-
Попробуйте получить доступ непосредственно к консоли
Подключитесь к консоли вашей ВМ через VNC и проверьте доступные интерфейсы через команду:ip a
Это поможет вам узнать, видит ли операционная система сетевые адаптеры.
-
Проверка конфигурации cloud-init
Убедитесь, что образ cloud-init настроен правильно, и соответствующие файлы настроек (например,user-data
иmeta-data
) присутствуют и корректны. Попробуйте создать эти файлы и указать их при установке:--disk path=/path/to/user-data,device=cdrom,bus=virtio,format=raw
Дополнительные рекомендации
-
Логи и отладка
Проверяйте системные логи ВМ черезdmesg
и лог cloud-init (/var/log/cloud-init.log
и/var/log/cloud-init-output.log
) для выявления возможных ошибок. -
Обновление пакетов
Убедитесь, что все пакеты и компоненты libvirt, qemu и virt-manager обновлены:apt update && apt upgrade
-
Использование ISO-образов для тестирования
Если boot с GRML ISO зависает, попробуйте использовать другие минималистичные дистрибутивы, например, Alpine или Debian netinst, для отладки и получения доступа к командной строке.
Заключение
Проблемы с сетевой доступностью во вложенной виртуализации могут быть сложными и требуют системного подхода к диагностике. Приведённые рекомендации помогут вам наладить работу сетевой конфигурации и успешно интегрировать cloud-init. Если вы продолжаете сталкиваться с трудностями, рассмотрите возможность получения дополнительной помощи на специализированных форумах или сообществах пользователей libvirt.