Hálózatok programozása

SDN, Model-driven Programmability

Az SDN a hagyományos hálózatok problémáira nyújt megoldást. Nézzük meg ezeket egy példán keresztül.

1-hqonly 2-branch 3-mpls 4-cloud

Látható, hogy az igények növekedésével egyre több az eszköz, illetve a vállalat bizonyos szolgáltatásokat a felhőbe helyezett át.

A fejlődés során a következő problémák merülnek fel:

  • Manuális konfiguráció: Új eszközök és alkalmazások hozzáadása minden esetben kézi beavatkozást igényel a hálózati eszközökön (routerek, switch-ek, tűzfalak), ami időigényes és hajlamos a hibákra.
  • Lassú reakcióidő: Az alkalmazások hálózati igényei gyorsan változnak (például skálázódás csúcsidőszakokban), de a hálózat nem képes azonnal alkalmazkodni ezekhez a változásokhoz.
  • Komplex hibakeresés: Egy-egy hálózati probléma az eszközök közti különböző konfigurációk miatt nehezen nyomozható vissza.
  • Biztonsági kockázatok: A gyorsan változó környezet miatt a biztonsági szabályok következetes alkalmazása bonyolult, így növekszik a támadási felület.

Ez a hagyományos, decentralizált hálózatkezelés egyik alapvető problémája: a vezérlés és az adatforgalom ugyanabban a síkban történik, ami nehézkessé és rugalmatlanná teszi a rendszert. Ezekre a problémákra mind megoldást kínál az SDN. (Software-defined Networking)

Az SDN egy olyan megközelítés, amely absztrakció segítségével dinamikus és programozhatóan hatékony hálózatkonfigurációt tesz lehetővé. Ez a módszer a hagyományos hálózatkezelés helyett a felhőalapú rendszerekre hasonlít. Az SDN célja, hogy javítsa a hagyományos hálózatok statikus architektúráját, például azáltal, hogy szétválasztja az adatcsomagok továbbítását (adatsík, innentől data plane) az útvonalkezeléstől (vezérlősík, innentől control plane). A control plane egy vagy több központi vezérlőt tartalmaz, amelyek az SDN "agyának" tekinthetők. Bár a központosítás előnyökkel jár, vannak hátrányai is, például a biztonság, a skálázhatóság és a rugalmasság terén.

A technológia egyik korai és egyben legismertebb implementációja az OpenFlow, viszont ma már sok gyártó saját implementációval dolgozik, pl. a Cisco is.

A model-driven programmability (innentől MDP) a hálózati automatizáció egyik fő eleme. Az MDP az eszközök konfigurálásához a hagyományos, eszköz-specifikus konfigurációk/scriptek helyett általános modelleket definiál, melyek leírják, hogy az adott eszköznek/rendszernek hogyan, milyen paraméterekkel kell működnie.

Az MDP legfontosabb építőelemei a modellek, ilyen a YANG (RFC 7950), amely egységes formában írja le a különböző eszközök képességeit, konfigurációit és állapotukat. Ezek a modellek sablont nyújtanak a hálózat kezeléséhez és konfigurációjához.

Azáltal, hogy az MDP absztrakciót nyújt a hálózatról, így elrejti azok komplex részleteit, a mérnökök egy magasabb szintű, könnyen olvasható dokumentum formájában tervezhetik meg a hálózat működését. Így könnyebb hálózati folyamatokat automatizálni, kevesebb az emberi beavatkozás, így a hibalehetőség is.

A hálózati eszközök kezelésére több protokollt is létrehoztak, a legismertebbek a NETCONF, RESTCONF és a gRPC.

NETCONF

netconf

A NETCONF (RFC 6241) egy IETF által definiált protokoll, amely lehetővé teszi, hogy egy eszköz egy API-t biztosítson, amelyen keresztül alkalmazások küldhetnek vagy fogadhatnak teljes vagy részleges konfigurációs adatokat.

Az RFC szerint a NETCONF lehetővé teszi:

  • Hálózati eszközök kezelését
  • Konfigurációs adatok lekérdezését
  • Új konfigurációs adatok módosítását és feltöltését

A NETCONF jelentős előrelépés az SNMP-hez képest, mivel nemcsak figyel, kérdez vagy hibát jelez, hanem tényleges eszközkonfigurációkat is kezel.

A NETCONF távoli eljáráshívásokat (RPC, Remote Procedure Call) használ: az kliens XML formátumban adja meg az RPC-t, és biztonságos, kapcsolat-orientált kapcsolaton (SSH) keresztül továbbítja a kiszolgálónak. A kiszolgáló szintén XML formátumban küld választ az RPC-re.

A NETCONF 4 fő rétegből áll:

  1. Szállítási réteg: biztosítja a kommunikációs réteget a kliens és a szerver között. Bármilyen protokoll lehet, amely teljesít bizonyos követelményeket.
  2. Üzenet réteg: Egyszerű, önálló keretezés az RPC-k és Notification-ök kódolására.
  3. Művelet réteg: Alapvető metódusokat definiál amiket futtatni lehet RPC-kel és XML paraméterekkel.
  4. Tartalom réteg: Ez a réteg tartalmazza a kezelt objektumokat, azaz a konfigurációs adatokat, állapot információkat és statisztikákat.

RESTCONF

restconf

A RESTCONF (RFC 8040) egy olyan konfigurációs protokoll, ami a NETCONF elvein működik, ugyanúgy YANG modelleket használ, viszont a HTTP-n alapszik. A konfigurációs adatbázis kezeléséhez HTTP műveleteket használ.

YANG

A YANG (RFC 6020, RFC 7950) a NETCONF-hoz létrehozott adatmodellező nyelv. Fő feladata a konfigurációs adatok és állapot adatok modellezése, amelyekhez a NETCONF, RPC-k és Notification-ök férnek hozzá. A NETCONF művelet és tartalom rétegeit modellezi a nyelv.

YANG Adatmodellek

yang

A YANG modellek többféle formában is leírhatók az adott felhasználás igénye szerint:

  • HTML/Javascript
  • YANG nyelv
  • Cleartext
  • XML
  • JSON