SDN Első lépések: Cisco CSR1000v konfigurálása Python script-tel
A Software Defined Networking, rövidítve SDN egy ideje az egyik leggyakrabban használt buzz word a számítógép-hálózatos világban, sokan mégsem tudják, hogy pontosan mit értünk alatta. Ez nem csoda, mert az SDN egy esernyő fogalom: sok technológia és termék tartozhat ide – a Cisco kínálata is rég tartalmaz ide tartozó sorokat, mint az SD-Acces, az SD-WAN vagy az ACI – és a gyártók gőzerővel dolgoznak a fejlesztéseken. Az új termékek vásárlása, telepítése és üzemeltetése során sokszor nincs időnk azoknak az alap technológiáknak a megismerésére, amikre a végtermék épül és ez sok esetben megnehezíti a hibakeresés vagy akár a konfiguráció és a testreszabás menetét. Ez a cikk néhány ilyen alapvető technológia bemutatására vállalkozik, de előbb áttekintjük, hogy milyen igények állnak az SDN mögött és miért kell a hálózati mérnököknek egy kicsit hálózati szoftver fejlesztő mérnökké válniuk az elkövetkező években.
A virtuális szerver megoldások széleskörű elterjedésével egy kiszolgáló és a rajta futó applikáció – mondjuk egy Web szerver – üzembe helyezésének időigénye jelentős mértékben csökkent. A virtuális gép létrehozása pár kattintás, az operációs rendszert előre elkészített, letesztelt, biztonsági szabványok szerint testreszabott képfájlok segítségével telepítik pillanatok alatt és a futó szolgáltatásokat is automatizáltan konfigurálják olyan keretrendszerek segítségével, mint az Ansible, a Puppet vagy a Chef. A hálózati konfigurációt azonban továbbra is a jó öreg CLI-vel végezzük és bár az évek során a szívünkhöz nőtt ez a munka, a példában szereplő Web kiszolgáló üzembe helyezésének támogatása – Access és Trunk portok, VLAN, STP, HSRP, SVI, ACL, NAT, tűzfal beállítások és hibakeresésük – aránytalanul sok időt vehetnek igénybe.
Milyen építőkockákból áll az SDN?
- Kontroller: a kontroller egy olyan applikáció, ami hálózat control plane funkcióit futtatja – ahogy a WiFi hálózatok esetében a WLC – vagy egy átmeneti megoldásként management plane szolgáltatást nyújt, azaz rajta keresztül lehet konfigurálni a hálózatunkat. Ebben a cikkben bemutatott példában nem használunk kontrollert, de üzemi körülmények között ez elkerülhetetlen, ugyanis a kontroller kezeli a különböző eszközök eltérő API felületeit, megkönnyítve ezzel a munkát. A Cisco termékek között a DNA Center az AD-Access, a vSmart Controller az SD-WAN, az APIC pedig az ACI termékek kontrollere.
- Python: a Python egy programnyelv, amivel olyan szkripteket tudunk írni, amik automatizáltan konfigurálják az eszközeinket
- API (Application Programming Interface) Az API-k a szoftverfejlesztők munkáját könnyítik meg úgy, hogy hozzáférést biztosítanak egy adott eszköz utasításkészletéhez. A mi esetünkben a kontroller egy API-n keresztül éri el az eszközeinket és a szkriptjeink is egy API-n keresztül érik el a kontrollert, vagy ahogy a későbbi példán bemutatom, közvetlenül az eszközt.
Ez a cikk egy REST API-n alapuló megoldást mutat be. A REST jelentése Representational State Transfer. Nem kell megijedni a névtől, egy olyan API-ról van szó, ami az eszközök lekérdezéséhez, vagy akár konfigurálásához a jól ismert HTTP protokollt használja. Ha a böngészőnkkel lekérdezünk egy Web kiszolgálót, akkor a HTTP GET kérésre adott válasz egy HTML kódot tartalmaz, amit a böngésző képes megjeleníteni. A REST API használatakor a HTTP GET lekérdezésre egy JSON vagy egy XML objektumot kapunk vissza, ami az eszközünk egy tulajdonságát – mondjuk egy útválasztó interfész beállításait – tartalmazza. Az API-val közvetlenül érünk el egy CSR1000v Cisco router-t, és python szkript segítségével beállítjuk, majd lekérdezzük a Loopback interfészét.
A CSR1000v azért szerencsés választás, mert tartalmazhat egy REST API-t futtató modult. A feltételes mód helyénvaló, mert alapértelmezetten nem tartalmazza, de egy OVA fájl formájában letölthető a Cisco weboldalról - 1. ábra
1. ábra
Érdekesség, hogy a CSR1000v egy virtuális gép, amit a teszt során egy másik VM-en belül futtatok, a REST API-t tartalmazó OVA fájl pedig szintén egy virtualizáció. Vagyis a REST API most egy VM-en belül futtatott VM-en belül futtatott VM. A fájl méretes, ezért ne használjatok TFTP-t a másoláshoz, bármelyik más TCP-n alapuló protokoll megfelel – SCP, HTTP, FTP, stb. Ha az OVA fájl már a bootflash meghajtón van, telepíteni kell:
R1# virtual-service install name csr_mgmt package bootflash:/ iosxe-remote-mgmt.16.09.03.ova
Majd aktiválni kell a szolgáltatást:
R1(config)# virtual-service csr_mgmt
R1(config-virt-serv)# ip shared host-intarface mgmt interface
R1(config-virt-serv)# activate
Az eredményt ellenőrizhetjük az alábbi show parancsokkal:
R1# show virtual-service list
R1# show virtual-service detail
A CSR1000v most már készen áll az SDN konfigurációra. Két Python szkriptet fogunk használni, a get-interface.py lekérdezi a routerünk loopback interfészét, a put-interface.py pedig beállítja az 1.2.3.4/32 IP címet. A szkriptek futtatásához szükséges a Python nyelv és a Python requests modulja is. A két scriptet csatoltam a cikk végéhez.
A 2. ábrán látható a get-interface eredménye. Egy authentikációs token megbeszélése után megkapjuk a várva várt JSON objektumot a router loopback interfészéről.
2.ábra
A 3. ábrán a put-interface eredménye egy HTTP státusz kód, ami jelzi, hogy sikeres volt az akció, de az eredményt csak a 4. ábrán láthatjuk, ha újra futtatjuk a get-intarface szkriptet.
3.ábra
4.ábra
Összefoglalva, az SDN megoldások itt kopogtatnak az ajtónkon, nem véletlen, hogy a Cisco eszközök többségét csak DNA licenccel együtt lehet értékesíteni. Az SDN termékek központi eleme a kontroller, de ahogy a cikkben bemutattam kontroller használata nélkül is lehetséges Cisco termékek automatizált konfigurálása REST API és Python szkript segítségével.
A szkripteket tartalmazó dokumentumot itt tudod letölteni:
Szeretnél többet tudni?
Vedd fel velünk a kapcsolatot az alábbi elérhetőségen:
Gőgös Barnabás
Senior Systems Engineer
+36 30 162 0841
Barnabas.Gogos@alef.com