Замена стандартного Linux Bridge на Open vSwitch

На сегодняшний день (далее ) стандарт де факто при построении SDN. Он используется в таких проектах как OpenStack или Xen Cloud Platform. Возможностей у довольно много. В этой заметке я хочу рассмотреть довольно скромную тему, использование OvS как замену стандартного linux в .

Для выполнения описанной ниже конфигурации требуется локальное подключение к консоли сервера, так как в процессе конфигурации сетевое подключение будет не доступно. Установка рассмотрена на примере Fedora Linux

Установка осуществляется средствами штатного пакетного менеджера:

 dnf -y install openvswitch systemctl enable openvswitch.service systemctl start openvswitch.service 

К сожалению данная конфигурация является экзотической и не может сосуществовать с NetworkManager, отключаем NetworkManager:

 systemctl disable NetworkManager systemctl stop NetworkManager systemctl enable network.service systemctl start network.service 

При условии, что у нашего сервера один физический интерфейс enp0s31f6, базовая конфигурация Open vSwitch выглядит следующим образом:

 ovs-vsctl add-br ovs-br0 ovs-vsctl add-port ovs-br0 enp0s31f6 

Проверяем конфигурацию:

 ovs-vsctl show 5dd118bd-01e5-4f45-9a18-cc90edfc24bf Bridge "ovs-br0" Port "enp0s31f6" Interface "enp0s31f6" Port "ovs-br0" Interface "ovs-br0" type: internal ovs_version: "2.5.0" 

Изменения в network-scripts не описываю сознательно, так как они достаточно тривиальны.

Настроить libvirt для работы с OvS можно только через редактирование конфигурационного XML виртуальной машины. В GUI такой возможности нет.

 virsh edit <vm> 

Необходимо найти секцию конфигурации сетевого интерфейса, которая выглядит примерно так:

 <interface type='bridge'> <mac address='52:54:00:c3:5c:6c'/> <source bridge='bridge0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> 

И скорректировать ее к примерно такому виду:

 <interface type='bridge'> <mac address='52:54:00:c3:5c:6c'/> <source bridge='ovs-br0'/> <virtualport type='openvswitch'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> 

После сохранения конфигурации автоматически будет добавлен параметр interfaceid:

 virsh dumpxml vm-puppet | grep bridge -A3 <interface type='bridge'> <mac address='52:54:00:c3:5c:6c'/> <source bridge='ovs-br0'/> <virtualport type='openvswitch'> <parameters interfaceid='145a28af-80da-4e01-acfb-cfabca568698'/> </virtualport> 

И после запуска виртуальной машины можно наблюдать успешное добавление порта в конфигурацию OvS:

 ovs-vsctl show 5dd118bd-01e5-4f45-9a18-cc90edfc24bf Bridge "ovs-br0" Port "vnet0" Interface "vnet0" Port "enp0s31f6" Interface "enp0s31f6" Port "ovs-br0" Interface "ovs-br0" type: internal ovs_version: "2.5.0"