Ugrás a fő tartalomra

Hálózat-virtualizáció EPISODE V - PART II South-bound APIs 2

South-bound APIs 2

 

YANG alapú leírónyelvek és API-k

YANG adatstruktúra egy leíró modell arra, hogy milyen követelményeket támasztunk a API lekérdezés vagy operáció formáját tekintve, továbbá definiáljuk a konfigurációs paraméterek struktúráját. Bizonyos szempontból nézve az SNMP OID-ok is megfelelnek ennek az adatstruktúrának, így joggal merül fel a kérdés, hogy minek vesződünk mással? A koncepció egy NET/RESTCONF kapcsán az, hogy az egyszeri - speciális hálózati szaktudással nem rendelkező - programozó is tudjon kódot írni, ugyanis a programozók otthonosabban mozognak a XML, JSON vagy YALM formátumú konfigurációkban mint az SNMP OID-ban, vagy CLI-ban.
JSON formátumú konfiguráció leírást már előző postomban mutattam. Így most nem térnék ki külön a formátumra.
A JSON formátumon kívül, amik még különböző automatizációs és SDN rendszerek esetén népszerűek, az XML és YALM formátum.
Akit érdekelnek a különböző formátumok részletes leírása annak az alábbi forrásokat javasolnám:

https://yaml.org/spec/1.2/spec.html

https://www.w3schools.com/xml/xml_whatis.asp

Alapvetően, ha megértjük a YANG modell struktúráját, akkor a különböző leíró nyelvek közt könnyen el tudjuk navigálni magunkat, csak az aktuális formátumra kell odafigyelnünk.

OpenFlow 

OpenFlow protokoll fejlesztői alapjaiban szerették volna megváltoztatni a hálózatok működését, úgy, hogy minden ControlPlane funkcionalitást egy központi kontrollerben valósítanak meg, az infrastruktúra eszközök pedig "buta" switch-ek, melyek csak DataPlane forwarding-ot valósítanak meg. A kontroller és switch közti kontroll kommunikáció pedig az Openflow protokollon keresztül valósul meg. Az OpenFlow-t nem csak kommunikációs sztenderdnek szánták, hanem konkrét leíró nyelvet is készítettek hozzá, amelyben definiáltak működéshez szükséges utasítás készletet is.




Az OpenFlow koncepció alapvetően ötletes, néhány architekturális hibát leszámítva (kontroll és infrastruktúra közti folyamatos kommunikáció), viszont nem lett nagy üzlet a gyártók számára, továbbá a végfelhasználói oldalon is ellenérzéseket váltott ki, így az ötlet produktív környezetben már nem olyan formában valósult meg, mint ahogyan OpenFlow-t kitalálták.

NETCONF (RFC6241, RFC4741)

Gyártók az OpenFlow megjelenése előtt is dolgoztak olyan protokollon, amely a hagyományos SNMP alapú hálózati menedzsment rendszereket felválthatja. Network Configuration Protocol első verziója 2006-ban jelent meg, viszont igazi gyártói fókuszt csak 2010 tájékán kapott amikor az SDN mint üzlet robbanni látszott. NETCONF leginkább Cisco és Juniper eszközökben került bevezetésre, de a HPE Comware switchek-ben is elérhető a protokoll. SNMP-vel alapvető probléma, hogy a hálózati eszközök CPU-ból dolgozzák fel az operációt, és ugyanaz a CPU viszi a Control és egyéb management plane feladatokat is, így a rosszul beállított SNMP-vel leDoS-olhattuk a hálózatot és hálózat management-et egyaránt. További probléma, hogy az SNMP alapvetően nem biztosnágos protokoll, a kontroll és infrastruktúra között nincs titkosítva a kommunikáció.
NETCONF esetében a viszont már CLI management esetén is jól bevált SSH-t alkalmazunk Transport protokollként, így hasonlóan biztonságos módon érjük el a hálózatot a kontroll alkalmazásból. További előnye a NETCONF-nak az SNMP-vel szemben, hogy bizonyos gyártók ASIC-ből támogatják a kommunikációt és operációt, így egy folyamatos lekérdezéssel nem terhelik a CPU-t.
A NETCONF struktúráját tekintve, több rétegű megoldást kínál az infrastruktúra absztrakciójára.
A felső Content rétegben valósul meg a konfiguráció, illetve az értesítésekből származó információ megjelenítés. Az alatta lévő rétegben történik meg a konfiguráció, beállítás konverzió NETCONF (RPC) üzenetformátumra melynél XML alapú kódolást alkalmazunk.

 <rpc message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
   <some-method>
    <!-- method parameters here... -->
   </some-method>
 </rpc> 

NETCONF kapcsolatok kialakítása nem túl bonyolult, viszont sok-sok időt el lehet vele tölteni, ha formátumra nem figyelünk oda.
Egy oktatás alkalmával amit nekünk kellett tartani, igen sok időm ment el mire megtaláltam IOS-XRv-khez tartozó azt az XML formátumot, amivel Opendaylight-ba csatlakoztattam őket.
Persze egy vendor specifikus kontrollernél ez leegyszerűsödik ennyire:

  

OpenDaylight esetében viszont NETCONF csatlakoztatás már pöppetnyit bonyolultabb:

<module xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
  <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">prefix:sal-netconf-connector</type>
  <name>$devicename/name>
  <address xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf"

>$ipaddress</address>
  <port xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">$netconfport</port>
  <username xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">$username</username>
  <password xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">$password</password>
  <tcp-only xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">false</tcp-only>
  <yang-module-capabilities xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
    <override>true</override>
    <capability xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
      urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&amp;revision=2013-07-15
    </capability>
    <capability xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
      http://cisco.com/ns/yang/ned/ios?module=ned&amp;revision=2016-10-24
    </capability>
    <capability xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
        http://tail-f.com/yang/common-monitoring?module=tailf-common&amp;revision=2016-05-04
    </capability>
    <capability xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
        http://tail-f.com/yang/common-monitoring?module=tailf-meta-extensions&amp;revision=2013-11-07
    </capability>
    <capability xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
        http://tail-f.com/yang/common-monitoring?module=tailf-cli-extensions&amp;revision=2016-05-04
    </capability>
    <capability xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
        urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&amp;revision=2013-07-15
    </capability>
  </yang-module-capabilities>
  <event-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netty">prefix:netty-event-executor</type>
    <name>global-event-executor</name>
  </event-executor>
  <binding-registry xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-broker-osgi-registry</type>
    <name>binding-osgi-broker</name>
  </binding-registry>
  <dom-registry xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-broker-osgi-registry</type>
    <name>dom-broker</name>
  </dom-registry>
  <client-dispatcher xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:netconf">prefix:netconf-client-dispatcher</type>
    <name>global-netconf-dispatcher</name>
  </client-dispatcher>
  <processing-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:threadpool">prefix:threadpool</type>
    <name>global-netconf-processing-executor</name>
  </processing-executor>
  <keepalive-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">
    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:threadpool">prefix:scheduled-threadpool</type>
    <name>global-netconf-ssh-scheduled-executor</name>
  </keepalive-executor>
</module>


Szóval, ha magunk gyártunk NETCONF alalpú SDN kontrollert, akkor készüljünk fel hogy meg kell tanulnunk XML formátumot, illetve a gyártó/kontroller specifikus encoding kötöttségeit. Viszont így elég nagy szabadságunk van arra vonatkozólag, hogy az infrastruktúra rétegben mivel építkezünk.


Telemetria 

" A telemetria adatokból arra következtetünk kapitány, hogy gravimetrikus sugárzás következtében az Enterprise csillaghajó..."


Science Fiction-nek hangzuk mi? Pedig a telemetria sem új igény a hálózatok terén, korábban az SNMP alapú hálózatmonitorozó rendszerek is mindenféle adatot gyűjtöttek az infrastruktúra működéséről. Ez most miben lenne más?
A koncepció nem más, a felhasznált protokollok és feldolgozó egységek változtak, illetve az adatok kiértékelése, és átvitele közel real-time történik. A NETCONF-nál már írtam, hogy a kontroll és infrastruktúra között folyamatos kapcoslat van, ami lehetővé tesz az infrastruktúra számára a folyamatos reporting-ot a kontroll réteg felé. Természetesen nem csak, vagy éppen nem a NETCONF az egyetlken ilyen protokoll aminek a segítségével adatokat küldhetünk egy telemetria collector felé.  A jelenleg éppen elérhető (dcloud) labor példákban GPB és gRPC protokollt alkalmaznak az adatok továbbítására. Telemetria adatok feldolgozására nem feltétlen kell valami csillivili csártói megoldás, léteznek olyan opensource tool-ok, amik  viszonlag egyszerűen megvalósítják nekünk az beérkező információból a szükséges dashboard-okat.
Pl: ELK stack, KIBANA, Grafana

RESTCONF (RFC8040, RFC8257)

Mi az alapvető különbség a RESTCONF és NETCONF között? A transport layer! Míg a NETCONF esetén speciális port-on ssh transport-ot alkalmazunk, ami speciális kliens alkalmazást és folyamatos kapcoslat fenntartást igényel, addig a RESTCONF-al http/https protokollal is elérhetjük a infrastruktúrát az alkalmazásból. Be kell látnunk, hogy ezt az API-t tényleg az egyszeri webprogramozók számára találták ki akik otthonosabban mozognak HTTP/HTTPS üzenetekben. Továbbá webalkalmazások fejlesztéséhez, sokkal több kész modul áll rendelkezésre már, mint NETCONF esetén.

Traditional Network management APIs

Sok-sok SDN és automatizációs megközelítés létezik, egységes gyártók feletti standardok ebben a témában nem igazán léteznek, így vannak olyan gyártók is (follower-ek), akik a hagyományos SNMP alapú monitorozó rendszerüket is SDN kontrollernek állítják be, és alapvetően igazuk is van, hiszen, ha azt vesszük alalpul, hogy nem csak a kontroll réteg teljes elvétele a hálózattól az SDN, hanem úgy vesszük, hogy a kontroll réteg inteligensebbé tétele valamilyen külső központi megoldással, akkor SNMP alapú monitorozó/menedzselő rendszerekkel meg is érkeztünk SDN világba. Ezek rendszerek az SNMP-t déli írányú API-nak használják, hogy az infrastruktúrát elérjék és programozzák. Fontos viszont, hogy alapvetően az ilyen SNMP alapú kontorollerek, valóban nyújtsanak egyéb észak-írányú integrációs lehetőséget, mert ha nincs REST API hozzájuk, akkor valóban csak egy zárt hálózat monitorozó/menedzselő szoftverről beszélhetünk.
Mit tehetünk, ha az SNMP alapvetően nem biztonságos?
Használjunk SNMPv3-et az olyan rendszereknél ahol az API készletünk ebben merül ki. Az SNMPv3-ban már elérhető 3A, továbbá a kommunikációt is lehet titkosítani, így biztonságosabbnak tekinthető a korábbi verzióknál.

Other SDN Southbound plugins

A hálózat-virtualizáció és SDN világában semmmi sem az aminek látszik, és minden mindenre is használható. Úgy gondolom, hogy ha a tradíciónális protokollokat másképp használjuk a megszokottól.
Például útvonalat akarunk módodítani OSFP, vagy BGP segítségével úgy hogy közben nem nyúlunk router konfigurációhoz, akkor az is lehet SDN megoldás, amennyiben ezt egy külső szoftver alaklamzásból tesszük meg.
Ez alapján elmondhatjuk, hogy vannak olyan SDN déli írányú plug-in-ek, amik nem közvetlenül módosítják infrastruktrúra működését, hanem közvetve a hálózati protokollok működéséből kényszerülnek ki a különböző opciókat.

BGP-LS

A BGP Link State protokoll kíválló példa arra, hogy nem csak API szolgáltathat információt a hálózatról. A BGP-LS alapvetően arra szolgál, hogy az OSFP vagy ISIS protokollokból származó link-state információt továttsítsuk BGP hálózaton. A link-state információkra a szolgáltatói, vagy kellően nagyvállalati hálózatok esetén szükség lehet, hogy traffic engineering segítségével, módosítsuk a hálózati forgalom útvonalát (pl: terhelés optamilizálás). Ahhoz, hogy a útvonalat optimalizálni lehessen, szükség van a hálózatunkban lévő link-ek állapotismeretére, egy központi helyen történő feldologozásárára, melyet a BGP-LS szolgáltathat a lenti ábra alapján.

Összefoglalva

Az eddigiek alapján elmondhatjuk, hogy az SDN megoldások, elég nagy komplexitást tudnak vinni a rendszereinkbe, cserébe a könnyebb gyorsabb egyszerűbb üzemeltethetősgért. Van egy mondás amit nagyon kedves barátomtól tanultam ez pedig az hogy:
"Nincs ingyen ebéd, valakinek mindig fizetnie kell"
Amit kapunk pluszban időt az SDN megoldásoktól az üzemeltetési oldalon, azt elveszíthetjük a fejlesztések vagy a bevezetés során. A kérdés csupán annyi, hogy hosszabb távon mi a kifizetődő számunkra.
A hálózati infrastruktúrára felépülő üzleti alkalmazás igények csak nőni fognak, mint számosságban és teljesítmény igényben, tehát a hálózatokat mindig kell majd fejleszteni és üzemeltetni, kérdés az hogy, mit tudunk és  mit érdemes ebből automatizálni és integrálhatóvá tenni?


Ezzel post-al  el is értem a hálózat-virtualizációval kapcsolatos elméleti sorozatom végére, Továbbiakban gyakorlati példákra fogok rátérni. Kezdésnek néhány post erejéig a SDA fabric-ot mint hálózat-virtualizációs és SDN megoldás fogom boncolgatni.

Üdv,
Makesz 

 

 

Érdekesebb bejegyzések

Hálózat-virtualizáció a gyakorlatban - ACI fabric E01

Cisco ACI Kellett már nekünk mint egy falat kenyér, hogy végre történjen ebben VLAN-okba költözött posványos DC rendszerekkel valami... valami új. Mit tegyünk, ha hálózati infrastruktúrát az határozza meg, hogy adott VLAN-ok, hol vagy hol nem szerepelhetnek az infrastruktúrában, ha egy létesítést 8 különböző IT vezetőnek kell jóváhagyni, ha a felelősség tolása másra fontosabb, mint a projekt végrehajtása. Cisco ACI-ról írni nehéz dolog egy olyan alternatív IT valóságban, ami ma Magyarországon van... Mert amíg azzal küzdünk bizonyos helyeken, hogy az ultrafontos IT app egy 486-os gépen fut, ami csak 10M half-ot tud, addig nem tudjuk a 20 éve EoS demarkációs switch-et lecserélni, a lassan szintén EoS státuszba kerülő "legújabb" Nexus switch-re. Addig felesleges bárminek is a infrastruktúrában alkalmazás centrikusnak lenni, amíg az alkalmazásunkat támogató csapat az eniac-os lyukkártyás időszakon mereng, és még mindig nem fogadja el 21 századot. Mint azt egy korábbi be

SD-WAN vagy SD-NINCS II. epizód Cisco (Viptela) 1

Cisco SD-WAN első rész Bevezető Élek az alkotói szabadság jogával, és ellentétben az eddigiekkel kicsit rövídítek a post címén. Eredetileg ez a sorozat Hálózat-virtualizáció a gyakorlatban SD-WAN vagy SD-NINCS II.rész Cisco (Viptela) 1 címet kapta volna, csak hát: Kib@#&0tul hosszú lenne. Az SD-WAN témakör önmagában megér egy post sorozatot. A Cisco SD-WAN-ról sok mindent lehet írni, így ez is megér egy önálló post sorozatot. Cisco SD-WAN-nak nem kis történelmi háttere van már, hiszen a megoldást szakmai berkekben leánykori néven viptelának is hívják. A Cisco 2017 májusában fejezte be a Viptela akvizícióját, és termékeit saját megoldásként, immáron 3 éve Cisco SD-WAN megoldás részeként kínálja az ügyfelei felé. Azért hivatkozunk a szakzsargonban Viptela néven a megoldásra, mert a Cisco-nak további SD-WAN megoldásai léteznek, illetve léteztek: SD-BRANCH (ENCS platform) Meraki SD-WAN IWAN (performance routing alapú, APIC-EM vezérelt kezdeményezés, ami sajnos kihalt )

Hálózat-virtualizáció a gyakorlatban SD-WAN vagy SD-NINCS I. epizód Fortigate

SD-WAN vagy SD-NINCS I. rész Ez a bejegyzés sorozat ötlete, akkor merült fel bennem, amikor különböző gyártók SD-WAN-nak titulált megoldásait próbáltam összegezni magamban... Figyelemebe véve az alap elképzelést és a technikai megvalósíthatóságot, három kategóriát állítottam fel ezekre megoldásokra: SD-WAN megoldások - melyek biztosítják a transzport agnosztikus átvitelt, lehetőséget adnak a szolgáltatótól független topológia kialakítására központi orkesztráció és kontroll segítségével, továbbá az üzleti alkalmazások számára északi irányú API integrációra adnak lehetőséget. SD-NINCS megoldások - melyek marketing anyagokban szerepeltetik az SD-WAN-t, viszont technikai oldalról csak egy jól komponált policy based routing, ami  maximum megvalósítható. SD-LESZ megoldás - valahol a kettő között... Fortigate SD-WAN Március 13-ka óta HOME-OFFICE-ban dolgozom. Nem volt egyszerű az átállás, legalábbis mentálisan mindenképpen megterhelő a napi feladatok elvégzése úgy, hogy közbe

IPAR 4.0 - Okos megoldások, hülyén megvalósítva

IPAR 4.0 Telekommunikációs és informatikai berkekben, az IPAR 4.0 eszközöket valahogy úgy definiáljuk, hogy ipari cuccok amik IP hálózaton is kommunikálnak... Természetesen ez egy durva egyszerűsítés, de ebből a szögből nézve a gyártásban betöltött szerepe nem annyira fontos, mint a hálózatban elfoglalt helye. Ezek olyan tipikusan beágyazott-rendszer alapú megoldások, melyek saját operációs rendszerrel rendelkezhetnek, és IP kommunikációra, egy már korábban lefejlesztett általában valamilyen linux alapú kernel modult használnak. Az ilyen eszközök mondhatni semmilyen tűzfal vagy végpontvédelmi megoldással nem rendelkeznek, kommunikációjuk az adatgyűjtő berendezésekkel általában nem titkosított, így potenciális veszélyforrást jelentenek a hálózatunkban. Nos eddigi tapasztalataim alapján az IoT és/vagy SMART termékek terén az, hogy minél olcsóbban, minél több szolgáltatást legyenek képesek nyújtani a végfelhasználó felé. A ipari plc-k vezérlő szoftvere - amin keresztül menedzs