Многопроходная, 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
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;
}
}