introduzione a Open vSwitch

Open vSwitch è uno stack switch virtuale nato per gestire gli ambienti di virtualizzazione multi-server (dato che il classico bridging in questi casi non è sufficiente) che può essere usato, in concomitanza con OpenFlow, come control stack per gli switch hardware.

Ecco alcune della funzionalità più importanti:

  • migrazione delle VM da host ad host (compresa la migrazione della delle sessioni attive e delle configurazioni, ad es. policy di routing, ACL, QoS, ecc)
  • pieno supporto alle VLAN (standard 802.1q)
  • supporto OpenFlow 1.0 con numerose estensioni
  • QoS anche per singola VM
  • tunnel GRE per connettere le VM anche in diversi data center (anche attraverso IPsec)
  • visibilità del traffico e statistiche avanzate grazie al supporto NetFlow, sFlow, SPAN, ecc
  • layer di compatibilità per il modulo bridge di linux (in questo modo tutti i software che già utilizzano il bridge non necessitano di alcuna modifica per utilizzare Open vSwitch)

Proviamo subito a sporcarci le mani…

Installazione

Debian way

Da debian wheezy sono disponibili i pacchetti di openvswitch…

1
aptitude install openvswitch-controller openvswitch-datapath-dkms openvswitch-brcompat

I pacchetti si occuperanno, inoltre, di inizializzare il database di Open vSwitch e avviare i vari servizi. Ricordiamo però che bisogna avviare manualmente il demone ovs-brcompatd:

1
ovs-brcompatd --pidfile --detach

Da sorgenti

Una volta scaricati i sorgenti assicuriamoci di compilare e caricare il modulo necessario per far lavorare Open vSwitch direttamente in kernel space (aumentando in modo esponenziale la velocità) e il modulo di compatibilità per il layer bridge di linux (brcompat):

1
2
3
4
5
6
7
./configure --with-linux=/lib/modules/`uname -r`/build
make && make install

insmod datapath/linux/openvswitch_mod.ko

rmmod bridge
insmod datapath/linux/brcompat_mod.ko

creazione del database di Open vSwitch

1
2
mkdir -p /usr/local/etc/openvswitch
ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema

avvio del database server

1
2
3
4
5
6
ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
                     --remote=db:Open_vSwitch,manager_options \
                     --private-key=db:SSL,private_key \
                     --certificate=db:SSL,certificate \
                     --bootstrap-ca-cert=db:SSL,ca_cert \
                     --pidfile --detach

inizializzazione del database

1
ovs-vsctl --no-wait init

avvio del demone ovswitchd

1
ovs-vswitchd --pidfile --detach

avvio del demone per la compatibilità con il modulo bridge e con brctl

1
ovs-brcompatd --pidfile --detach

Casi d’uso

Open vSwitch viene impiegato soprattutto per centralizzare ed automatizzare la gestione delle policy, delle VLAN, i tunnel, ecc, nelle realtà con più sedi/data-center che devono gestire molti server di virtualizzazione.

Vediamo qualche utilizzo pratico con KVM.

Isolare il traffico delle VM utilizzando le VLAN

L’utilizzo più comune di Open vSwitch è quello di far dialogare 2 VM su host diversi, configurati entrambi sulla stessa VLAN.

Per fare questo test è necessario collegare i 2 host con uno switch che supporti il protocollo 802.1q con la VLAN 9 configurata, oppure collegare direttamente gli host (con una punto-punto).

La nostra piccola rete è composta da:

  • reti
    • VLAN 9 (A) -> 192.168.9.0/24
    • VLAN 19 (B) -> 192.168.19.0/24
  • host
    • server 1 -> 192.168.0.1
    • server 2 -> 192.168.0.2
  • VM
    • VM A1 -> 192.168.9.1
    • VM A2 -> 192.168.9.2
    • VM A3 -> 192.168.9.3
    • VM B1 -> 192.168.19.1

Il nostro obiettivo è far dialogare la VM A1 con la VM A2.

Questi passi vanno eseguiti su entrambi i server:

creiamo il bridge aggiungendogli la scheda di rete (fisica) che utilizzeremo per il test:
1
2
ovs-vsctl add-br br0
ovs-vsctl add-port br0 eth0
creiamo la scheda di rete virtuale (tap)
1
2
tunctl -t tap0
ifconfig tap0 up
aggiungiamola al bridge con il tag della VLAN 9
1
ovs-vsctl add-port br0 tap0 tag=9
assegniamo un indirizzo ip al bridge
1
2
3
4
5
# sul server 1:
ifconfig br0 192.168.0.1

# sul server 2:
ifconfig br0 192.168.0.2
avviamo una live con kvm sugli host
1
2
3
4
RANDOM_MAC=`openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//'`

kvm -cdrom grml64_2011.12.iso -m 512 -boot d -net nic,macaddr=$RANDOM_MAC \
  -net tap,ifname=tap0,script=no,downscript=no

A questo punto assegniamo alle VM l’ip 192.168.9.1 e 192.168.9.2 ed il gioco è fatto. Le VM dovrebbero dialogare senza problemi.

Far dialogare le VM nella stessa VLAN in data-center differenti

Questo caso è molto simile al precedente, con l’unica differenza che i 2 host sono collegati con un tunnel GRE (non criptato) perché risiedono in data-center diversi.

  • IP pubblici
    • server 1 -> 1.1.1.1
    • server 2 -> 2.2.2.2

Una volta eseguite tutte le operazioni del caso precedente, prima di avviare la VM, aggiungiamo la configurazione per il tunnel GRE:

server 1:

1
ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre options:remote_ip=2.2.2.2

server 2:

1
ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre options:remote_ip=1.1.1.1

A questo punto le nostre solite VM A1 e A3 riusciranno nuovamente a dialogare, utilizzando il tunnel GRE.

Ovviamente Open vSwitch prevede l’utilizzo di VPN IPsec (racoon) tramite dei tool che ne semplificano la creazione e il monitoraggio.

Gestione tramite OpenFlow

Open vSwitch viene utilizzato anche come “semplice” switch gestito da OpenFlow.

In questo modo le potenzialità dell’architettura di rete diventano veramente notevoli.

Ma di questo, magari parleremo un’altra volta.

Risorse utili.