Подключение виртуальной машины Libvirt (конфигурация домена XML) к OpenVSwitch

353
Chris

Я пытаюсь изучить OVS и KVM, и в целом разбираюсь в основных мостовых сетях в виртуальном мире (то есть между OVS, хостом VM и гостями KVM / Libvirt). Я использую ClearLinux (на основе systemd) на хосте VM.

Мой фактический вопрос выделен жирным шрифтом ниже, остальная часть этого поста, я надеюсь, поможет людям проконсультировать меня по этому вопросу.

РЕДАКТИРОВАТЬ:


Получил указание на SU от сетевого инжиниринга StackExchange. Если кто-нибудь знает какие-либо хорошие учебные курсы по OVS и KVM, пожалуйста, дайте мне знать :-)


Ссылки на данный момент: https://libvirt.org/formatdomain.html http://docs.openvswitch.org/en/latest/howto/libvirt/

Итак, я дошел до точки:

  1. Иметь мост овс (тестбридж)
  2. Подключил физическую сеть хоста (enp5s0) к тестбриджу
  3. Создано два виртуальных отводных устройства (virtualport1 и 2)
  4. Подключил краны к тестбриджу

OVS выглядит так:

sudo ovs-vsctl show  010aff41-dc37-410d-87dc-842a1a2cebeb Bridge testbridge Port "virtualport2" Interface "virtualport2" Port "enp5s0" Interface "enp5s0" Port testbridge Interface testbridge type: internal Port "vnet0" Interface "vnet0" Port "virtualport1" Interface "virtualport1" ovs_version: "2.8.1" 

'enp5s0' - это физический порт на хосте vm. Он подключен к Cisco SG-300 (общий интерфейс switchport, транкинг связки vlans, общий pvid 25 и vlan 25 без тегов).

Существует внешний DHCP-сервер, работающий на всех соответствующих VLANS.

У меня есть гость libvirt под названием 'debian' (бонусные баллы за креативность), который настроен с помощью:

<interface type='bridge'> <mac address="00:16:3E:EF:61:91"/> <model type='virtio'/> <source bridge='testbridge'/> <virtualport type='openvswitch'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <graphics type='vnc' port='-1' autoport='yes' sharePolicy='allow-exclusive' passwd='PleaseDontHaxorMe'> <listen type='address' listen='0.0.0.0'/> </graphics> 

Во всяком случае, вот где я застрял. Мой вопрос: как получить удовольствие от L3 на интерфейсе vnet0 (т. Е. На гостевом vm 'debian'), поэтому у меня есть IP для VNC, чтобы выполнить установку (я использую debian netinst.iso)?

Никогда раньше этого не делал, я вроде предполагал, что он будет arp и появится через DHCP, а ip address show vnet0 покажет адрес виртуальной машины к VNC ... Очевидно, что нет. Это выглядит как на L2 (как показано ниже):

ip address show vnet0 16: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq master ovs-system state UNKNOWN group default qlen 1000 link/ether fe:16:3e:ef:61:91 brd ff:ff:ff:ff:ff:ff inet6 fe80::fc16:3eff:feef:6191/64 scope link valid_lft forever preferred_lft forever 

Но делать:

sudo ovs-appctl fdb/show testbridge 

Только кажется, что список Mac на порт 1 (enp5s0) не vnet0 ...

Если мне это удастся, я также хотел бы узнать, как настроить vnet0 на тестовом мосту ovs:

  1. Как порт доступа в vlan 100?
  2. Как транковый порт, на vlan 100, 150 и 151?
  3. Соединить какие-либо / все помеченные VLAN с тем, что существует на тестбридже?
  4. То же, что 3, но в том числе без тегов vlans?

РЕДАКТИРОВАТЬ 3:


https://blog.scottlowe.org/2012/11/07/using-vlans-with-ovs-and-libvirt/ Это в значительной степени охватывает перечисленные выше моменты. Также рассматривается, как использовать домен libvirt xml для исправления в виртуальной машине. Еще не все закончил, завтра попробую.


Тем не менее, я, вероятно, смогу решить эти последние 4 вещи самостоятельно, если я смогу запустить виртуальную машину, чтобы перехватить трафик на vnet0 и посмотреть, что на самом деле происходит ...

ПРИМЕЧАНИЕ: я намеревался подключить виртуальную машину к virtualport1, но где-то пропустил, и вместо этого он создал новый порт на тестбридже под названием «vnet0». Я уверен, что это можно исправить в libvirt domainxml с параметрами ovs здесь (приведу в порядок позже, а сейчас vnet0!): Https://libvirt.org/formatdomain.html#elementsNICSBridge

РЕДАКТИРОВАТЬ 2:


Я думаю, что этот бит решен согласно ссылке выше:

Вытащите uuid соответствующего порта, к которому хотите подключиться:

sudo ovs-vsctl list Port | grep 'name\|_uuid' 

Добавьте его в XML-файл Libvirt соответствующей виртуальной машины:

<interface type='bridge'> <mac address="00:16:3E:EF:61:91"/> <model type='virtio'/> <source bridge='testbridge'/> <virtualport type='openvswitch'/> <parameters interfaceid='YOUR_UUID_GOES_HERE'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> 

ура

0

1 ответ на вопрос

0
Chris

Хорошо, оказывается, я XY'd это что-то ужасное ....

Все работало, я просто понятия не имел, как сделать установку без головы. Оказывается, что это легко сделать с помощью перенаправления портов SSH:

Прочитайте все о конфигурации XML домена VM (элемент относительно VNC в частности) здесь:

Некоторые краткие заметки об этом, хотя:

VNC Notes: * Default - Guest binds it's VNC server to hosts loopback: <graphics type='vnc' port='-1' autoport='yes'/> * The first guest gets screen 0/port 5900, the second guest gets screen 1/port 5901 etc. * Requires SSH tunneling in order to gain access to the guest domain’s VNC console. Better VNC Options: Guest listens on any host interface, port auto allocated: <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/> Guest listens on specified IP, port auto allocated, password protected: <graphics type='vnc' port='-1' autoport='yes' passwd='correcthorsebatterystaple'> <listen type='address' address='192.168.120.15'/> </graphics> Guest listens on specified IP and port, password protected with screen share policy: <graphics type='vnc' port='5904' listen='192.168.120.15' sharePolicy='allow-exclusive' passwd='correcthorsebatterystaple'> <listen type='address' listen='192.168.120.15'/> </graphics> Guest listens on specified IP, auto websocket, password protected with screen share policy: <graphics type='vnc' websocket='-1' listen='192.168.120.15' sharePolicy='allow-exclusive' passwd='correcthorsebatterystaple'> <listen type='address' listen='192.168.120.15'/> </graphics> 

В итоге: убедитесь, что у вас правильно настроен элемент XML домена VM для VNC и что вы используете netinst iso. Настройте ваш мост OVS (если это то, что вы используете для виртуальной машины). Определите libvirt сетевой XML. Затем в XML-описании домена VM подключите его к ранее определенной сети libvirt, которая использует ваш мост OVS.

Проверьте порт прослушивания виртуальной машины (отметив, что он относится к значению по умолчанию; 0 означает, что все IP-адреса на 5900, 127.0.0.1:1 будут означать localhost на 5901 и т. Д.).

sudo virsh vncdisplay $VM_NAME 

SSH пересылает интерфейс к виртуальной машине, который в общем случае выглядит следующим образом:

ssh -N -L HOST_IP:HOST_PORT:localhost:5900 user@kvmhost 

Пересылка Localhost 5901 в VM 5900:

ssh -N -L 5901:localhost:5900 user@kvmhost 

Переадресация определенного внешнего IP-адреса хоста на виртуальную машину. '-fNT' используется для фоновой пересылки SSH без фактической остановки процесса, освобождая сеанс консоли для дальнейшего его использования:

ssh -fNT -L 192.168.225.17:5901:localhost:5900 user@kvmhost