Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Die CDSM-Phase ist vorbei, aber das unkontrollierbare Verlangen zu schreiben, bleibt bestehen.

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Über viele Jahre hinweg litt unser Kollege unter der Erledigung routinemĂ€ĂŸiger Arbeiten, drĂŒckte vor Commits die Daumen und bekam zu wenig Schlaf wegen nĂ€chtlicher Rollbacks.
Doch dunkle Zeiten finden ein Ende.

Mit diesem Artikel beginne ich eine Reihe ĂŒber Ich die Sicht auf Automatisierung.
Dabei werden wir die Phasen der Automatisierung, die Speicherung von Variablen, die Formalisierung des Designs, sowie RestAPI, NETCONF, YANG, YDK besprechen und viel programmieren.
Mir bedeutet, dass a) dies keine objektive Wahrheit ist, b) nicht unbedingt der beste Ansatz ist, c) meine Meinung sich sogar im Verlauf von der ersten bis zur letzten Veröffentlichung Ă€ndern kann – ehrlich gesagt habe ich vom Entwurf bis zur Veröffentlichung alles zweimal komplett umgeschrieben.

Inhalt

  1. Ziele
    1. Das Netzwerk – wie ein einheitlicher Organismus
    2. Konfigurationstest
    3. Versionsverwaltung
    4. Überwachung und Selbstheilung der Dienste

  2. Werkzeuge
    1. Inventarsystem
    2. IP-Adressverwaltungssystem
    3. System zur Beschreibung der Netzwerkdienste
    4. GerÀteinitialisierungsmechanismus
    5. Vendor-unabhÀngiges Konfigurationsmodell
    6. Vendor-spezifischer Treiber fĂŒr Schnittstellen
    7. Mechanismus zur Konfigurationserstellung auf GerÀten
    8. CI/CD
    9. Backup- und Abweichungserkennungssystem
    10. Überwachungssystem

  3. Fazit

Ich werde das ADSM in einem etwas anderen Format als SDSM fĂŒhren. Große, ausfĂŒhrliche nummerierte Artikel werden weiterhin erscheinen, und zwischen diesen werde ich kleine Notizen aus meinem Alltag veröffentlichen. Ich werde versuchen, hier den Perfektionismus zu bekĂ€mpfen und nicht jeden Einzelnen zu polieren.

Wie lustig, dass ich den gleichen Weg ein zweites Mal gehen muss.

ZunĂ€chst musste ich selbst Artikel ĂŒber Netzwerke schreiben, da es im russischen Internet keine gab.

Jetzt konnte ich kein umfassendes Dokument finden, das die AnsÀtze zur Automatisierung systematisiert und die oben genannten Technologien anhand einfacher praktischer Beispiele behandelt.

Vielleicht bin ich im Irrtum, also schickt mir Links zu guten Ressourcen. Doch das wird meine Entschlossenheit nicht Àndern, zu schreiben, denn das Hauptziel ist es, selbst etwas zu lernen, und das Leben der anderen zu erleichtern ist ein schöner Bonus, der zur Verbreitung von Wissens beitrÀgt.

Wir werden versuchen, ein mittelgroßes Rechenzentrum LAN DC zu nehmen und das gesamte Automatisierungsschema zu entwickeln.
Einige Dinge werde ich praktisch zum ersten Mal gemeinsam mit Ihnen tun.

In den hier beschriebenen Ideen und Werkzeugen werde ich nicht originell sein. Dmitri Figol hat einen hervorragenden Kanal mit Streams zu diesem Thema..
Die Artikel werden in vielen Aspekten mit ihm ĂŒberschneiden.

Im LAN DC gibt es 4 Rechenzentren, etwa 250 Switches, ein halbes Dutzend Router und ein paar Firewalls.
Nicht Facebook, aber ausreichend, um ernsthaft ĂŒber Automatisierung nachzudenken.
Es besteht jedoch die Meinung, dass, wenn Sie mehr als ein GerÀt haben, Automatisierung nötig ist.
Es ist schwer vorzustellen, dass jemand heutzutage ohne mindestens ein paar Skripte leben kann.
Obwohl ich gehört habe, dass es Firmen gibt, in denen die IP-Adressen in Excel verwaltet werden und jedes der Tausenden von NetzwerkgerĂ€ten manuell konfiguriert wird und eine einzigartige Konfiguration hat. Das kann man natĂŒrlich als moderne Kunst verkaufen, aber die GefĂŒhle eines Ingenieurs wĂŒrden sicher verletzt werden.

Ziele

Jetzt setzen wir uns maximal abstrakte Ziele:

  • Das Netzwerk – wie ein einheitlicher Organismus
  • Konfigurationstest
  • Versionierung des Netzwerkzustands.
  • Überwachung und Selbstheilung der Dienste

SpÀter in diesem Artikel werden wir die verwendeten Mittel nÀher erlÀutern, und in den folgenden Artikeln die Ziele und Mittel im Detail.

Das Netzwerk – wie ein einheitlicher Organismus

Ein zentraler Begriff in diesem Zusammenhang, auch wenn er auf den ersten Blick nicht so bedeutend erscheint: Wir werden das Netzwerk konfigurieren, nicht die einzelnen GerÀte..
In den letzten Jahren beobachten wir einen Trend, das Netzwerk als eine zusammenhĂ€ngende Einheit zu betrachten, was zur EinfĂŒhrung von Software-Defined Networking, Intent Driven Networks und Autonomen Netzwerken.
Denn was benötigen Anwendungen global von einem Netzwerk: Verbindungen zwischen Punkt A und B (und manchmal auch von B nach A) sowie Isolation von anderen Anwendungen und Nutzern.

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Und so besteht unsere Aufgabe in dieser Serie darin, ein System aufzubauen, das die aktuelle Konfiguration des gesamten Netzwerks, die bereits auf die aktuelle Konfiguration jedes GerĂ€ts gemĂ€ĂŸ seiner Rolle und Position heruntergebrochen wird.
System Netzwerkmanagement bedeutet, dass wir, um Änderungen vorzunehmen, auf das Netzwerk zugreifen, und es wiederum den erforderlichen Zustand fĂŒr jedes GerĂ€t berechnet und es konfiguriert.
So minimieren wir nahezu auf null das manuelle Arbeiten im CLI – alle Änderungen an den GerĂ€teeinstellungen oder dem Netzwerkdesign mĂŒssen formalisiert und dokumentiert werden – und werden erst danach auf die erforderlichen Netzwerkkomponenten umgesetzt.

Das heißt, wenn wir entschieden haben, dass die Switches in Kazan ab sofort zwei Netzwerke anstelle von einem ankĂŒndigen sollen, dann

  1. Dokumentieren wir zunĂ€chst die Änderungen in den Systemen.
  2. Wir generieren die Zielkonfiguration aller NetzwerkgerÀte.
  3. Wir starten das Programm zur Aktualisierung der Netzwerkkonfiguration, das berechnet, was auf jedem Knoten entfernt werden muss, was hinzugefĂŒgt werden soll und bringt die Knoten in den gewĂŒnschten Zustand.

Dabei nehmen wir die Änderungen nur im ersten Schritt manuell vor.

Konfigurationstest

Bekanntlich, treten 80% der Probleme wĂ€hrend der KonfigurationsĂ€nderungen auf — ein indirekter Beweis dafĂŒr ist, dass wĂ€hrend der Neujahrsferien normalerweise alles ruhig verlĂ€uft.
Ich habe persönlich Dutzende von globalen AusfĂ€llen aufgrund menschlicher Fehler miterlebt: falscher Befehl, im falschen Konfigurationszweig ausgefĂŒhrt, Community vergessen, MPLS global auf dem Router gelöscht, fĂŒnf GerĂ€te konfiguriert, und beim sechsten die Fehlermeldung nicht bemerkt, alte Änderungen von jemand anderem committet. Es gibt unzĂ€hlige Szenarien.

Automatisierung wird uns helfen, weniger Fehler zu machen, jedoch in grĂ¶ĂŸerem Maßstab. So könnte man nicht nur ein GerĂ€t, sondern das gesamte Netzwerk auf einmal lahmlegen.

Seit jeher haben unsere Vorfahren die Richtigkeit von Änderungen mit scharfem Blick, stĂ€hlernen Eiern und der LeistungsfĂ€higkeit des Netzwerks nach deren Umsetzung ĂŒberprĂŒft.
Die Vorfahren, deren Arbeiten zu AusfĂ€llen und katastrophalen Verlusten fĂŒhrten, hinterließen weniger Nachkommen und sollten im Laufe der Zeit aussterben. Aber die Evolution ist ein langsamer Prozess, und deshalb prĂŒfen bis heute nicht alle Änderungen vorher im Labor.
An der Spitze des Fortschritts stehen diejenigen, die den Testprozess der Konfiguration automatisiert haben und deren weitere Anwendung im Netzwerk. Mit anderen Worten — sie haben das CI/CD-Verfahren (Continuous Integration, Continuous Deployment) von Entwicklern ĂŒbernommen.
In einem der Abschnitte werden wir besprechen, wie dies mit einem Versionskontrollsystem, wahrscheinlich GitHub, umgesetzt werden kann.

Sobald Sie sich mit dem Gedanken des Netzwerk-CI/CD angefreundet haben, wird Ihnen die Methode zur ÜberprĂŒfung der Konfiguration durch deren Anwendung im Live-Netzwerk wie ein frĂŒhmittelalterlicher Unfug vorkommen. Etwa so, als wĂŒrde man mit einem Hammer auf einen Sprengkopf hĂ€mmern.

Eine organische Fortsetzung der Ideen ĂŒber das System des Netzwerkmanagements und CI/CD wird ein vollstĂ€ndiges Versioning der Konfiguration.

Versionsverwaltung

Wir gehen davon aus, dass bei jeglichen Änderungen, selbst den kleinsten, auch an einem unsichtbaren GerĂ€t, das gesamte Netzwerk von einem Zustand in einen anderen ĂŒbergeht.
Und wir fĂŒhren immer den Befehl nicht auf dem GerĂ€t aus, sondern Ă€ndern den Zustand des Netzwerks.
Lass uns diese ZustÀnde Versionen nennen?

Nehmen wir an, die aktuelle Version ist 1.0.0.
Wenn sich die IP-Adresse des Loopback-Interfaces eines der ToR-GerĂ€te Ă€ndert? Das ist eine Minor-Version – sie erhĂ€lt die Nummer 1.0.1.
Wenn wir die Importrichtlinien fĂŒr Routen im BGP ĂŒberarbeiten – das ist schon etwas ernster – dann ist es 1.1.0.
Wenn wir uns entscheiden, das IGP abzulehnen und ausschließlich auf BGP umzusteigen – das ist eine radikale DesignĂ€nderung – dann wird es 2.0.0.

Dabei können verschiedene Rechenzentren unterschiedliche Versionen haben – das Netzwerk entwickelt sich weiter, neue GerĂ€te werden eingesetzt, an manchen Stellen werden neue Spine-Ebenen hinzugefĂŒgt, an anderen nicht, usw.

Über semantische Versionierung darĂŒber werden wir in einem separaten Artikel sprechen.

Ich wiederhole – jede Änderung (außer Debugging-Befehlen) ist ein Versionsupdate. Die Administratoren mĂŒssen ĂŒber alle Abweichungen von der aktuellen Version informiert werden.

Das Gleiche gilt fĂŒr das ZurĂŒcksetzen von Änderungen – es handelt sich nicht um das rĂŒckgĂ€ngigmachen der letzten Befehle, auch nicht um einen Rollback durch das Betriebssystem des GerĂ€ts – es geht um die RĂŒckfĂŒhrung des gesamten Netzwerks auf eine neue (alte) Version.

Überwachung und Selbstheilung der Dienste

Dies ist eine selbstverstÀndliche Aufgabe, die in modernen Netzwerken auf ein neues Niveau gelangt.
Oft praktizieren große Dienstanbieter den Ansatz, dass ein ausgefallener Dienst sehr schnell niedergeschlagen und ein neuer hochgefahren werden muss, anstatt zu klĂ€ren, was passiert ist.
„Sehr“ bedeutet, dass man sich von allen Seiten intensiv mit Monitorings eindecken muss, die innerhalb von Sekunden kleinste Abweichungen von der Norm erkennen.
Und hier sind die gewohnten Metriken, wie die Auslastung der Schnittstelle oder die VerfĂŒgbarkeit des Knotens, nicht ausreichend. Auch die manuelle Überwachung durch den Bereitschaftsdienst reicht nicht aus.
FĂŒr viele Dinge sollte es ĂŒberhaupt Self-Healing geben – die Monitorings leuchten rot und helfen sich selbst, wo es wehtut.

Hier ĂŒberwachen wir nicht nur einzelne GerĂ€te, sondern auch die Gesundheit des gesamten Netzwerks, und zwar sowohl im Weißbox- als auch im Schwarzbox-Stil, was bereits komplizierter ist.

Was benötigen wir fĂŒr die Umsetzung solcher ehrgeizigen PlĂ€ne?

  • Eine Übersicht aller GerĂ€te im Netzwerk, deren Standort, Rollen, Modelle und Softwareversionen haben.
    kazan-leaf-1.lmu.net, Kazan, leaf, Juniper QFX 5120, R18.3.
  • Ein System zur Beschreibung von Netzwerkdiensten haben.
    IGP, BGP, L2/3VPN, Policy, ACL, NTP, SSH.
  • In der Lage sein, ein GerĂ€t zu initialisieren.
    Hostname, Mgmt IP, Mgmt Route, Benutzer, RSA-SchlĂŒssel, LLDP, NETCONF.
  • Das GerĂ€t konfigurieren und die Konfiguration auf die gewĂŒnschte (einschließlich der alten) Version zurĂŒcksetzen.
  • Die Konfiguration testen.
  • RegelmĂ€ĂŸig den Zustand aller GerĂ€te auf Abweichungen vom aktuellen Status ĂŒberprĂŒfen und die zustĂ€ndigen Personen informieren.
    Nachts hat jemand heimlich eine Regel in die ACL hinzugefĂŒgt..
  • Die FunktionsfĂ€higkeit ĂŒberwachen.

Werkzeuge

Das klingt ziemlich kompliziert, um das Projekt in Komponenten zu zerlegen.

Und es werden zehn sein:

  1. Inventarsystem
  2. IP-Adressverwaltungssystem
  3. System zur Beschreibung der Netzwerkdienste
  4. GerÀteinitialisierungsmechanismus
  5. Vendor-unabhÀngiges Konfigurationsmodell
  6. Vendor-spezifischer Treiber fĂŒr Schnittstellen
  7. Mechanismus zur Konfigurationserstellung auf GerÀten
  8. CI/CD
  9. Backup- und Abweichungserkennungssystem
  10. Überwachungssystem

Das ist ĂŒbrigens ein Beispiel dafĂŒr, wie sich die Sichtweise auf die Ziele des Zyklus wandelte – im Entwurf der Komponenten waren es 4.

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

In der Abbildung habe ich alle Komponenten und das entsprechende GerÀt dargestellt.
Überschneidende Komponenten interagieren miteinander.
Je grĂ¶ĂŸer der Block, desto mehr Aufmerksamkeit muss diesem Bestandteil gewidmet werden.

Komponente 1. Inventarisierungssystem.

Offensichtlich möchten wir wissen, welche Hardware wo steht und an was sie angeschlossen ist.
Das Inventarsystem ist ein wesentlicher Bestandteil jedes Unternehmens.
In der Regel verfĂŒgt das Unternehmen fĂŒr NetzwerkgerĂ€te ĂŒber ein separates Inventarsystem, das spezifischere Aufgaben erfĂŒllt.
Im Rahmen dieser Artikelreihe werden wir dies als DCIM – Data Center Infrastructure Management bezeichnen. Obwohl der Begriff DCIM streng genommen viel mehr umfasst.

FĂŒr unsere Zwecke werden wir die folgenden Informationen ĂŒber das GerĂ€t speichern:

  • Inventarnummer
  • Bezeichnung/Beschreibung
  • Modell (Huawei CE12800, Juniper QFX5120 usw.)
  • Merkmale (Module, Schnittstellen usw.)
  • Rolle (Leaf, Spine, Border Router usw.)
  • Standort (Region, Stadt, Rechenzentrum, Rack, Einheit)
  • InterkonnektivitĂ€ten zwischen GerĂ€ten
  • Netzwerktopologie

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Es ist uns allen klar, dass wir alles darĂŒber wissen möchten.
Aber hilft das bei den Automatisierungszielen?
Auf jeden Fall.
Zum Beispiel wissen wir, dass in diesem Rechenzentrum auf Leaf-Switches, wenn es sich um Huawei handelt, ACL zur Filterung bestimmter Datenströme auf VLAN angewendet werden mĂŒssen, und wenn es sich um Juniper handelt, dann auf Unit 0 des physischen Interfaces.
Oder wir mĂŒssen einen neuen Syslog-Server auf alle Border-Router in der Region verteilen.

In dieser werden wir virtuelle NetzwerkgerĂ€te speichern, wie zum Beispiel virtuelle Router oder Route-Reflectoren. Wir können DNS-Server, NTP, Syslog und alles hinzufĂŒgen, was in irgendeiner Weise mit dem Netzwerk zu tun hat.

Komponente 2. IP-Adressmanagement-System

Ja, es gibt nach wie vor Gruppen von Menschen, die PrÀfixe und IP-Adressen in einer Excel-Datei erfassen. Aber der moderne Ansatz ist eine Datenbank mit einer Frontend-Lösung auf nginx/apache, API und umfangreichen Funktionen zur Verwaltung von IP-Adressen und Netzwerken mit VRF-Unterteilung.
IPAM - IP Address Management.

FĂŒr unsere Zwecke werden wir darin folgende Informationen speichern:

  • VLAN
  • VRF
  • Netze/Subnetze
  • IP-Adressen
  • Zuweisung von Adressen zu GerĂ€ten, Netzen zu Standorten und VLAN-Nummern

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Es ist klar, dass wir sicherstellen wollen, dass wir, wenn wir eine neue IP-Adresse fĂŒr den Loopback des ToR zuweisen, nicht darauf stoßen, dass sie bereits jemandem zugewiesen wurde. Oder dass wir dasselbe PrĂ€fix an verschiedenen Enden des Netzwerks zweimal verwendet haben.
Aber wie hilft das bei der Automatisierung?
Einfach.
Wir fordern im System ein PrĂ€fix mit der Rolle Loopbacks an, in dem verfĂŒgbare IP-Adressen zur VerfĂŒgung stehen – falls vorhanden, weisen wir die Adresse zu, wenn nicht, beantragen wir die Erstellung eines neuen PrĂ€fixes.
Oder beim Erstellen der GerÀte-Konfiguration können wir aus demselben System erfahren, in welchem VRF sich das Interface befinden sollte.
Beim Start eines neuen Servers ĂŒberprĂŒft das Skript das System, um herauszufinden, welcher Switch, welcher Port und welches Subnetz dem Interface zugewiesen ist — daraus wird die Serveradresse zugewiesen.

Es liegt nahe, DCIM und IPAM in einem System zu vereinen, um Funktionen nicht zu duplizieren und zwei Àhnliche EntitÀten zu verwalten.
Das werden wir tun.

Komponente 3. System zur Beschreibung von Netzwerkdiensten

Wenn die ersten beiden Systeme Variablen speichern, die weiterhin verwendet werden mĂŒssen, beschreibt das dritte, wie jedes GerĂ€t fĂŒr seine Rolle konfiguriert werden sollte.
Es gibt zwei verschiedene Arten von Netzwerkdiensten:

  • Infrastrukturelle
  • Kundenspezifische.

Die ersten sind darauf ausgelegt, grundlegende KonnektivitÀt und GerÀtemanagement zu gewÀhrleisten. Dazu gehören VTY, SNMP, NTP, Syslog, AAA, Routing-Protokolle, CoPP usw.
Die zweiten bieten Dienstleistungen fĂŒr den Kunden an: MPLS L2/L3VPN, GRE, VXLAN, VLAN, L2TP usw.
NatĂŒrlich gibt es auch GrenzfĂ€lle – wo ordnet man MPLS LDP, BGP ein? Und Routing-Protokolle können auch fĂŒr Kunden verwendet werden. Aber das ist nicht entscheidend.

Beide Arten von Diensten werden in Konfigurationsprimitive unterteilt:

  • physikalische und logische Schnittstellen (Tag/Antag, mtu)
  • IP-Adressen und VRF (IP, IPv6, VRF)
  • ACLs und Verkehrsverarbeitungsrichtlinien
  • Protokolle (IGP, BGP, MPLS)
  • Routingrichtlinien (PrĂ€fixlisten, Communities, ASN-Filter).
  • Dienste (SSH, NTP, LLDP, Syslog
)
  • usw.

Wie genau wir das machen werden, kann ich im Moment nicht sagen. Wir werden das in einem separaten Artikel klÀren.

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Wenn man es etwas praktischer betrachtet, könnten wir beschreiben, dass
der Leaf-Switch BGP-Sitzungen mit allen angeschlossenen Spine-Switches haben sollte, die angeschlossenen Netzwerke importieren und nur Netzwerke aus einem bestimmten PrÀfix von den Spine-Switches akzeptieren sollte. CoPP IPv6 ND auf 10 pps begrenzen usw.
Im Gegenzug halten die Spines Sitzungen mit allen angeschlossenen Leaves, fungieren als Root-Reflektoren und akzeptieren von diesen nur Routen einer bestimmten LĂ€nge und mit einer bestimmten Community.

Komponente 4. Mechanismus zur Initialisierung des GerÀts

Unter diesem Titel vereine ich zahlreiche Aktionen, die erforderlich sind, damit das GerÀt auf den Radarschirmen erscheint und remote erreichbar ist.

  1. Das GerÀt im Inventarsystem anlegen.
  2. Eine dedizierte IP-Adresse fĂŒr die Verwaltung bereitstellen.
  3. Basiszugang darauf einrichten:
    Hostname, IP-Adresse der Verwaltung, Routing zur Verwaltungsnetzwerk, Benutzer, SSH-SchlĂŒssel, Protokolle – telnet/SSH/NETCONF

Es gibt drei AnsÀtze:

  • Alles vollstĂ€ndig manuell. Die GerĂ€te werden zur Testumgebung gebracht, wo ein herkömmlicher Mensch sie in die Systeme einpflegt, sich ĂŒber die Konsole verbindet und sie konfiguriert. Dies kann bei kleinen, statischen Netzwerken funktionieren.
  • ZTP – Zero Touch Provisioning. Die Hardware kommt an, stellt sich auf, erhĂ€lt ĂŒber DHCP eine Adresse und konfiguriert sich selbst ĂŒber einen speziellen Server.
  • Infrastruktur von Konsolenservern, bei der die Erstkonfiguration ĂŒber den Konsolenport automatisch erfolgt.

Über alle drei AnsĂ€tze werden wir in einem separaten Artikel sprechen.

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Komponente 5. AnbieterunabhÀngiges Konfigurationsmodell

Bis jetzt waren alle Systeme isolierte PuzzlestĂŒcke, die variable und deklarative Beschreibungen dessen lieferten, was wir im Netzwerk sehen möchten. Doch irgendwann mĂŒssen wir uns mit konkreten Details auseinandersetzen.
In diesem Schritt werden fĂŒr jedes spezifische GerĂ€t die Primitiven, Dienste und Variablen zu einem Konfigurationsmodell kombiniert, das die vollstĂ€ndige Konfiguration des jeweiligen GerĂ€ts in einem herstellerunabhĂ€ngigen Format beschreibt.
Was bringt dieser Schritt? Warum nicht gleich die Konfiguration des GerÀts erstellen, die einfach hochgeladen werden kann?
TatsÀchlich ermöglicht dies die Lösung von drei Aufgaben:

  1. Sich nicht an eine spezifische Schnittstelle zur Interaktion mit dem GerÀt anzupassen. UnabhÀngig davon, ob CLI, NETCONF, RESTCONF oder SNMP verwendet wird, bleibt das Modell gleich.
  2. Die Anzahl der Templates/Skripte nicht an die Anzahl der Hersteller im Netzwerk anzupassen, und bei Änderungen im Design nur an einer Stelle anpassen zu mĂŒssen.
  3. Die Konfiguration vom GerĂ€t (Backup) zu laden, sie in genau dasselbe Modell zu ĂŒberfĂŒhren und direkt die Zielkonfiguration mit der vorhandenen zu vergleichen, um die Differenz zu berechnen und ein Konfigurationspatch vorzubereiten, das nur die Teile Ă€ndert, die erforderlich sind oder um Abweichungen zu identifizieren.

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Infolge dieses Schrittes erhalten wir eine herstellerunabhÀngige Konfiguration.

Komponente 6. Hersteller-spezifischer Treiber

Es ist illusorisch zu glauben, dass man eines Tages Cisco genauso konfigurieren kann wie Juniper, indem man einfach identische Aufrufe sendet. Trotz der zunehmenden Beliebtheit von Whiteboxes und der EinfĂŒhrung von NETCONF, RESTCONF und OpenConfig unterscheidet sich der spezifische Inhalt, den diese Protokolle liefern, von Anbieter zu Anbieter, und das ist eines ihrer Wettbewerbsmerkmale, das sie nicht einfach aufgeben werden.
Ähnlich verhĂ€lt es sich mit OpenContrail und OpenStack, die zwar eine RestAPI als ihre NorthBound-Schnittstelle haben, jedoch ganz unterschiedliche Aufrufe erwarten.

Im fĂŒnften Schritt muss das anbieterunabhĂ€ngige Modell die Form annehmen, in der es auf die Hardware ĂŒbertragen wird.
Und hier sind alle Mittel recht (nicht wirklich): CLI, NETCONF, RESTCONF, SNMP – einfach erschreckend.

Deshalb benötigen wir einen Treiber, der das Ergebnis des vorherigen Schrittes in das benötigte Format eines bestimmten Anbieters umwandelt: eine Reihe von CLI-Befehlen oder eine XML-Struktur.

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Komponente 7. Mechanismus zur Bereitstellung der Konfiguration an das GerÀt

Die Konfiguration haben wir erstellt, aber sie muss noch an die GerĂ€te geliefert werden – und zwar offensichtlich nicht manuell.
Erstens, vor uns stellt sich die Frage, welches Transportmittel wir verwenden werden? Die Auswahl ist heute bereits groß:

  • CLI (telnet, ssh)
  • SNMP
  • NETCONF
  • RESTCONF
  • REST API
  • OpenFlow (obwohl es aus der Liste herausfĂ€llt, da es ein Weg ist, FIB zu liefern und nicht fĂŒr die Konfiguration)

Lassen Sie uns hier Klarheit schaffen. CLI – das ist Legacy. SNMP
 Ă€hem.
RESTCONF – ist bisher noch ein unbekanntes Wesen, REST API wird von fast niemandem unterstĂŒtzt. Daher konzentrieren wir uns in dieser Runde auf NETCONF.

TatsĂ€chlich, wie der Leser bereits verstanden hat, haben wir uns zu diesem Zeitpunkt bereits auf das Interface festgelegt – das Ergebnis des vorherigen Schrittes liegt bereits im Format des gewĂ€hlten Interfaces vor.

, versucht der MLFQ, und welche Tools werden wir dafĂŒr verwenden?
Hier ist die Auswahl ebenfalls groß:

  • Ein selbstgeschriebenes Skript oder eine Plattform. RĂŒsten wir uns mit ncclient und asyncIO aus und machen alles selbst. Was hindert uns daran, ein Deployment-System von Grund auf zu erstellen?
  • Ansible mit seiner umfangreichen Sammlung an Netzwerkmodulen.
  • Salt mit seiner begrenzten NetzwerkunterstĂŒtzung und der Integration mit Napalm.
  • Eigentlich Napalm, das nur ein paar Anbieter kennt und das war's, auf Wiedersehen.
  • Nornir – ein weiteres Tierchen, das wir in Zukunft nĂ€her betrachten werden.

Hier ist noch kein Favorit ausgewĂ€hlt – wir werden uns umsehen.

Was ist hier noch wichtig? Die Auswirkungen der Konfigurationsanwendung.
Erfolgreich oder nicht. Ist der Zugriff auf die Hardware noch möglich?
Es scheint, dass hier ein Commit mit BestÀtigung und Validierung dessen, was ins GerÀt geladen wurde, hilfreich sein könnte.
In Kombination mit einer korrekten Implementierung von NETCONF reduziert dies die Anzahl geeigneter GerĂ€te erheblich – gĂ€ngige Commits werden nicht von vielen Herstellern unterstĂŒtzt. Aber das ist nur eine der Voraussetzungen im RFP. Letztendlich macht sich niemand Sorgen, dass kein russischer Anbieter die Bedingung fĂŒr das 32*100GE-Interface erfĂŒllen wird. Oder doch?

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Komponente 8. CI/CD

Bis zu diesem Zeitpunkt haben wir bereits die Konfiguration fĂŒr alle GerĂ€te im Netzwerk vorbereitet.
Ich schreibe "fĂŒr alle", weil wir ĂŒber die Versionierung des Netzwerkstatus sprechen. Und selbst wenn die Einstellungen eines einzelnen Switches geĂ€ndert werden mĂŒssen, werden die Änderungen fĂŒr das gesamte Netzwerk berechnet. Offensichtlich können sie dabei fĂŒr die meisten Knoten null sein.

Aber wie bereits erwÀhnt, sind wir keine Barbaren, die alles sofort in Produktion bringen wollen.
Die generierte Konfiguration muss zuerst durch die Pipeline CI/CD laufen.

CI/CD steht fĂŒr Continuous Integration und Continuous Deployment. Dies ist ein Ansatz, bei dem das Team nicht alle sechs Monate eine neue Hauptversion veröffentlicht, die die alte vollstĂ€ndig ersetzt, sondern regelmĂ€ĂŸig inkrementelle Neuerungen (Deployment) in kleinen, ausfĂŒhrlich getesteten Charge bereitstellt, die auf KompatibilitĂ€t, Sicherheit und FunktionalitĂ€t (Integration) geprĂŒft werden.

DafĂŒr haben wir ein Versionskontrollsystem, das die KonfigurationsĂ€nderungen ĂŒberwacht, eine Testumgebung, die sicherstellt, dass der Kundenservice nicht beeintrĂ€chtigt wird, ein Überwachungssystem, das dies ĂŒberprĂŒft, und der letzte Schritt ist die Bereitstellung der Änderungen im Produktionsnetzwerk.

Ausgenommen von Debugging-Befehlen mĂŒssen alle NetzwerkĂ€nderungen durch den CI/CD-Pipeline gehen – das ist unser Garant fĂŒr ein sorgenfreies Leben und eine lange, glĂŒckliche Karriere.

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Komponente 9. Backup-System und Abweichungserkennung

Über Backups muss man nicht mehr viele Worte verlieren.
Wir werden sie einfach nach einem Zeitplan oder bei Änderungen in der Konfiguration in Git abspeichern.

Der zweite Teil ist interessanter – jemand muss sich um diese Backups kĂŒmmern. In einigen FĂ€llen muss dieser jemand alles wiederherstellen, wie es war, wĂ€hrend in anderen FĂ€llen jemand darĂŒber informiert werden muss, dass etwas nicht in Ordnung ist.
Wenn beispielsweise ein neuer Benutzer aufgetaucht ist, der nicht in den Variablen aufgefĂŒhrt ist, sollte man ihn besser von der Hacking-Aktion fernhalten. Bei einer neuen Firewall-Regel ist es besser, die Finger davon zu lassen; möglicherweise hat jemand einfach das Debugging aktiviert oder ein neuer Dienst wurde vorschnell ohne Beachtung der Vorschriften eingetragen, wĂ€hrend bereits Nutzer darauf zugreifen.

Eine gewisse kleine Abweichung im gesamten Netzwerk lĂ€sst sich ohnehin nicht vermeiden, trotz aller Automatisierungssysteme und disziplinierter Leitung. FĂŒr die Fehlersuche wird dennoch niemand die Konfiguration in die Systeme einpflegen. Zumal das Modell der Konfiguration möglicherweise nicht einmal darauf ausgelegt ist.

Ein Beispiel wĂ€re eine Firewall-Regel zur ZĂ€hlung der Pakete fĂŒr eine bestimmte IP, um das Problem zu lokalisieren – eine durchaus gĂ€ngige temporĂ€re Konfiguration.

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Komponente 10. Überwachungssystem

ZunĂ€chst war ich nicht gewillt, das Thema Monitoring anzusprechen – es ist schließlich ein umfangreiches, umstrittenes und komplexes Thema. Doch im Verlauf stellte sich heraus, dass es ein untrennbarer Teil der Automatisierung ist. Man kann sie nicht ignorieren, selbst wenn man keine praktische Erfahrung hat.

Diese Überlegung ist ein organischer Bestandteil des CI/CD-Prozesses. Nach dem Rollout der Konfiguration ins Netzwerk mĂŒssen wir in der Lage sein festzustellen, ob alles in Ordnung ist.
Dabei geht es nicht nur um Diagramme zur Nutzung von Schnittstellen oder die VerfĂŒgbarkeit von Knoten, sondern auch um subtilere Aspekte – das Vorhandensein der erforderlichen Routen, deren Attribute, die Anzahl der BGP-Sitzungen, OSPF-Nachbarn und die End-to-End-FunktionalitĂ€t der ĂŒbergeordneten Dienste.
Haben die Syslogs auf den externen Servern aufgehört zu erscheinen? Ist der SFlow-Agent nicht ausgefallen? Haben die Drop-Raten in den Warteschlangen zugenommen? Ist die KonnektivitÀt zwischen bestimmten PrÀfix-Paaren beeintrÀchtigt worden?

In einem separaten Artikel werden wir auch darĂŒber nachdenken.

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Automatisierung fĂŒr die Allerkleinsten. Teil Null. Planung.

Fazit

Als Grundlage habe ich einen der modernen Designs fĂŒr Rechenzentrumsnetze gewĂ€hlt – L3 Clos Fabric mit BGP als Routing-Protokoll.
Wir werden dieses Mal das Netzwerk auf Juniper aufbauen, denn die JunOs-OberflÀche ist jetzt benutzerfreundlich.

Wir machen es uns nicht einfach, indem wir nur Open Source-Tools und ein Multi-Vendor-Netzwerk verwenden – daher werde ich neben Juniper auch einen weiteren GlĂŒcklichen auswĂ€hlen.

Der Plan fĂŒr die nĂ€chsten Veröffentlichungen sieht ungefĂ€hr so aus:
Zuerst werde ich ĂŒber virtuelle Netzwerke sprechen. Vor allem, weil ich Lust darauf habe, und zweitens, weil das Design der Infrastruktur ohne diese Information nicht ganz nachvollziehbar ist.
Dann geht es um das Netzwerkdesign: Topologie, Routing, Richtlinien.
Wir werden eine Laboraufstellung zusammenstellen.
Lass uns nachdenken und vielleicht ein bisschen ĂŒben, wie man ein GerĂ€t im Netzwerk initialisiert.
Und dann werden wir jeden Bestandteil im Detail betrachten.

Und ja, ich verspreche nicht, diesen Zyklus elegant mit einer fertigen Lösung abzuschließen. 🙂

NĂŒtzliche Links

  • Bevor wir in die Serie eintauchen, ist es ratsam, das Buch von Nataliya Samoylenko zu lesen, Python fĂŒr Netzwerkingenieure. Vielleicht auch einen Kurs.
  • Es wĂ€re auch empfehlenswert, ĂŒber das Design von Rechenzentrumfabriken von Facebook zu lesen, verfasst von Peter Lapukhov. RFC Wie Overlay-SDN funktioniert, kann Ihnen die Dokumentation zur Architektur
  • (ehemals Open Contrail) erlĂ€utern. Tungsten Fabric Roman Gorge. FĂŒr Kommentare und Korrekturen.
Vielen Dank

Artem Tschernobaj. FĂŒr KDPV.
Artem Tschernobai. FĂŒr KDPW.

Quelle: habr.com

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster