Open vSwitch

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

Open vSwitch, někdy též zkráceně OVS, nebo openvswitch, je open-source implementace distribuovaného virtuálního vícevrstvého switche, umožňujující efektivně automatizovat obsluhu virtuálních portů prostřednictvím software, s podporou standardního rozhraní pro správu sítě a síťových protokolů, jako je NetFlow, sFlow, SPAN, RSPAN, CLI, LACP a 802.1ag.

Jeho zdrojový kód, licencovaný pod licencí Apache 2.0, je většinou v jazyce C což umožňuje snadnou přenositelnost, proto se používá se nejen jako alternativa fyzického switche pro virtuálního stroje (VM) běžící v rámci hypervizoru[1], ale i jako řídicí software k obsluze fyzických portů hardwarových switchů.

Do linuxového jádra byl začleněn od verze 3.3, která byla vydána 18. března 2012 a od léta téhož roku s ním pracuje i naše disklessová infrastruktura.

Nástroje

ovs-vsctl
OVS má širokou paletu funkcí a nástrojů, ovšem potřebám disklessové infrastruktury stačí tenhle konzolový nástroj, kterým se obsluhuje démon ovs-vswitchd, který odesílá prostřednictvím soketu /var/run/openvswitch/db.soc konfigurační změny na server ovs-server, který je ukládá do databázového souboru ovs-db.
ovs-ofctl
Je konzolový nástroj který umožňuje sledovat a měnit nastavení jimiž lze kontrolovat OpenFlow.
ovs-dpctl
Nástroj, který se používá ke správě datových cest v rámci OVS.
ovs-appctl
Je nástroj, kterým lze řídit a odesílat dotazy na jednotlivé démony, s nimiž pracuje Open vSwitch.

Manuál užitečných konfigurací pro využití Open vSwitche. Většina příkladů je pro verzi 2.x.

Základní využití nástrojů OVS

Jak zjistit, jaké tagované VLAN tečou portem

K tomu lze využít příkazu tcpdump, jehož výstup přesměrujeme do souboru a po nasbírání dostatečného množství dat, z něj vytáhneme pomocí utility awk s odělovacím řetězcem vlan čísla VLAN, která se objevují v hlavičkách paketů. Bude-li na rozhraní netagovaná VLAN, nebude výstup žádný.

# tcpdump -i enp24s0f1 -e > vystup_komunikace.txt
# awk -Fvlan '{print $2}' vystup_komunikace.txt | awk '{print $1}' | sort -u

1,
17,
4,
5,
65,

Podobným způsobem lze využít také příkaz OVS ovs-dpctl', který můžeme pomocí roury poslat ke zpracování přes awk rovnou, ale v takovém případě se nemusí objevit všechny VLAN, protože buffer, se kterým se pracuje, nemusí být dost velký.

# ovs-dpctl dump-flows | awk -F\, '{print $6}' | sort -u
 packets:0
ipv4(frag=no)
vlan(vid=1)
vlan(vid=17)
vlan(vid=4
vlan(vid=4)
vlan(vid=5)
vlan(vid=65)
Poznámka Uzavírací kulatá závorka chybí proto, že na VLAN č. 4 již visí nějaký port.

Jednoduchý bridge pro připojení VPS

   Bridge "ovsbr0"
       Port "eno4"
           trunks: [1, 4, 5, 6, 32, 71]
           Interface "eno4"
       Port "dce0"
           tag: 1
           Interface "dce0"

  1. Má podporu pro Xen, Linux KVM, Proxmox VE, VirtualBox, a existuje i port na Hyper-V. A je integrován do nejrůznějších virtualizačních systémů jako je OpenStack, openQRM, OpenNebula či oVirt.