Настройка изолированных сетей в OpenNebula используя VxLAN в Open vSwitch

Настройка изолированных сетей в OpenNebula используя VxLAN в Open vSwitch

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

Рассмотрим решение по созданию виртуальных приватных сетей для виртуальных ресурсов, используя технологию сетевой виртуализации VxLAN (Virtual eXtensible Local Area Network) в открытом программном коммутаторе Open vSwitch.

VxLAN является технологией сетевой виртуализации, созданной для решения проблем масштабируемости в больших системах облачных вычислений. Она использует схожую с VLAN технику для MAC инкапсуляции Layer 2 Ethernet кадров в UDP-пакеты, порт 4789.

Технология VxLAN - это способ создания новых логических L2-сетей в рамках уже существующих L3-сетей. В одной VxLAN-сети виртуальная машина уникально идентифицируется двумя следующими параметрами:

  • VXLAN Network Identifier (VNI) - 24-битный идентификатор виртуальной сети, а значит их всего может быть более 16 миллионов штук.
  • MAC-адрес сервера.

Задача состоит в том, чтобы создать несколько изолированных друг от друга локальных сетей для виртуальных ресурсов между гипервизорами.

Гипервизоры:

  • vmm01.devserver.network - 172.16.1.1
  • vmm02.devserver.network - 172.16.1.2
  • vmm03.devserver.network - 172.16.1.3
  • vmm04.devserver.network - 172.16.1.4
  • vmm05.devserver.network - 172.16.1.5

Шаг 1. Установка Open vSwitch

Установка Open vSwitch так же детально описана в одной из моих статей.

1
yum install https://rdoproject.org/repos/rdo-release.rpm -y
1
yum install openvswitch -y

Добавим сервис в автозагрузку отключив работу NetworkManager.

1
2
3
4
5
6
systemctl start openvswitch.service
systemctl enable openvswitch.service
systemctl disable NetworkManager
systemctl stop NetworkManager
systemctl enable network.service
systemctl start network.service

Шаг 2. Создаем бридж интерфейc и выполнеям его настройку

Создаем бридж с именем isolate. Выполняем настройку физического интерфейса на работу через бридж, а так же создаем и настраиваем сам бридж интерфейс.

1
ovs-vsctl add-br isolate
/etc/sysconfig/network-scripts/ifcfg-eth1
1
2
3
4
5
6
DEVICE="eth1"
DEVICETYPE="OVSIntPort"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="OVSPort"
OVS_BRIDGE=isolate
/etc/sysconfig/network-scripts/ifcfg-isolate
1
2
3
4
5
6
7
DEVICE="isolate"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="OVSBridge"
BOOTPROTO="static"
IPADDR=172.16.1.Х
PREFIX=24

Добавляем физический порт в бридж и перезагружаем сеть для применения изменений.

1
ovs-vsctl add-port isolate eth1 && systemctl restart network

Шаг 3. Поднимаем туннели между гипервизорами

Создаем связующий бридж на каждом хосте с гипервизором и поднимаем туннели с другими гипервизорами через него.

vmm01.devservers.network
1
ovs-vsctl add-br integrate

Создаем туннель со вторым, третьим, четвертым и пятым хостом.

1
2
3
4
ovs-vsctl add-port integrate vxlan0 -- set Interface vxlan0 type=vxlan options:remote_ip=172.16.1.2
ovs-vsctl add-port integrate vxlan1 -- set Interface vxlan1 type=vxlan options:remote_ip=172.16.1.3
ovs-vsctl add-port integrate vxlan2 -- set Interface vxlan2 type=vxlan options:remote_ip=172.16.1.4
ovs-vsctl add-port integrate vxlan3 -- set Interface vxlan3 type=vxlan options:remote_ip=172.16.1.5
vmm02.devservers.network
1
ovs-vsctl add-br integrate

Создаем туннель с первым, третьим, четвертым и пятым хостом.

1
2
3
4
ovs-vsctl add-port integrate vxlan0 -- set Interface vxlan0 type=vxlan options:remote_ip=172.16.1.1
ovs-vsctl add-port integrate vxlan1 -- set Interface vxlan1 type=vxlan options:remote_ip=172.16.1.3
ovs-vsctl add-port integrate vxlan2 -- set Interface vxlan2 type=vxlan options:remote_ip=172.16.1.4
ovs-vsctl add-port integrate vxlan3 -- set Interface vxlan3 type=vxlan options:remote_ip=172.16.1.5
vmm03.devservers.network
1
ovs-vsctl add-br integrate

Создаем туннель с первым, вторым, четвертым и пятым хостом.

1
2
3
4
ovs-vsctl add-port integrate vxlan0 -- set Interface vxlan0 type=vxlan options:remote_ip=172.16.1.1
ovs-vsctl add-port integrate vxlan1 -- set Interface vxlan1 type=vxlan options:remote_ip=172.16.1.2
ovs-vsctl add-port integrate vxlan2 -- set Interface vxlan2 type=vxlan options:remote_ip=172.16.1.4
ovs-vsctl add-port integrate vxlan3 -- set Interface vxlan3 type=vxlan options:remote_ip=172.16.1.5
vmm04.devservers.network
1
ovs-vsctl add-br integrate

Создаем туннель с первым, вторым, третьим и пятым хостом.

1
2
3
4
ovs-vsctl add-port integrate vxlan0 -- set Interface vxlan0 type=vxlan options:remote_ip=172.16.1.1
ovs-vsctl add-port integrate vxlan1 -- set Interface vxlan1 type=vxlan options:remote_ip=172.16.1.2
ovs-vsctl add-port integrate vxlan2 -- set Interface vxlan2 type=vxlan options:remote_ip=172.16.1.3
ovs-vsctl add-port integrate vxlan3 -- set Interface vxlan3 type=vxlan options:remote_ip=172.16.1.5
vmm05.devservers.network
1
ovs-vsctl add-br integrate

Создаем туннель с первым, вторым, третьим и четвертым хостом.

1
2
3
4
ovs-vsctl add-port integrate vxlan0 -- set Interface vxlan0 type=vxlan options:remote_ip=172.16.1.1
ovs-vsctl add-port integrate vxlan1 -- set Interface vxlan1 type=vxlan options:remote_ip=172.16.1.2
ovs-vsctl add-port integrate vxlan2 -- set Interface vxlan2 type=vxlan options:remote_ip=172.16.1.3
ovs-vsctl add-port integrate vxlan3 -- set Interface vxlan3 type=vxlan options:remote_ip=172.16.1.4

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Bridge integrate
Port integrate
Interface integrate
type: internal
Port "vxlan2"
Interface "vxlan2"
type: vxlan
options: {remote_ip="172.16.1.4"}
Port "vxlan3"
Interface "vxlan3"
type: vxlan
options: {remote_ip="172.16.1.5"}
Port "vxlan0"
Interface "vxlan0"
type: vxlan
options: {remote_ip="172.16.1.2"}
Port "vxlan1"
Interface "vxlan1"
type: vxlan
options: {remote_ip="172.16.1.3"}
Bridge isolate
Port isolate
Interface isolate
type: internal
Port "eth1"
Interface "eth1"
ovs_version: "2.9.0"

Шаг 4. Добавляем новую приватную сеть в OpenNebula

Создаем новую виртуальную сеть, к примеру RedNetwork, выбираем тип Open vSwitch - VXLAN и указываем isolate в качестве интерфейса для обмена трафиком.

После создания сети будет автоматически добавлен новый бридж для данной сети, а так же присвоен VNI (VxLAN Network Identifier) для тэгирования трафика. Нумерацию VNI в OpenNebula можно указать в конфигурационном файле /etc/one/oned.conf, параметр VXLAN_IDS.

В примере я добавил вторую виртуальную сеть с такой же адресацией и назвал её BlueNetwork, чтобы показать, что сети не пересекаются между собой и остаются в рамках своего VNI.

Шаг 5. Создаем виртуальные сервера и проверяем

Создаем, два виртуальных сервера с адресами 10.50.50.1 и 10.50.50.2 в сети RedNetwork и два сервера с такой же адресацией в сети BlueNetwork. Проверяем доступность. (Наглядный пример работы представлен в видео-уроке к данной статье)