4.1 Open vSwitch

Open vSwitch (OVS) je virtuálny open source  softvérový prepínač používaný spolu s hyprevízormi na prepojenie virtuálnych počítačov v rámci jedného hosťujúceho počítača alebo viacerých hosťujúcich počítačov v sieti. Je licencovaný pod licenciou Apache 2.0 a je vhodný aj na komerčné nasadenie. Podporuje viaceré na Linuxe založené virtualizačné technológie ako sú XEN/XenServer, KVM a VirtualBox. Je súčasťou viacerých virtuálizačných platforiem ako sú OpenStack, oVirt, openQRM, OpenNebula a pod. Veľká časť jeho kódu je napísaná v jazyku C a môže byť ľahko portovaná do iných prostredí.

Štandardne pracuje s podporou jadra Linuxu, ale môže byť implementovaný čisto v používateľskom priestore (bez podpory modulov jadra) - výhodou tejto  implementácie je ľahšia prenositeľnosť, nevýhodou je nižší výkon. Bol portovaný aj do DPDK (ako OVS-DPDK).

 

Open vSwitch aktuálne podporuje nasledujúce funkcie:

  • zviditeľnenie komunikácie medzi VM prostredníctvom NetFlow, sFlow(R), IPFIX, SPAN, RSPAN ako aj zrkadlenie prostredníctvom GRE-tunelov,
  • LACP (IEEE 802.1AX-2008),
  • štandardný 802.1Q VLAN model s trunkingom,
  • multicast snooping,
  • IETF Auto-Attach SPBM a základnú podporu LLDP,
  • monitorovanie prepojenia pomocou BFD a 802.1ag,
  • STP (IEEE 802.1D-1998) a RSTP (IEEE 802.1D-2004),
  • detailne nastaviteľné QoS,
  • podpora pre HFSC qdisc,
  • kontrola prevádzky pre jednotlivé VM rozhrania,
  • spájanie  NIC s vyvažovaním záťaže podľa zdrojovej-MAC, aktívne zálohovanie a hašovanie L4,
  • podpora OpenFlow (vrátane mnohých rozšírení pre virtualizáciu),
  • podpora IPv6,
  • viacero protokolov na tunelovanie (GRE, VXLAN, STT,  a Geneve s podporou IPsec),
  • protokol vzdialenej konfigurácie s väzbami na C a Python,
  • možnosti pre preposielanie dát (forwarding engine) s prostredí jadra alebo používateľského priestoru,
  • podpora smerovania na základe viacerých smerovacích tabuliek.
  • abstrahovanie vrstvy pre preposielanie na uľahčenie prenosu na nové softvérové a hardvérové platformy.

 OVS má tri hlavné komponenty (viď Obr. 2):

  • ovs-vswitchd - démon implementujúci funkciu prepínača (spolu s niektorými modulmi jadra),
  • ovsdb-server - databázový server, obsahuje konfigurácie prepínačov pre ovs-vswitchd,
  • ovs-dpctl       - nástroj na konfigurovanie dátových ciest (datapaths)  ktoré sú implementované mimo ovs-vswitchd (napr. prostredníctvom jadra Linuxu, alebo Windows).

Okrem uvedených hlavných komponentov existujú aj ďalšie, tzv. pomocné nástroje ako:

  • ovs-vsctl        - nástroj na zisťovanie a aktualizáciu konfigurácie ovs-vswitchd
  • ovs-appctl    - nástroj, ktorý odošle príkazy na spustené Open vSwitch  démony
  • ovs-ofctl         - nástroj na správu OpenFlow prepínačov a kontrolérov
  • ovs-pki           - nástroj na vytváranie a správu infraštruktúry verejných kľúčov

 Hlavné komponenty OVS

Obr. 2 Hlavné komponenty OVS

Postup spracovania paketov

Jednou z výhod OVS je podpora spracovania paketov na úrovni jadra operačného systému Linux. Prvý paket nového toku ide cez ovs-vswitchd v používateľskom priestore. Nasledujúce pakety sú spracované podľa cache záznamov jadrom operačného systému (viď Obr. 3).

Postup spracovania paketov

Obr. 3 Postup spracovania paketov

Popis hlavných častí

Ovs-vswitchd – je démon, ktorý manažuje a riadi ľubovoľný počet OVS prepínačov na lokálnom počítači. Na každom lokálnom počítači môže bežať v určitom čase iba jedna inštancia ovs-vswitchd. Jeden ovs-vswitchd môže manažovať väčší počet inštancií prepínača. Pre správnu činnosť potrebuje OVS datapath kernelový modul.

Spúšťa sa príkazom           ovs−vswitchd [database]
- database špecifikuje spôsob, ako sa ovs-vswitchd pripojí na ovsdb-server

prednastavené hodnota je

unix:/usr/local/var/run/openvswitch/db.sock

 Prostredníctvom nástroja ovs-appctl môžu byť na spustený démon ovs-vswitch zaslané nasledovné príkazy (všetky začínajú výrazom ovs-appctl, po ktorom je uvedený niektorý z nasledovných parametrov) :

exit  -- cleanup      -  spôsobí korektné zastavenie ovs−vswitchd. Ak je zadaný argument –cleanup uvoľnia sa zdroje dátových ciest konfigurované ovs−vswitchd, v opačnom prípade ostanú zdroje neuvoľnené.

qos/show-types interface - žiadosť o zaslanie zoznamu QoS typov, ktoré sú konfigurovateľné prostredníctvom OVS pre dané rozhranie

qos/show interface  - žiadosť o zaslanie QoS konfiguračných a štatistických údajov, prináležiacich k danému rozhraniu

bfd/show [interface]  - žiadosť o zaslanie konfiguračných a štatistických údajov, prináležiacich k danému rozhraniu, ktoré sa týkajú BFD (Bidirectional  Forwarding  Detection)

bfd/set-forwarding [interface] status - žiadosť o zaslanie stavu BFD. Stav môže byť "true", "false“ alebo  "normal"

cfm/show [interface] - žiadosť o zaslanie konfiguračných a štatistických údajov, prináležiacich k danému rozhraniu, ktoré sa týkajú CFM (Connectivity  Fault  Management)

cfm/set-fault [interface] status - žiadosť o zaslanie stavu CFM. Stav môže byť "true", "false“ alebo  "normal"

stp/tcn [bridge]      - žiadosť o zaslanie konfiguračných a štatistických údajov, prináležiacich k danému rozhraniu, ktoré sa týkajú STP (Spaning Tree Protocol/

stp/show [bridge]      - žiadosť o zaslanie konfiguračných a štatistických údajov, prináležiacich k danému rozhraniu, ktoré sa týkajú TCN (Topology Change Notifications)

rstp/tcn [bridge]      - žiadosť o zaslanie konfiguračných a štatistických údajov, prináležiacich k danému rozhraniu, ktoré sa týkajú RTSP (Rapid Spaning Tree Protocol)

rstp/show [bridge]  - žiadosť o zaslanie stavu RTSP

fdb/flush [bridge]   - žiadosť o vymazanie tabuľky MAC adries

fdb/show bridge     - zobrazí všetky známe MAC adries

mdb/flush [bridge] - žiadosť o vymazanie multicast snooping tabuľky

mdb/show bridge     - zobrazí všetky multicast  group/VLAN 

bridge/reconnect [bridge] - reštartuje všetky spojenia na OpenFlow kontrolér

bridge/dump−flows bridge  - zobrazí všetky toky, aj tie, ktoré sú inak skryté, napr. pri ovs−ofctl dump−flows

 Pomocou nástroja  ovs-vsctl  je možné  zisťovanie a aktualizáciu konfigurácie ovs-vswitchd (všetky príkazy začínajú výrazom ovs-vsctl, po ktorom je uvedený niektorý z nasledovných parametrov):

show                    - žiadosť o zobrazenie konfigurácie ovs-vswitchd

list-br                  - žiadosť o zobrazenie zoznamu prepínačov

list-ports  bridge  - žiadosť o zobrazenie zoznamu portov na uvedenom prepínači

list-ifaces  bridge - žiadosť o zobrazenie zoznamu rozhraní na uvedenom prepínači

add-br  bridge            alternatívne          del-br bridge - žiadosť o vytvorenie nového / odstránenie existujúceho   prepínači                    

add-port  bridge  eth0   alternatívne   del-port bridge eth0

- žiadosť o vytvorenie nového / odstránenie existujúceho portu na danom prepínači

emer-reset           - žiadosť o vynulovanie hodnôt

add-br  VLAN_bridge  Parent_Bridge  vlan  - žiadosť o vytvorenie VLAN)   (Vytvorí virtuálny „VLAN bridge“ na prepínači Parent_Bridge a VLAN s hodnotou 0 – 4095)


Príklady základnej konfigurácie

Vytvorenie prepínača

ovs-vsctl add-br br0

Vytvorenie portu eth0 ako prepojovacieho (trunk) portu

ovs-vsctl add-port br0 eth0

Pridanie portu tap0 ako prístupového portu pre VLAN 9

ovs-vsctl add-port br0 tap0 tag=9

Pridanie existujúceho portu ako prístupového portu

ovs-vsctl set port tap0 tag=9

 

Pomocou nástroja ovs-ofctl  je možné riadiť OVS ako OpenFlow prepínač (všetky príkazy začínajú výrazom ovs-ofctl, po ktorom je uvedený niektorý z nasledovných parametrov):

show   switch - žiadosť o zobrazenie konfigurácie OVS ako OpenFlow prepínača

dump-tables  switch         - žiadosť o vymazanie OpenFlow tabuliek

dump-table-features  switch - žiadosť o odstránenie vlastnosti z OF tabuliek

dump-flows   switch  [flows] - žiadosť o odstránenie tokov z OF tabuliek

add-flow   switch   flow         - žiadosť o pridanie toku z OF tabuľky

mod-port   switch iface  act - žiadosť o pridanie toku do OF tabuľky

 

Príklady konfigurácie

Príkaz na zobrazenie konfigurácie OpenFlow prepínača OVS a výpis z obrazovky

ovs-ofctl show br-ctlplane


OFPT_FEATURES_REPLY (xid=0x2): dpid:0000fa163e9839ce
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst
1(eth1): addr:fa:16:3e:98:39:ce
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
2(phy-br-ctlplane): addr:22:62:b2:72:3b:d6
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
LOCAL(br-ctlplane): addr:fa:16:3e:98:39:ce
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0

Príkaz na vytvorenie prepínača switch 1

ovs-vsctl add-br switch_1 


 Príkaz na pridanie OF toku - pridaný tok je bez zadania pola „match field“ a s definovanou operáciou (action) typu „normal“. Hodnota „normal“ definuje, že prepínač pracuje ako štandardný L2 prepínač.

ovs-ofctl add-flow switch_1 action=normal

 Príkaz na pridanie OF toku (pravidla), podľa ktorého bude každý paket prijatý cez port 1 odoslaný cez port 2.

ovs-ofctl add-flow switch_1 priority=400, in_port=1, actions=output:2

Príkazom sa pridá nový tok s prioritou 400, nastaví sa „match field“ na „in_port=1”, t.j. platí pre všetky pakety, ktoré prišli vstupným portom 1 a operácia (action) sa nastaví na „odošli portom 2“ (actions=output:2).

 Príkaz na pridanie OF toku (pravidla), podľa ktorého paket odoslaný z MAC adresy 1:00:00:01:00:00 na MAC adresu 02:00:00:02:00:00 opustí prepínač cez port 3

ovs-ofctl add-flow switch_1 dl_src=01:00:00:01:00:00, dl_dst=02:00:00:02:00:00,actions=output:3

 Príkaz na pridanie pravidla, podľa ktorého bude paket smerovaný na IP adresu 10.0.0.5 zahodený (podobným spôsobom je možné nastaviť pravidlo pre protokol ARP).

ovs-ofctl add-flow switch_1  IP,nw_dst=10.0.0.5,actions=drop

Príkaz na pridanie pravidla, podľa ktorého bude paket smerovaný na port 134 zahodený (podobným spôsobom je možné nastaviť pravidlo pre protokol UDP).

ovs-ofctl add-flow switch_1  TCP,tp_dst=1234,actions=drop

 

Ovsdb-server – je databázový server OVS. Aplikácia ovsdb-server poskytuje RPC (Remote Procedure Call) rozhranie pre jednu alebo niekoľko OVS databáz (OVSDB)
Podporuje JSON-RPC protokol pre manažment a ovs-vswitchd. Môže vystupovať ako aktívny, alebo záložný server (primárne sa spúšťa ako aktívny server).

Prepnutie sa medzi módmi je možne vykonať príkazmi:

ovsdb-server/connect-active-ovsdb-server      – prepne ovsdb-server do režimu backup server

ovsdb-server/disconnect-active-ovsdb-server – prepne ovsdb-server do režimu aktívny server