4.1 Open vSwitch
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
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).
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