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


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

Для выполнения описанной ниже конфигурации требуется локальное подключение к консоли сервера, так как в процессе конфигурации сетевое подключение будет не доступно. Установка рассмотрена на примере 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-  | 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"

Добавить комментарий