[12] Open Virtual Switch - wprowadzenie

Zapewnienie łączności dla hostów wirtualnych wymaga ich połączenia między sobą, jak i udostępnienia ich usług poza maszynę gospodarza. Osobiście preferuję izolację tych dwóch sieci. Aby otrzymać taką funkcjonalność należy (po zainstalowaniu i uruchomieniu openvswitch, który jest dość skomplikowanym i wieloelementowym tworem) utworzyć dwa switch-e wirtualne:

ovs-vsctl add-br vbr0
ovs-vsctl add-br vbr1

Switch vbr0 obsługuje sieć zewnętrzną zaś vbr1 sieć wewnętrzną w ramach jednej maszyny fizycznej.

Aby udostępnić switch vbr0 hostom wirtualnym, z zapewnieniem komunikacji na zewnątrz maszyny fizycznej, należy go połączyć z kartą sieciową. Ja używam do tego celu dedykowanej karty sieciowej, by nie zakłócać w żadnym razie komunikacji z gospodarzem (eth0 - host gospodarza, eth1 - maszyny wirtualne). Zatem odpowiednie wpisy w /etc/network/interfaces wyglądają następująco:

# Network interface for VMs
auto eth1
allow-vbr0 eth1
iface eth1 inet manual
   ovs_bridge vbr0
   ovs_type OVSPort

# ovswitch: vbr0
auto vbr0
allow-ovs vbr0
iface vbr0 inet manual
   ovs_type OVSBridge
   ovs_ports eth1
   up ovs-vsctl add-port vbr0 eth1

Gospodarz pracuje niezależnie na karcie eth0 dla której posiada odrębną konfigurację.

Teraz pozostaje udostępnić wirtualne switche hostom wirtualnym. Używając libvirt do zarządzania hostami wirtualnymi na bazie KVM najlepszym sposobem jest utworzenie sieci (w libvirt) podłączonych do wcześniej przygotowanych switch-y.

Plik konfiguracyjny sieci wygląda tak (ovsnet.xml):

<network>
  <name>xxxx</name>
  <forward mode='bridge'/>
  <bridge name='yyy' />
  <virtualport type='openvswitch'/>
</network>

gdzie xxxx to nazwa sieci a yyy to nazwa switch-a wcześniej utworzonego (vbr0, vbr1).

Aktywacja sieci odbywa się poprzez:

virsh net-define ovsnet.xml
virsh net-start xxxx
virsh net-autostart xxxx

co tworzy sieć, uruchamia ją oraz zapisuje do uruchomienia po każdorazowym włączeniu komputera.

Posiadając sieci zdefiniowane i uruchomione wystarczy je wskazać dla tworzonej nowej maszyny wirtualnej. Zazwyczaj można wybrać tylko jedną sieć przy instalacji, zatem wybieramy sieć zewnętrzną (np. w virt-manager). Sieć wraz z automatycznie tworzoną wirtualną kartą sieciową w VPS można zawsze dołożyć edytując plik konfiguracyjny hosta:

virsh edit nazwa-vps

Dodać należy wpis dla wybranej sieci::

<interface type='network'>
    <source network='xxxx'/>
    <model type='virtio'/>
</interface>

Użycie virsh edit gwarantuje automatyczne dodanie prawidłowego wpisu mac address oraz adress type dla danego interfejsu sieciowego.

Ubuntu 15.04 wymaga dodania skryptu if-up uruchamiajacego switch: ovs-vsctl add-br vbr0 by zainicjować automatycznie interface switcha po uruchomieniu komputera.