среда, 25 ноября 2015 г.

OpenvSwitch, ubuntu 14.04 qemu-kvm

... Велосипед на костыльной тяге (c) admin Linux

Сия статья написана в виде заметки по созданию виртуальных локальных сетей. Суть её в том, чтобы создать изолированные локальные сети второго уровня без необходимости подключения физического интерфейса. Т.е. все виртуально, и выход в Интернет осуществляется посредством маршрутизации. Операции проводятся на хосте с предустановленной Ubuntu Server  14.04.03 и с предустановленной системой виртуализации qemu-kvm с библиотекой управления Libvirt

 Первым делом надо поставить пакет для работы с openvswitch
# apt-get install openvswitch-switch
После установки, нам доступны различные команды для создания и конфигурирования виртуальных коммутаторов


# ovs-vsctl add-br ovs-br0
Это команда создает виртуальный коммутатор с названием ovs-br0, но он пока никакой смысловой нагрузки не несет.

Теперь нам надо добавить порт в наш новый коммутатор


# ovs-vsctl add-port ovs-br0 bond0

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

После добавление порта bond0 в коммутатор, необходимо его сделать транковым.


# ovs-vsctl set port bond0 trunks=7,10,20,1010,1020,30,1030

В каких vlan'ах этот порт будет, решать каждому. Т.е. можно заменить 7,10,20... на другие значения. Теперь можно задать адрес коммутатору

# ifconfig ovs-br0 10.6.6.6/24 up

Приятной особенностью OpenVswitch является сохранением настроек внутри себя. Т.е. чтобы наш коммутатор после перезапуска был готов к работе с нужными конфигурациями, достаточно в /etc/network/interfaces добавить строчки

auto ovs-br0
iface ovs-br0 inet static
 address 10.6.6.6
 netmask 255.255.255.0
 network 10.6.6.0
 broadcast 10.6.6.255
 #gateway 10.6.6.254
 # dns-* options are implemented by the resolvconf package, if installed
 dns-nameservers 10.6.6.254
Коммутатор в принципе готов к работе, но можно воспользоваться еще одной интересной возможностью для масштабирования фермы виртуальных машин. Т.е. создадим порт-группы, которые позволят прямо из GUI virt-manager'a добавлять виртуальные машины прямо в группы. Довольно-таки удобно.

Для начала создадим файлик /tmp/ovs-network.xml

И вставим в него следующий текст:

<network>
  <name>ovs-network</name>
  <forward mode='bridge'/>
  <bridge name='ovs-br0'/>
  <virtualport type='openvswitch'/>
  <portgroup name='vlan-10'>
    <vlan>
      <tag id='10'/>
    </vlan>
  </portgroup>
  <portgroup name='vlan-20'>
    <vlan>
      <tag id='20'/>
    </vlan>
  </portgroup>
  <portgroup name='vlan-1010'>
    <vlan>
      <tag id='1010'/>
    </vlan>
  </portgroup>
  <portgroup name='vlan-1020'>
    <vlan>
      <tag id='1020'/>
    </vlan>
  </portgroup>
  <portgroup name='trunkPortGroup'>
    <vlan trunk='yes'>
      <tag id='30'/>
      <tag id='1030'/>
    </vlan>
  </portgroup>
</network>

Далее выполняем команды:


virsh net-define /tmp/ovs-network.xml
virsh net-start ovs-network
virsh net-autostart ovs-network

фы Теперь вернемся к интерфейсу bond0. Если его не создавать, то все виртуальные машины в этом коммутаторе будут в одном vlan'е. Но при наличии транкового порта, группы vlan'ов начинают работать.