Рекомендую: Фриланс-биржа | Кэшбэк-сервис | Интернет-бухгалтерия

OpenVSwitch — использование виртуального коммутатора в Linux

В данном материале создадим виртуальную сеть используя OpenVSwitch, сравним OVS с Linux bridge, а также рассмотрим интеграцию OpenVSwitch с гипервизором KVM

Почему стоит использовать 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