SDN Első lépések: Cisco CSR1000v konfigurálása Python script-tel

Gőgös Barnabás

Senior Systems Engineer

Barnabas.Gogos@alef.com

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:

Letöltés

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