OpenSwitch a Ansible automatizace prakticky (1): virtuální topologie s Docker

Na stránkách netsvet.cz i cloudsvet.cz často píšeme o desired state konceptech v ovládání infrastruktury a o automatizaci. V tomto seriálu si ukážeme jak může vypadat moderní práce se sítí postavenou na OpenSwitch projektu, L3 BGP fabricu a Ansible automatizaci. Dnes začneme tím, že si sestavíme virtuální infrastrukturu.

Jak získat Leaf-spine topologii několika OpenSwitchů?

Pro testování Ansible jsem neměl k dispozici větší množství fyzických otevřených prvků, jako je HPE Altoline, abych si mohl sestavit topologii v labu. Upřímně řečeno ani by se mi nechtělo – spousta zvedání, šroubování, kabelování a stejně bych si lab nemohl brát jedoduše s sebou. Volba logicky padla na virtuální řešení. Jaké byly možnosti?

Jednoduchá a roky prověřená varianta je virtuální mašina. OpenSwitch projekt na svých stránkách dává ke stažení OVA kompilované 4x denně, takže jde o snadný způsob. Co je ale horší je hrát si ne s jedním prvkem, ale celou sítí v leaf-spine topologii. To už pak chce několik VM propojených přes lokální virtuální sítě. Naklikat se to dá, ale opakovatelnost tam není. Šlo by vyřešit automatizací Vagrantem, ale to už je zas docela dost práce. Navíc VM není zrovna nejefektivnější způsob a virtuální sítě vám v notebooku udělají docela nepořádek (na každý „kabel“ mezi prvky potřebujete jinou).

Další variantou je Mininet, o kterém už jsem psal. To není vůbec špatné, ale samotná instalace Mininet a OpenSwitch pluginu není zas tak triviální a způsob výroby topologie také ne.

Zvolil jsem metodu čistého Dockeru s Docker Networkingem (bridge). Proč? Pro celé prostředí potřebujete jednu Linuxovou VM a vše se děje uvnitř, takže vám to neovlivňuje počítač. Jediná návaznost pro vytvoření sítě je Docker, netřeba instalovat další věci. Je to jednoduché, rychlé a efektivní.

OpenSwitch, Docker a Leaf-Spine topologie

Všechno najdete na veřejném GitHub: https://github.com/HPENetworking/scriptsonly/tree/master/OpenSwitch/leafspine-ops

Do vaší VM si nainstalujte git (pokud ještě nemáte) a naklonujte si celý repozitář:

git clone https://github.com/HPENetworking/scriptsonly.git

Stáhnou se vám všechny možné síťové skripty různých autorů, ale v adresáři OpenSwitch/leafspine-ops najdete to, co je předmětem této série článků.

Pro dnešní díl nás budou zajímat skripty create.sh a destroy.sh.

Tyto stačí spustit, ale ještě předtím si okomentujeme, co se v nich děje. Na začátku jsou v definovány pole s názvy prvků. Ve výchozím stavu vám skript vytvoří 4 leaf switche 2 spine prvky, nicméně seznam můžete změnšit či zvětšit. Dále definujete Docker image vašeho OpenSwitche. V tuto chvíli projekt nepublikuje automatizovaný build jako Docker image (dělá to ovšem pro OVA), nicméně projekt si můžete naklonovat, zkompilovat a vyexportovat do Docker image (už jsem o tom psal). pokud se vám nechce (chápu, kompilace běží asi dvě hodiny), můžete použít můj image cloudsvet/openswitch:0601.

Skript vytvoří out-of-band management síť, z které budeme přistupovat k prvkům (REST API, SSH, Ansible, Web GUI) a následně kontejnery v této síti spustí. Dalším krokem je vytvoření sítí (bridgů), které budou simulovat drát mezi prvky. Na každé spojení tedy potřebujeme jednu virtuální síť. Součástí procesu bude i připojení sítě do kontejneru. Možná vám připadá, že by bylo jednodušší použít Docker Compose. Jeho potíž je ale v tom, že pořadí přidávaných sítích není deterministické, což pak znamená, že nevím na kterém OpenSwitch portu jaká síť je. Takto postupně to vždy dopadne dobře.

Dalším krokem je přesunutí těchto portů do OpenSwitch namespace, který se jmenuje swns. Tím zajistíte, že se z těchto „portů“ stanou přední porty prvku a OpenSwitch je uvidí. Poslední co uděláme je, že vygenerujeme Ansible host file (přece to nebudeme v příštím díle psát ručně, když skript ví všechno potřebné) a vypíšeme na obrazovku.

Spustíme create.sh a vyzkoušíme

$ ./create.sh
Create OOB network
d05835dd75c91d7642c29e431d35acf528062a6187ec6fd380182d1eb1e7ef17
Run switches

Run leaf1
e5d3480a6f008b258bbd168028e5d5409fcaad4188096a1b22f34514a7318e75

Run leaf2
379ddba3c457cb08ec7c832cc47b3441db64ac9666a2e6555575a18a69538034

Run leaf3
50521a3eef898b44125ca08ab26df80fa675ef5e3984142f9e5d66c42ad9d753

Run leaf4
2d62c39943f4b6658c58cf4fb6c24168264a1d26839ce42600bba67b34f774d2

Run spine1
79ebbdb6ebab9d0e7ec137396ec9e75c71886ec6fa4e004ecf5b401a148ede24

Run spine2
cf268e68859c293ce3051c2012e72f51ad66a4c2963c6a406680d885012dbe06

Create networks

Creating and attaching network leaf1_spine1
0889db3fabdbdbac2e7492c521b0d570f274141cf4731f427b2836f2471323a7

Creating and attaching network leaf1_spine2
926f16db141bff45c2d0b3f2f67c6947d1d40ae34dd920bf2a0574556267a8f8

Creating and attaching network leaf2_spine1
62684ed8f3abbf6c9fb7bc2d25d27c81bc5a8ea1b4823a4a3e0d51187a74c078

Creating and attaching network leaf2_spine2
915795cae27bc7d88bf5cf32ccb09429257a8173887d382b6a88117cec11436a

Creating and attaching network leaf3_spine1
6bf49b3cc963a5e892fbedcd81d11dd62a62d4f6c446f6b218cfb61a61457b3d

Creating and attaching network leaf3_spine2
788e36a426c9b0a96b02121c2ba1e49216556201db44518663e2fae8b157b2d9

Creating and attaching network leaf4_spine1
b1805f07f5041e20b4bb38cca458a04376916823dfea0fe3db4cb8e834824350

Creating and attaching network leaf4_spine2
f17c87a8b53d73106646cd991d32ba3c3fe9c8c4e6725ebbb496e4987d0375de

Move leaf interfaces to OpenSwitch namespace
leaf1
leaf2
leaf3
leaf4

Move spine interfaces to OpenSwitch namespace
spine1
spine2

Generate Ansible host file (hosts in current folder)
[leafs]
leaf1 ansible_host=172.18.0.2 ansible_port=22
leaf2 ansible_host=172.18.0.3 ansible_port=22
leaf3 ansible_host=172.18.0.4 ansible_port=22
leaf4 ansible_host=172.18.0.5 ansible_port=22

[spines]
spine1 ansible_host=172.18.0.6 ansible_port=22
spine2 ansible_host=172.18.0.7 ansible_port=22

Network is ready

V závěru vidíte vytisknutý hosts file pro Ansible, který se vám také jako soubor vytvořil (o tom příště). Pro dnešek nám stačí vědět jména a IP adresy a vyzkoušíme si připojení do OpenSwitch.

Jedna z možností je, že použijete Dockek ke spuštění CLI v prvku:

$ docker exec -ti leaf1 vtysh
switch# show run
Current configuration:
!
!
!
!
!
vlan 1
    no shutdown
switch# exit

Dále můžete použít ssh:

$ ssh root@172.18.0.2
Warning: Permanently added '172.18.0.2' (ECDSA) to the list of known hosts.
OpenSwitch 0.4.0 %h


                          .g8""8q.
                        .dP'    `YM.
                        dM'      `MM `7MMpdMAo.  .gP"Ya `7MMpMMMb.
                        MM        MM   MM   `Wb ,M'   Yb  MM    MM
   /            \       MM.      ,MP   MM    M8 8M""""""  MM    MM
  |-----    -----|      `Mb.    ,dP'   MM   ,AP YM.    ,  MM    MM
   \   \\  //   /         `"bmmd"'     MMbmmd'   `Mbmmd'.JMML  JMML.
          //                           M
         //                          .JMML.        ,,                ,,
        //               .M"""bgd                  db   mm         `7MM
   /   //  \\   \       ,MI    "Y                       MM           MM
  |-----    -----|      `MMb.  `7M'    ,A    `MF'`7MM mmMMmm ,p6"bo  MMpMMMb.
   \            /         `YMMNq.VA   ,VAA   ,V    MM   MM  6M'  OO  MM    MM
                        .     `MM VA ,V  VA ,V     MM   MM  8M       MM    MM
                        Mb     dM  VVV    VVV      MM   MM  YM.    , MM    MM
                        P"Ybmmd"    W      W     .JMML. `MbmoYMbmd'.JMML  JMML.

root@switch:~# exit
logout
Connection to 172.18.0.2 closed.

A podívat se lze také na web GUI:

ops-ansible-gui

Tyto sítě ovšem nejsou propojeny mimo VM – pro jednoduchost je ideální všechno provádět uvnitř VM, tedy mít tam i grafické prostředí a prohlížeč.

Co se topologie týče, tak je vytvářena automaticky a podle následujícího pravidla. Port 1 v leaf1 jde do port 1 ve spine1. Port 2 v leaf1 jde do port 1 ve spine2. Port 1 v leaf2 jde do port 2 ve spine2. Port 2 v leaf2 jde do port 2 ve spine2. A tak dále.

Ostatně můžeme si vyzkoušet ping:

$ docker exec -ti leaf1 vtysh
switch# conf t
switch(config)# int 1
switch(config-if)# ip add 10.0.0.1/30
switch(config-if)# no shut
switch(config-if)# end
switch# exit

$ docker exec -ti spine1 vtysh
switch# conf t
switch(config)# int 1
switch(config-if)# ip add 10.0.0.2/30
switch(config-if)# no shut
switch(config-if)# end
switch# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 100(128) bytes of data.
108 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.246 ms
108 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.066 ms
108 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.076 ms
^C
--- 10.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.066/0.129/0.246/0.083 ms

switch# exit

Jakmile si přestanete hrát, nezapomeňte spustit destroy.sh, který odstraní kontejnery a vytvořené sítě.

$ ./destroy.sh
Destroy switches
leaf1
leaf2
leaf3
leaf4
spine1
spine2

Destroy OOB network
Destroy networks

Destroying network leaf1_spine1

Destroying network leaf1_spine2

Destroying network leaf2_spine1

Destroying network leaf2_spine2

Destroying network leaf3_spine1

Destroying network leaf3_spine2

Destroying network leaf4_spine1

Destroying network leaf4_spine2

Environment destroyed
Dnes jsme si vytvořili topologii leaf-spine s využitím OpenSwitch v Dockeru a máme prvky propojené mezi sebou.
Similar posts
  • Moderní 10G v datovém centru s novou ... HPE tento týden oznámilo evoluční vývoj portfolia v oblasti data center 1U prvků s 10G/40G/100G technologií, konkrétně novou řadu 5940. Co je nového? Hardwarové vlastnosti Prvky přichází s novou generací 10/40/100 čipů, které umožnily mít nově prvky se 100G uplinky (a to hned šesti) a také přináší podporou nových vlastností jako je směrování VXLAN (předchozí [...]
  • ArubaOS-Switch 16.02: IP SLA i pro Ar... IP SLA Ve světě směrovačů už poměrně dlouho existuje možnost monitorovat dostupnost a kvalitu spojení s využitím L3 protokolů. Můžete například z pobočky v pravidelných intervalech testovat dostupnost brány datového centra nebo klíčového serveru včetně měření doby jeho reakce (round-trip-time). Dá se také namířit dva routery proti sobě tak, že jeden se ptá a druhý [...]
  • OpenSwitch v GNS3 – chcete GUI ... GNS3 verze 1.5 Pokud neznáte GNS3, jde o velmi dobrý síťový simulátor. Narozdíl od jiných řešení, o kterých jsem na netSvět už psal (Docker, shell skript, Mininet), je zaměřený především na síťaře, kteří chtějí pracovat s virtuální sítí a přizpůsobuje se jejich pohodlí. Do CI/CD pipeline se tedy moc nehodí, ale za to má výborné [...]
  • OpenSwitch a Ansible automatizace pra... Posledně jsme si nastavili naší virtuální OpenSwitch leaf-spine topologii a vybudovali jsme BGP L3 fabric. Dnes si ukážeme více z životního cyklu s použitím Ansible – otestování sítě, vrácení odchylek do požadovaného stavu sítě a rolování změn. Jste líní číst? Mrkněte na video: Playbook pro testování sítě Ansible můžete použít i pro testování, že síť [...]
  • OpenSwitch a Ansible automatizace pra... Minule jsme napojili naši virtuální topologii na Ansible a spustili náš první testovací Playbook. Dnes provodeme automatizovanou konfiguraci L3 fabric a otestujeme síť. Příprava konfiguračních podkladů Pro zprovoznění L3 fabric potřebujeme Loopback adresu, IP adresy na jednotlivých spojeních mezi prvky a nastavení BGP (autonomní systémy, peering). V našem Ansible prostředí si vytvoříme jeden YAML soubor, [...]

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *