Многопроходная, virt-manager и мостовая сеть

Я только начинаю использовать Multipass и обнаружил, что некоторая документация скудна (или я не знаю, как ее правильно найти). Я использую 19.10 с установленными QEMU и libvirt. Я создал мостовой интерфейс Ethernet под названием br0 для виртуальной машины Windows 10, которая мне нужна в той же подсети, что и другие мои рабочие станции. Эта часть работает нормально. Я выполнил команду "sudo multipass set local.driver=libvirt", а затем создал свой первый многопроходный экземпляр.

Первая проблема, с которой я столкнулся, заключалась в том, что мне пришлось использовать метод многопроходного подключения для входа в виртуальную машину и создания пользователя (кроме пользователя по умолчанию "ubuntu") и сделать нового пользователя членом sudo. Это произошло потому, что я не мог понять, как войти в виртуальную машину через консоль virt-manager в качестве многопроходного пользователя sudo ubuntu. Как только это было сделано, я смог войти в консоль virt-manager как новый пользователь и установить openssh-server. Я выключил виртуальную машину, сменил сетевой адаптер в virt-manager на мостовой интерфейс Ethernet, перезапустил виртуальную машину, и виртуальная машина получила IP-адрес от моего DHCP-сервера и стала напрямую доступной с любой другой рабочей станции или виртуальной машины в сети через SSH.

К сожалению, это нарушает метод подключения к виртуальной машине " multipass connect vm01 " (фактически, он нарушает все многопроходные команды из CLI, которые направлены на экземпляр), и единственный способ подключения сейчас - через SSH (или виртуальный интерфейс). -менеджер консоль).

Есть ли где-нибудь файл конфигурации, чтобы дать команду multipass искать виртуальную машину на новом мостовом интерфейсе? На самом деле меня устраивает, что он работает как отдельная виртуальная машина под управлением virt-manager (на самом деле, это фантастический способ развернуть виртуальную машину Ubuntu без создания новой виртуальной машины в virt-manager, подключения ISO и т. Д.). Но я могу предвидеть будущие проблемы с разрывом многопроходной связи CLI с экземпляром.

2 ответа

Спасибо, что попробовали Multipass. В Multipass мы по умолчанию используем облачные образы Ubuntu, поэтому следует помнить о нескольких вещах. По умолчанию облачные образы не имеют пользователя с активированным паролем. Однако, поскольку это облачные изображения, вы можете использовать cloud-init для предоставления вашего экземпляра Multipass множеством различных способов. cloud-initдокументацию можно найти по адресу https://cloudinit.readthedocs.io/en/latest/. Там есть много примеров для самых разных конфигураций. Кроме того, на https://ubuntu.com/blog/using-cloud-init-with-multipass есть короткое сообщение об использовании cloud-init с Multipass.

Что касается сетей и multipass подключения к экземпляру, да, нам требуется sshсоединение, и поэтому мы должны иметь возможность легко обнаружить IP-адрес экземпляра. Лучший способ использовать мостовую сеть - добавить второй интерфейс через cloud-init а затем укажите libvirt на этот второй интерфейс для мостовой сети и оставьте сеть NAT без изменений, чтобы multipass можно к нему подключиться.

Надеюсь, это поможет и удачи!

У меня был аналогичный вариант использования - в дополнение к использованию инструментов SSH, я обнаружил, что для случаев использования сервера очень полезно также использовать nginx, в случае использования хоста многопроходных виртуальных машин с безголового сервера ubuntu.

например, я использую веб-сервер rails на многопроходной виртуальной машине на порту 3000 и свяжу его с помощью ssh на порт 9000 на моем хосте и могу подключиться к моему хосту из любого места в <host ip>:8080

1. Свяжите многопроходный с хостом
sudo ssh -L 9000:localhost:3000 \ 
    -i /var/snap/multipass/common/data/multipassd/ssh-keys/id_rsa \
    ubuntu@<multipass instance ip> 
2. Разрешить доступ к многопроходному извне с хоста

Теперь, используя nginx, я собираюсь подключиться к порту 9000, используя IP-адрес хоста, и открыть его на порту 8080 для внешних подключений.

server {
    listen 8080;
    server_name development;
    location / {
        proxy_pass http://localhost:9000;
    }
}
Другие вопросы по тегам