Почему стоит использовать OpenVSwitch
OpenVSwitch это программный коммутатор, специально предназначенный для работы с системами виртуализации. OpenVSwitch предоставляет куда большие возможности, по сравнению со стандартной утилитой Linux bridge-utils. Например:
- Учет трафика с помощью sFlow и Netflow
- Возможность создания VLAN (IEEE 802.1q)
- Поддержка Openflow для управления коммутацией
- Привязка виртуальных интерфейсов к конкретным физическим интерфейсам.
- Поддержка зеркалирования портов
- ACL
- Политики QoS
Использование OpenVSwitch поможет организовать логически структурированную виртуальную сеть с возможностью тонкой настройки. Так что, по моему мнению, всем, кто знакомится или уже работает с виртуализацией KVM, использование OpenVSwitch строго рекомендуется.
Установка и начало работы
Пакет OpenVSwitch поставляется из стандартного репозитория Ubuntu/Debian, поэтому установка простая. Выполняем команду:
sudo apt install openvswitch-switch
Для работы с сетевыми интерфейсами используется утилита ovs-vsctl. Проверим, какая версия OpenVSwitch установлена:
sudo ovs-vsctl -V
Вывод утилиты:
ovs-vsctl (Open vSwitch) 2.9.0
DB Schema 7.15.1
Создание виртуальных интерфейсов
Для создания виртуального коммутатора сначала необходимо создать мост до реального сетевого устройства. Реальный сетевой порт, по сути, будет являться одним из портов виртуального коммутатора.
Создаем мост:
sudo ovs-vsctl add-br bridgeswitch
Добавляем к мосту сетевой интерфейс:
sudo ovs-vsctl add-port bridgeswitch eth0
Теперь можно перейти к добавлению виртуальных портов:
sudo ovs-vsctl add-port bridgeswitch test-interface -- set interface test-interface type=internal
В команде выше мы обозначили создание виртуального интерфейса test-interface, привязанного к бриджу bridgeswitch. После двойной черты, обозначающей начало новой строки, указываем тип интерфейса.
Виртуальных коммутаторов, как и виртуальных интерфейсов можно создавать неограниченное количество. В последствие, виртуальные сетевые интерфейсы будут подключаться к виртуальным машинам.
На этом все. Теперь, выполнив команду:
sudo ovs-vsctl show
можно увидеть список всех мостов и виртуальных интерфейсов:
ovs-vsctl show
8e5433c6-c82d-46b0-8378-543c40e4e9c0
Bridge bridgeswitch
Port test-interface
Interface test-interface
type: internal
Port "enp5s0"
Interface "eth0"
Port bridgeswitch
Interface bridgeswitch
type: internal
ovs_version: "2.9.0"
С виртуальным интерфейсом test-interface можно работать как с обычным физическим, то есть появляется возможность конфигурировать его на локальной машине. Это бывает полезно, когда нужно обеспечить работу сервера в нескольких вланах, используя одну сетевую карту в качестве транка. Или, например, задать серверу несколько ip адресов. Для этого создается несколько виртуальных интерфейсов и для каждого прописывается конфигурация. Но я не рекомендую это делать. Если возникнет ситуация как в примере выше, то лучше использовать возможности systemd-networkd или ip.
Для удаления портов используйте следующую команду:
sudo ovs-vsctl del-port bridgeswitch test-interface
Для удаления бриджа:
sudo ovs-vsctl del-br bridgeswitch
Добавление VLAN
Одним из больших плюсов работы с OpenVSwitch является поддержка VLAN. Для этого нужно обозначить теги на виртуальных портах и настроить сетевую карту как транковый интерфейс.
Создадим новый виртуальный коммутатор:
sudo ovs-vsctl add-br vlanswitch
Добавляем реальную сетевую карту к виртуальному коммутатору:
sudo ovs-vsctl add-port vlanswitch eth0
Делаем порт коммутатора транковым и описываем теги, которые будут проходить через коммутатор:
sudo ovs-vsctl set port eth0 trunks=10,20,300,400,1000
Добавляем виртуальный сетевой интерфейс и присваиваем ему тег:
sudo ovs-vsctl add-port vlanswitch testvlan20 tag=20 -- set interface testvlan20 type=internal
Теперь можно посмотреть конфигурацию:
ovs-vsctl show
8e5433c6-c82d-46b0-8378-543c40e4e9c0
Bridge vlanswitch
Port vlanswitch
Interface vlanswitch
type: internal
Port "testvlan20"
tag: 20
Interface "testvlan20"
type: internal
Port "enp5s0"
trunks: [10, 20, 300, 400, 1000]
Interface "enp5s0"
ovs_version: "2.9.0"
Включение Netflow на виртуальном коммутаторе OpenVSwitch
Если возникает необходимость вести учет сетевого трафика, проходящего через интерфейсы, то заставить OpenVSwitch отправлять пакеты Netflow на адрес коллектора можно одной командой:
ovs-vsctl -- set Bridge vlanswitch netflow=@nf /
-- --id=@nf create NetFlow targets="192.168.1.1:5566" /
active-timeout=30
Необходимо только указать имя виртуального коммутатора, ip адрес и порт назначения и период, через который будут отправляться данные (в секундах).
Чтобы обновить или изменить параметры, указанные в предыдущей команде, выполняем:
ovs-vsctl set Netflow vlanswitch active_timeout=60
Чтобы прекратить отправлять данные на Netflow коллектор, достаточно очистить настройки Netflow для виртуального коммутатора:
ovs-vsctl clear Bridge vlanswitch netflow
Кстати, о том, как поднять Netflow коллектор используя стек ELK есть материал вот в этой статье.
Заключение
Здесь описан необходимый минимум для начала работы с OpenVSwitch. О непосредственной же интеграции OpenVSwitch и KVM подробно будет написано в следующей статье.
If you liked my post, feel free to subscribe to my rss feeds