Настройте частную сеть между двумя хостами и двумя виртуальными машинами с помощью libvirt / openvswitch

У меня два узла и две виртуальные машины

kvm01
-nic1 123.123.123.1

VM1 
-vnet1 123.123.123.2 (public) -vnet2 10.0.0.1 (private)

kvm02
-nic1 123.123.123.2

VM2
-vnet1 123.123.123.4 (public) -vnet2 10.0.0.2 (private)

Как можно настроить сеть openvswitch так, чтобы виртуальные машины VM1 и VM2 находились в частной сети, но хосты находились в двух разных местах?

РЕДАКТИРОВАТЬ:

Выполнение этой команды:

# ovs-vsctl add-port br-private vxlan1 -- \
  set Interface vxlan1 type=vxlan options:remote_ip=123.123.123.2

В результате получилась такая конфигурация OVS:

root@backup01:~# ovs-vsctl show
6276bd0a-920b-469d-a4e0-90d990dd8f94
    Bridge "br-private1"
        Port "vxlan1"
            Interface "vxlan1"
                type: vxlan
                options: {remote_host="107.150.29.72"}
        Port "br-private1"
            Interface "br-private1"
                type: internal
    ovs_version: "2.3.0"
root@kvmssd01:~# ovs-vsctl show
da6399d4-1435-437d-90d7-3e75c443389b
    Bridge br-private
        Port "vxlan1"
            Interface "vxlan1"
                type: vxlan
                options: {remote_host="107.150.29.68"}
        Port br-private
            Interface br-private
                type: internal
    ovs_version: "2.3.0"

Используя это ядро:

root@backup01:~# uname -r
3.16.0-4-amd64

С помощью этого модуля:

root@backup01:~# modinfo openvswitch
filename:       /lib/modules/3.16.0-4-amd64/kernel/net/openvswitch/openvswitch.ko
license:        GPL
description:    Open vSwitch switching datapath
depends:        libcrc32c,vxlan,gre
intree:         Y
vermagic:       3.16.0-4-amd64 SMP mod_unload modversions 

И эта версия OVS:

root@backup01:~# ovs-vsctl --version
ovs-vsctl (Open vSwitch) 2.3.0
Compiled Dec 19 2014 03:59:10
DB Schema 7.6.0

Привели к этим ошибкам:

root@backup01:~# ovs-vswitchd logs
2015-07-23T16:34:59Z|00001|reconnect|INFO|logs: connecting...
2015-07-23T16:34:59Z|00002|reconnect|INFO|logs: connection attempt failed
  (Address family not supported by protocol)
2015-07-23T16:34:59Z|00003|reconnect|INFO|logs: waiting 1 seconds before reconnect
2015-07-23T16:35:00Z|00004|reconnect|INFO|logs: connecting...
2015-07-23T16:35:00Z|00005|reconnect|INFO|logs: connection attempt failed 
    (Address family not supported by protocol)
2015-07-23T16:35:00Z|00006|reconnect|INFO|logs: waiting 2 seconds before reconnect

lsmod вывод:

# lsmod | grep openvswitch 
openvswitch 63932 0 
gre 12777 1 openvswitch 
vxlan 35053 1 openvswitch 
libcrc32c 12426 1 openvswitch

person Charlie    schedule 22.07.2015    source источник
comment
Что lsmod | grep openvswitch показывает в вашей системе?   -  person larsks    schedule 23.07.2015
comment
хммм, кажется, даже до я настраиваю vlan, он показывает эту ошибку. установка по умолчанию на debian 8. может что-то не так с сервером openvswitch?   -  person Charlie    schedule 23.07.2015


Ответы (1)


Один из вариантов - настроить туннель VXLAN между мостами OVS на двух хостах.

Создание мостов OVS

На каждом хосте создайте мост OVS, который будет использоваться частной сетью:

ovs-vsctl add-br br-private

При создании виртуальных машин libvirt подключите vnet2 на каждой гостевой машине к br-private мосту. При использовании virt-install это будет выглядеть примерно так:

virt-install ... -w bridge=br-private,virtualport_type=openvswitch

Если вы используете какой-либо другой механизм для создания своих гостей, соответствующий XML будет выглядеть так:

<interface type='bridge'>
    < source bridge='br-private'/>
    < virtualport type='openvswitch'/>
< /interface>

Создание туннелей VXLAN

Теперь создайте туннель VXLAN от kvm01 до kvm02. На kvm01:

ovs-vsctl add-port br-private vxlan1 -- \
  set Interface vxlan1 type=vxlan options:remote_ip=123.123.123.2

И на kvm02:

ovs-vsctl add-port br-private vxlan1 -- \
  set Interface vxlan1 type=vxlan options:remote_ip=123.123.123.1

Имея этот туннель и подключив гостей к br-private, вы создали виртуальную сеть, охватывающую несколько хостов.

Обратите внимание, что VXLAN работает через UDP-порт 4789, поэтому вам может потребоваться изменить конфигурацию брандмауэра, чтобы разрешить эти подключения.

Готовая конфигурация OVS будет выглядеть примерно так:

# ovs-vsctl show
ac885d3d-b636-4bb1-a75e-37f361af87e3
    Bridge br-private
        Port "vxlan1"
            Interface "vxlan1"
                type: vxlan
                options: {remote_ip="192.168.122.107"}
        Port br-private
            Interface br-private
                type: internal
        Port vnet2
            Interface vnet2
    ovs_version: "2.3.2"

... хотя, конечно, используя IP-адреса вашего хоста, а не этот адрес из моей тестовой среды.

person larsks    schedule 22.07.2015
comment
КЛАССНО! Спасибо за помощь. Все еще пытаюсь понять openvswitch. И последний вопрос. Сколько виртуальных локальных сетей я могу иметь (например, если у меня есть 1000 виртуальных машин на одном хосте, все с частными сетями и 1000 виртуальных машин на другом хосте. Было бы лучше / целесообразно иметь 1000 виртуальных локальных сетей?). - person Charlie; 23.07.2015
comment
Кроме того, как я могу настроить DHCP-сервер на openvswitch (или, может быть, через libvirt?), Чтобы хостам на libvirt / KVM автоматически назначались частные IP-адреса. СПАСИБО ЗА ПОМОЩЬ!! - person Charlie; 23.07.2015
comment
Вы можете туннелировать несколько VLAN через один туннель VXLAN, но это включает в себя добавление правил openflow, которые преобразуют теги VLAN в идентификаторы туннелей VXLAN (и обратно на другой стороне). Оба этих вопроса несколько выходят за рамки исходного вопроса, поэтому я бы предложил провести небольшое исследование, а затем, возможно, опубликовать новые вопросы (возможно, на Serverfault, что, возможно, более подходит для этой темы). - person larsks; 23.07.2015
comment
Обратите внимание, что OpenStack выполняет обе эти функции (предоставляет DHCP-серверы для частных виртуальных сетей и туннелирует VLAN через туннели VXLAN), поэтому вы можете найти некоторые примеры в документации / блогах OpenStack / и т. Д. - person larsks; 23.07.2015
comment
Я пытаюсь настроить это, но мне кажется, что я продолжаю получать ошибку Семейство адресов, не поддерживаемых протоколом, когда я ввожу информацию о порте. Любые идеи? - person Charlie; 23.07.2015
comment
Обновите свой вопрос, указав (а) точную командную строку, которую вы используете, (б) точное сообщение об ошибке и (в) информацию о том, какой дистрибутив, ядро ​​и версию openvswitch вы используете. - person larsks; 23.07.2015