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

Die SDSM ist zu Ende gegangen, aber das unkontrollierte Verlangen zu schreiben bleibt bestehen.

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

Viele Jahre litt unser Bruder unter der Erledigung routinierter Aufgaben, kreuzte die Finger vor dem Commit und schlief wegen nÀchtlicher Rollbacks nicht genug.
Doch dunkle Zeiten neigen sich dem Ende zu.

Mit diesem Artikel beginne ich eine Serie darĂŒber, wie mir Automatisierung wahrgenommen wird.
Im Verlauf werden wir die Phasen der Automatisierung, die Speicherung von Variablen, die Formalisierung des Designs, RestAPI, NETCONF, YANG, YDK behandeln und werden viel programmieren.
Mir bedeutet, dass a) dies keine objektive Wahrheit ist, b) es nicht der unbestritten beste Ansatz ist, c) mein Blick selbst im Verlauf vom ersten bis zum letzten Artikel sich Ă€ndern kann — um ehrlich zu sein, habe ich alles seit der Entwurfsphase bis zur Veröffentlichung zweimal komplett umgeschrieben.

Inhalt

  1. Ziele
    1. Das Netzwerk — wie ein einziger Organismus
    2. Konfigurationstests
    3. Versionskontrolle
    4. Überwachung und Selbstwiederherstellung von Diensten

  2. Werkzeuge
    1. Inventarisierungssystem
    2. IP-Raumverwaltungssystem
    3. System zur Beschreibung von Netzwerkdiensten
    4. GerÀteinitialisierungsmechanismus
    5. Vendor-unabhÀngiges Konfigurationsmodell
    6. Vendor-spezifischer Treiber
    7. Mechanismus zur Bereitstellung von Konfigurationen auf ein GerÀt
    8. CI/CD
    9. Mechanismus zur Datensicherung und Abweichungserkennung
    10. Überwachungssystem

  3. Fazit

Ich werde versuchen, die ADSM in einem Format zu fĂŒhren, das sich ein wenig vom SDSM unterscheidet. Es werden weiterhin umfangreiche, ausfĂŒhrliche nummerierte Artikel erscheinen, und dazwischen werde ich kleine Notizen aus dem Alltag veröffentlichen. Ich werde versuchen, hier gegen den Perfektionismus anzukĂ€mpfen und nicht jeden von ihnen zu polieren.

Wie lustig es ist, dass man denselben Weg ein zweites Mal gehen muss.

Zuerst musste ich selber Artikel ĂŒber Netzwerke schreiben, da es sie im russischen Internet nicht gab.

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

Vielleicht liege ich falsch, also schickt Links zu brauchbaren Ressourcen. Das wird jedoch meine Entschlossenheit, zu schreiben, nicht Àndern, denn das Hauptziel besteht ohnehin darin, selbst etwas zu lernen, und das Leben der anderen zu erleichtern ist ein angenehmer Bonus, der die Verbreitung von Wissen fördert.

Wir werden versuchen, ein mittelgroßes Rechenzentrum LAN DC zu nehmen und das gesamte Automatisierungsschema zu erarbeiten.
Einige Dinge werde ich praktisch zum ersten Mal zusammen mit euch machen.

In den hier beschriebenen Ideen und Werkzeugen werde ich nicht original sein. Dmitry Figol hat einen ausgezeichneten Kanal mit Streams zu diesem Thema.
Die Artikel werden in vielerlei Hinsicht mit ihnen ĂŒberschneiden.

In LAN DC 4 DCs, etwa 250 Switches, ein halbes Dutzend Router und ein paar Firewalls.
Nicht Facebook, aber ausreichend, um tief ĂŒber Automatisierung nachzudenken.
Es gibt jedoch die Meinung, dass man, wenn man mehr als ein GerÀt hat, bereits eine Automatisierung benötigt.
Es ist tatsÀchlich schwer vorstellbar, dass jemand heute ohne mindestens ein paar Shell-Skripte leben kann.
Obwohl ich gehört habe, dass es Firmen gibt, in denen die IP-Adressverwaltung in Excel erfolgt und jedes aus Tausenden von NetzgerĂ€ten manuell konfiguriert wird, wobei jedes eine einzigartige Konfiguration hat. Das kann man natĂŒrlich als moderne Kunst verkaufen, aber die GefĂŒhle der Ingenieure werden sicher verletzt sein.

Ziele

Jetzt werden wir möglichst abstrakte Ziele setzen:

  • Das Netzwerk — wie ein einziger Organismus
  • Konfigurationstests
  • Versionierung des Netzwerkstatus
  • Überwachung und Selbstwiederherstellung von Diensten

SpÀter in diesem Artikel werden wir besprechen, welche Mittel wir verwenden werden, und in den folgenden Artikeln Ziele und Mittel im Detail.

Das Netzwerk — wie ein einziger Organismus

Der prÀgnante Satz des Zyklus, auch wenn er auf den ersten Blick nicht besonders erheblich erscheint: Wir werden das Netzwerk konfigurieren, nicht einzelne GerÀte..
In den letzten Jahren beobachten wir einen Trend, die Netzwerke als eine einheitliche EntitÀt zu betrachten, weshalb uns nun Software Defined Networking, Intent Driven Networks und Autonome Netzwerke.
Denn was brauchen Anwendungen global von einem Netzwerk: KonnektivitÀt zwischen Punkten A und B (nun manchmal +B-Я) und Isolation von anderen Anwendungen und Benutzern.

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

Und so besteht unsere Aufgabe in dieser Reihe darin, ein System aufzubauen, das die aktuelle Konfiguration des gesamten Netzwerks, die sich bereits in die aktuelle Konfiguration jedes GerĂ€ts gemĂ€ĂŸ seiner Rolle und seinem Standort decomponiert, unterstĂŒtzt.
Das System Netzwerkmanagement bedeutet, dass wir zur Änderung auf dieses System zugreifen, und es berechnet dann den benötigten Zustand fĂŒr jedes GerĂ€t und konfiguriert es.
So minimieren wir fast auf null das manuelle Eingreifen in die CLI – alle Änderungen an den GerĂ€teeinstellungen oder am Netzwerkdesign mĂŒssen formalisiert und dokumentiert werden – und erst dann auf die notwendigen Elemente des Netzwerks angewendet werden.

Das heißt, zum Beispiel, wenn wir entschieden haben, dass ab jetzt die Stacked Switches in Kasan zwei Netzwerke anstelle von einem ankĂŒndigen sollten, wir

  1. Dokumentieren zuerst die Änderungen in den Systemen
  2. Generieren die Zielkonfiguration aller NetzwerkgerÀte
  3. Starten das Programm zur Aktualisierung der Netzwerkkonfiguration, das berechnet, was an jedem Knoten entfernt werden muss, was hinzugefĂŒgt werden muss, und bringt die Knoten in den gewĂŒnschten Zustand.

Dabei nehmen wir manuelle Änderungen nur im ersten Schritt vor.

Konfigurationstests

Es ist bekannt, dass 80% der Probleme wĂ€hrend der Änderung der Konfiguration auftreten - ein indirekter Beweis dafĂŒr ist, dass wĂ€hrend der Neujahrsferien normalerweise alles ruhig ist.
Ich habe persönlich Dutzende globaler AusfĂ€lle 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 den Fehler beim sechsten nicht bemerkt, alte Änderungen, die von jemand anderem vorgenommen wurden, eingefĂŒgt. Es gibt unzĂ€hlige Szenarien.

Die Automatisierung ermöglicht es uns, weniger Fehler zu machen, jedoch in grĂ¶ĂŸerem Maßstab. So kann man nicht nur ein GerĂ€t, sondern das gesamte Netzwerk auf einmal lahmlegen.

Seit jeher haben unsere Vorfahren die Richtigkeit der vorgenommenen Änderungen mit scharfem Auge, steelen Eiern und der FunktionsfĂ€higkeit des Netzwerks nach deren Implementierung ĂŒberprĂŒft.
Die Vorfahren, deren Arbeiten zu Stillstand und katastrophalen Verlusten fĂŒhrten, hinterließen weniger Nachkommen und sollten mit der Zeit aussterben, aber die Evolution ist ein langsamer Prozess, und daher ĂŒberprĂŒfen bis heute nicht alle im Voraus die Änderungen im Labor.
An der Spitze des Fortschritts stehen diejenigen, die den Prozess der Testautomatisierung der Konfiguration und deren weiterer Anwendung im Netzwerk automatisiert haben. Anders gesagt - sie haben das CI/CD-Verfahren (Continuous Integration, Continuous Deployment) von Entwicklern ĂŒbernommen.
In einem der Teile werden wir uns ansehen, wie man dies mit einem Versionskontrollsystem, wahrscheinlich GitHub, umsetzt.

Sobald Sie sich mit dem Gedanken an Netzwerkintegration und -bereitstellung vertraut gemacht haben, wird Ihnen die Methode zur ÜberprĂŒfung der Konfiguration durch deren Anwendung im Produktionsnetzwerk sofort wie ein frĂŒhmittelalterliches Unwissenheit erscheinen. Etwa so, als wĂŒrde man mit einem Hammer auf einen Sprengkopf schlagen.

Eine organische Fortsetzung der Ideen ĂŒber das System Netzwerkmanagement und CI/CD ist eine vollstĂ€ndige Versionskontrolle der Konfiguration.

Versionskontrolle

Wir gehen davon aus, dass bei jeglichen Änderungen, selbst den geringfĂŒgigsten, selbst an einem unauffĂ€lligen GerĂ€t, das gesamte Netzwerk von einem Zustand in einen anderen ĂŒbergeht.
Und wir fĂŒhren den Befehl niemals direkt auf dem GerĂ€t aus, sondern Ă€ndern den Zustand des Netzwerks.
Lassen Sie uns diese ZustÀnde Versionen nennen?

Nehmen wir an, die aktuelle Version ist 1.0.0.
Hat sich die IP-Adresse des Loopback-Interfaces an einem der ToR geĂ€ndert? Das ist eine kleinere Version – sie erhĂ€lt die Nummer 1.0.1.
Haben wir die Richtlinien fĂŒr das Importieren von Routen in BGP ĂŒberarbeitet – das ist schon etwas ernster – und wir haben 1.1.0.
Haben wir uns entschieden, IGP abzulehnen und nur auf BGP umzusteigen – das ist bereits eine radikale Änderung im Design – 2.0.0.

Anmerkung: Verschiedene Rechenzentren können unterschiedliche Versionen haben – das Netzwerk entwickelt sich weiter, neue GerĂ€te werden installiert, wo neue Spine-Ebenen hinzugefĂŒgt werden, woanders nicht usw.

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

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

Das Gleiche gilt fĂŒr das ZurĂŒcksetzen von Änderungen – das ist nicht das RĂŒckgĂ€ngigmachen der letzten Befehle, das ist kein Rollback durch das Betriebssystem des GerĂ€ts – das bedeutet, das gesamte Netzwerk auf eine neue (alte) Version zurĂŒckzufĂŒhren.

Überwachung und Selbstwiederherstellung von Diensten

Diese scheinbar offensichtliche Aufgabe in modernen Netzwerken erreicht ein neues Niveau.
Bei großen Dienstanbietern wird oft der Ansatz verfolgt, dass ein ausgefallener Dienst sehr schnell behoben und ein neuer gestartet werden muss, anstatt herauszufinden, was passiert ist.
„Sehr“ bedeutet, dass von allen Seiten reichlich Monitoring eingesetzt werden muss, das innerhalb von Sekunden die geringsten Abweichungen von der Norm erkennt.
Und hier sind gewohnte Metriken, wie die Auslastung des Interfaces oder die Erreichbarkeit von Knoten, nicht mehr ausreichend. Auch die manuelle Überwachung durch den Diensthabenden reicht nicht aus.
FĂŒr viele Dinge muss es im Allgemeinen Self-Healing geben – die Monitorings leuchten rot und kĂŒmmern sich selbst darum, wo es schmerzt.

Hier ĂŒberwachen wir nicht nur einzelne GerĂ€te, sondern auch die Gesundheit des gesamten Netzwerks, sowohl wie bei einem Whitebox-Ansatz, was vergleichsweise klar ist, als auch bei einem Blackbox-Ansatz, was bereits komplexer ist.

Was benötigen wir, um solche ehrgeizigen PlÀne umzusetzen?

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

Werkzeuge

Das klingt ziemlich kompliziert, um mit der Dekomposition des Projekts in Komponenten zu beginnen.

Und es werden zehn sein:

  1. Inventarisierungssystem
  2. IP-Raumverwaltungssystem
  3. System zur Beschreibung von Netzwerkdiensten
  4. GerÀteinitialisierungsmechanismus
  5. Vendor-unabhÀngiges Konfigurationsmodell
  6. Vendor-spezifischer Treiber
  7. Mechanismus zur Bereitstellung von Konfigurationen auf ein GerÀt
  8. CI/CD
  9. Mechanismus zur Datensicherung und Abweichungserkennung
  10. Überwachungssystem

Das ist ĂŒbrigens ein Beispiel dafĂŒr, wie sich die Sicht auf die Ziele des Zyklus geĂ€ndert hat – im Entwurf der Komponenten waren es vier.

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

In der Abbildung habe ich alle Komponenten und das GerÀt selbst dargestellt.
Überlappende Komponenten interagieren miteinander.
Je grĂ¶ĂŸer der Block, desto mehr Aufmerksamkeit sollte diesem komponenten gewidmet werden.

Komponente 1. Inventarisierungssystem

Offensichtlich wollen wir wissen, welche GerÀte wo stehen und womit sie verbunden sind.
Das Inventarisierungssystem ist ein wesentlicher Bestandteil jedes Unternehmens.
In der Regel hat das Unternehmen fĂŒr NetzgerĂ€te ein separates Inventarisierungssystem, das spezifischere Aufgaben erfĂŒllt.
Im Rahmen der Artikelreihe werden wir dies als DCIM – Data Center Infrastructure Management bezeichnen. Obwohl der Begriff DCIM eigentlich viel mehr umfasst.

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

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

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

Es ist ganz klar, dass wir das alles selbst wissen wollen.
Aber wird das bei der Automatisierung helfen?
NatĂŒrlich.
Zum Beispiel wissen wir, dass in diesem Rechenzentrum auf Leaf-Switches, wenn es Huawei ist, ACLs zur Filterung bestimmter Datenströme auf VLAN angewendet werden mĂŒssen, wĂ€hrend dies bei Juniper auf Einheit 0 des physischen Interfaces gelten muss.
Oder wir mĂŒssen einen neuen Syslog-Server auf allen Border-Routern der Region installieren.

Darin werden wir virtuelle NetzgerĂ€te speichern, wie zum Beispiel virtuelle Router oder Routen-Reflektoren. Wir können DNS-Server, NTP, Syslog und alles hinzufĂŒgen, was irgendwie mit dem Netzwerk zu tun hat.

Komponente 2. IP-Raum-Management-System

Ja, auch heute gibt es Gruppen von Menschen, die in einer Excel-Datei die PrÀfixe und IP-Adressen verwalten. Aber der moderne Ansatz ist dennoch eine Datenbank mit einem Frontend auf nginx/apache, API und umfassenden Funktionen zur Verwaltung von IP-Adressen und Netzwerken mit Trennung in VRF.
IPAM – IP-Adressverwaltung.

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

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

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

Es ist klar, dass wir sicherstellen möchten, dass wir, wenn wir eine neue IP-Adresse fĂŒr den Loopback des ToR vergeben, nicht auf das Problem stoßen, dass sie bereits jemandem zugewiesen wurde. Oder dass wir dasselbe PrĂ€fix zweimal an verschiedenen Enden des Netzwerks verwendet haben.
Aber wie hilft das bei der Automatisierung?
Einfach.
Wir fragen im System nach dem PrĂ€fix mit der Rolle Loopbacks, das verfĂŒgbare IP-Adressen zur Zuweisung enthĂ€lt – wenn es gefunden wird, weisen wir die Adresse zu, wenn nicht, bitten wir um die Erstellung eines neuen PrĂ€fixes.
Oder bei der Erstellung der GerÀtkonfiguration können wir aus demselben System erfahren, in welchem VRF das Interface sein sollte.
Und beim Start eines neuen Servers geht das Skript ins System, erfĂ€hrt, welcher Server-Switch, welcher Port und welches Subnetz dem Interface zugewiesen sind – aus diesem wird die Serveradresse zugewiesen.

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

Komponente 3. System zur Beschreibung von Netzwerkdiensten

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

  • Infrastrukturdienstleistungen
  • Kundendienste.

Die ersten sollen die grundlegende KonnektivitÀt und GerÀteverwaltung sicherstellen. Dazu gehören VTY, SNMP, NTP, Syslog, AAA, Routing-Protokolle, CoPP usw.
Die zweiten bieten einen Dienst fĂŒr den Kunden an: MPLS L2/L3VPN, GRE, VXLAN, VLAN, L2TP usw.
Es gibt natĂŒrlich auch GrenzfĂ€lle – wo gehören MPLS LDP, BGP hin? Und auch Routing-Protokolle können fĂŒr Kunden verwendet werden. Aber das ist nicht entscheidend.

Beide Arten von Diensten lassen sich in Konfigurationsprimitive unterteilen:

  • physische und logische Schnittstellen (Tag/Antag, mtu)
  • IP-Adressen und VRF (IP, IPv6, VRF)
  • ACLs und Verkehrspolitiken
  • Protokolle (IGP, BGP, MPLS)
  • Routing-Politiken (PrĂ€fixlisten, Communities, ASN-Filter).
  • Dienstleistungen (SSH, NTP, LLDP, Syslog...)
  • usw.

Wie genau wir das machen werden, weiß ich noch nicht. Wir klĂ€ren das in einem separaten Artikel.

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

Ein wenig nÀher am Leben könnten wir beschreiben, dass
Der Leaf-Switch sollte BGP-Sitzungen mit allen angeschlossenen Spine-Switches haben, die angeschlossenen Netzwerke in den Prozess importieren und nur Netzwerke aus einem bestimmten PrÀfix von Spine-Switches annehmen. Die CoPP IPv6 ND auf 10 pps begrenzen usw.
Die Spine-Switches halten ihrerseits Sitzungen mit allen angeschlossenen Leaf-Switches und fungieren als Route-Reflektoren, wobei sie nur Routen bestimmter LĂ€nge und mit einer bestimmten Community von ihnen annehmen.

Komponente 4. Mechanismus zur Initialisierung des GerÀts

Unter diesem Titel bĂŒndele ich eine Vielzahl von Aktionen, die stattfinden mĂŒssen, damit das GerĂ€t auf den Radaren erscheint und remote erreichbar ist.

  1. Das GerÀt im Inventarsystem erfassen.
  2. Eine IP-Adresse fĂŒr die Verwaltung zuweisen.
  3. Zugriff auf das GerÀt einrichten:
    Hostname, IP-Adresse der Verwaltung, Route zum Verwaltungsnetzwerk, Benutzer, SSH-SchlĂŒssel, Protokolle — telnet/SSH/NETCONF

Es gibt drei AnsÀtze:

  • Alles komplett manuell. Das GerĂ€t wird zum Stand gebracht, wo ein gewöhnlicher Mensch es in die Systeme einpflegt, sich ĂŒber die Konsole verbindet und es konfiguriert. Kann bei kleinen statischen Netzwerken funktionieren.
  • ZTP — Zero Touch Provisioning. Die Hardware kommt an, wird aufgestellt, erhĂ€lt ĂŒber DHCP eine Adresse, geht zu einem speziellen Server und konfiguriert sich selbst.
  • Infrastruktur von Konsolenservern, wo die erste Konfiguration ĂŒber den Konsolenport im automatischen Modus erfolgt.

Über alle drei werden wir in einem separaten Artikel sprechen.

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

Komponente 5. HerstellerunabhÀngiges Konfigurationsmodell

Bisher waren alle Systeme aus unterschiedlichen PuzzlestĂŒcken zusammengesetzt, die eine variable und deklarative Beschreibung dessen geben, was wir im Netzwerk sehen möchten. Doch irgendwann muss man sich mit der Konkretheit auseinandersetzen.
In diesem Stadium werden fĂŒr jedes spezifische GerĂ€t Primitive, Dienste und Variablen in ein Konfigurationsmodell integriert, das die vollstĂ€ndige Konfiguration des spezifischen GerĂ€ts beschreibt, allerdings in einer herstellerunabhĂ€ngigen Weise.
Was bringt dieser Schritt? Warum nicht sofort die Konfiguration des GerÀts erstellen, die man einfach hochladen kann?
TatsÀchlich ermöglicht dies die Lösung von drei Aufgaben:

  1. Sich nicht an ein bestimmtes Interaktionsinterface mit dem GerĂ€t anpassen. Egal ob CLI, NETCONF, RESTCONF, SNMP – das Modell wird gleich sein.
  2. Die Anzahl der Vorlagen/Skripte nicht nach der Anzahl der Anbieter im Netzwerk zu gestalten, und im Falle einer DesignÀnderung dasselbe an mehreren Stellen anzupassen.
  3. Die Konfiguration vom GerÀt (Backup) laden, sie in genau dasselbe Modell zerlegen und die Zielkonfiguration direkt mit der bestehenden vergleichen, um die Differenz zu berechnen und einen Konfigurationspatch vorzubereiten, der nur die Teile Àndert, die notwendig sind, oder um Abweichungen zu identifizieren.

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

Das Ergebnis dieser Phase ist eine anbieterunabhÀngige Konfiguration.

Komponente 6. Anbieter-spezifischer Treiber

Man sollte sich nicht Illusionen hingeben, dass man eines Tages Cisco genau so konfigurieren kann wie Juniper, indem man ihnen einfach identische Aufrufe sendet. Trotz der zunehmenden Beliebtheit von Whiteboxen und der UnterstĂŒtzung fĂŒr NETCONF, RESTCONF und OpenConfig unterscheidet sich der spezifische Inhalt, den diese Protokolle liefern, von Anbieter zu Anbieter, und das ist eines ihrer wettbewerbsfĂ€higen Merkmale, das sie so leicht nicht aufgeben werden.
Das ist ungefÀhr das gleiche wie OpenContrail und OpenStack, die ein RestAPI als ihren NorthBound-Interface haben, aber völlig unterschiedliche Aufrufe erwarten.

Also muss das anbieterunabhĂ€ngige Modell im fĂŒnften Schritt die Form annehmen, die es fĂŒr die Hardware benötigt.
Und hier sind alle Mittel recht (nicht): CLI, NETCONF, RESTCONF, SNMP einfach schrecklich.

Deshalb brauchen wir einen Treiber, der das Ergebnis des vorherigen Schrittes in das erforderliche Format des spezifischen Anbieters ĂŒbertrĂ€gt: eine Menge CLI-Befehle, XML-Struktur.

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

Komponente 7. Mechanismus zur Bereitstellung der Konfiguration auf dem GerÀt

Die Konfiguration haben wir generiert, aber sie muss auch auf die GerĂ€te gebracht werden – und offenbar nicht manuell.
ZunÀchst einmal, stehen wir vor der Frage, welches Transportmittel wir nutzen werden? Die Auswahl ist heutzutage bereits nicht klein:

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

Lassen Sie uns hier die Punkte auf den i setzen. CLI – das ist Legacy. SNMP
 Ähm, Ähm.
RESTCONF – ist noch ein unbekanntes Wesen, REST API wird von fast niemandem unterstĂŒtzt. Daher konzentrieren wir uns im Zyklus auf NETCONF.

TatsĂ€chlich haben wir uns, wie der Leser bereits erkannt hat, zu diesem Zeitpunkt bereits auf die BenutzeroberflĂ€che geeinigt – das Ergebnis des vorherigen Schrittes liegt bereits im Format der gewĂ€hlten BenutzeroberflĂ€che vor.

Zweitens, und welche Werkzeuge werden wir dabei verwenden?
Hier gibt es ebenfalls eine große Auswahl:

  • Ein selbstgeschriebenes Skript oder eine Plattform. Bewaffnen wir uns mit ncclient und asyncIO und machen alles selbst. Was hindert uns daran, das Deploymentsystem von Grund auf neu zu erstellen?
  • Ansible mit seiner umfangreichen Bibliothek von Netzmodulen.
  • Salt, das nur begrenzte Netzwerkfunktionen bietet und mit Napalm verbunden ist.
  • Eigentlich Napalm, der ein paar Anbieter kennt und das war's, auf Wiedersehen.
  • Nornir – ein weiteres Tierchen, das wir in Zukunft aufschneiden werden.

Hier ist noch kein Favorit gewĂ€hlt – wir werden sie testen.

Was ist hier noch wichtig? Die Auswirkungen der Anwendung der Konfiguration.
Ob erfolgreich oder nicht. Ob weiterhin Zugriff auf das GerÀt besteht oder nicht.
Es scheint, dass hier ein Commit mit BestÀtigung und Validierung dessen, was ins GerÀt geladen wurde, helfen könnte.
Das schrĂ€nkt in Kombination mit der richtigen Implementierung von NETCONF den Kreis der geeigneten GerĂ€te erheblich ein – normale Commits unterstĂŒtzen nicht viele Hersteller. Aber das ist einfach eine der Voraussetzungen in RFP. Schließlich macht sich niemand Sorgen, dass kein einziger russischer Anbieter die Bedingung von 32*100GE-Schnittstellen erfĂŒllt. Oder tut er das?

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

Komponente 8. CI/CD

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 es nötig ist, nur die Einstellungen eines einzelnen Switches zu Ă€ndern, werden die Änderungen fĂŒr das gesamte Netzwerk berĂŒcksichtigt. Offensichtlich können sie dabei fĂŒr die meisten Knoten null sein.

Aber, wie bereits weiter oben gesagt, sind wir keine Barbaren, die alles auf einmal in die Produktion schicken.
Die generierte Konfiguration muss zuerst durch die CI/CD-Pipeline laufen.

CI/CD steht fĂŒr Continuous Integration, Continuous Deployment. Dies ist ein Ansatz, bei dem das Team nicht einmal alle sechs Monate ein neues großen Update veröffentlicht, das das alte vollstĂ€ndig ersetzt, sondern regelmĂ€ĂŸig inkrementell (Deployment) neue Funktionen in kleinen Portionen einfĂŒhrt, die jeweils umfassend auf KompatibilitĂ€t, Sicherheit und FunktionalitĂ€t (Integration) getestet werden.

DafĂŒr haben wir ein Versionskontrollsystem, das die Änderungen der Konfiguration ĂŒberwacht, ein Labor, in dem geprĂŒft wird, ob der Kundenservice nicht ausfĂ€llt, ein Überwachungssystem, das diese Tatsache kontrolliert, und der letzte Schritt ist die Bereitstellung der Änderungen im Produktionsnetzwerk.

Mit Ausnahme der Debugging-Commands mĂŒssen alle Änderungen im Netzwerk durch das CI/CD-Pipeline gehen – das ist unser Garant fĂŒr ein ruhiges Leben und eine lange, erfolgreiche Karriere.

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

Komponente 9. Backup- und Abweichungserkennungssystem

Nun, ĂŒber Backups muss man nicht oft reden.
Wir werden sie einfach nach Cron oder bei Änderungen der Konfiguration in Git speichern.

Die zweite HĂ€lfte ist interessanter – jemand muss auf diese Backups achten. In einigen FĂ€llen muss dieser jemand alles wiederherstellen, wie es war, und in anderen FĂ€llen muss er jemandem Bescheid geben, dass etwas nicht stimmt.
Wenn beispielsweise ein neuer Benutzer aufgekommen ist, der nicht in den Variablen vermerkt ist, muss er vom Hack ferngehalten werden. Und wenn eine neue Firewall-Regel hinzugefĂŒgt wurde – besser nicht berĂŒhren, vielleicht hat jemand einfach das Debugging eingeschaltet oder ein neuer Dienst wurde, ungeschickt, nicht gemĂ€ĂŸ den Vorschriften hinzugefĂŒgt, und schon sind die Leute darauf gestoßen.

Von einer gewissen kleinen Delta im Maßstab des gesamten Netzwerks werden wir dennoch nicht entkommen, trotz aller Automatisierungssysteme und der eisernen Hand des Managements. FĂŒr das Debugging der Probleme wird dennoch niemand die Konfiguration in Systeme eingeben. Zumal die Modellierung der Konfiguration dies vielleicht sogar nicht vorschreibt.

Zum Beispiel eine Firewall-Regel zur ZĂ€hlung der Pakete an eine bestimmte IP-Adresse, um ein Problem zu lokalisieren – eine ganz gewöhnliche temporĂ€re Konfiguration.

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

Komponente 10. Überwachungssystem

Zuerst wollte ich das Thema Überwachung nicht behandeln – es ist schließlich umfangreich, umstritten und kompliziert. Aber im Laufe der Dinge stellte sich heraus, dass es ein unverzichtbarer Teil der Automatisierung ist. Und man kann nicht einfach daran vorbeigehen, auch nicht ohne praktische Erfahrungen.

Um die Überlegung fortzusetzen – es ist ein organischer Teil des CI/CD-Prozesses. Nach der Bereitstellung der Konfiguration im Netzwerk mĂŒssen wir in der Lage sein zu bestimmen, ob alles jetzt in Ordnung ist.
Und es geht nicht nur um Grafiken zur Nutzung von Schnittstellen oder die VerfĂŒgbarkeit von Knoten, sondern um subtilere Dinge – das Vorhandensein von notwendigen Routen, Attributen darauf, der Anzahl von BGP-Sitzungen, OSPF-Nachbarn, der End-to-End-FunktionalitĂ€t der darĂŒber liegenden Dienste.
Haben die Syslogs auf dem externen Server aufgehört zu entstehen, oder ist der SFlow-Agent ausgefallen? Sind die Drops in den Warteschlangen gestiegen, oder ist die KonnektivitÀt zwischen irgendeinem PrÀfix-Paar gestört?

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

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

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

Fazit

Als Grundlage wĂ€hlte ich eines der modernen Designs fĂŒr Rechenzentrumsnetze – L3 Clos Fabric mit BGP als Routingprotokoll.
Wir werden unser Netzwerk diesmal auf Juniper aufbauen, da die JunOs-OberflÀche jetzt einfach ist.

Wir erschweren uns das Leben mit der Verwendung ausschließlich von Open-Source-Tools und einem Multivendor-Netz – daher werde ich neben Juniper im Laufe der Zeit noch einen weiteren GlĂŒcklichen auswĂ€hlen.

Der Plan der nĂ€chsten Veröffentlichungen sieht folgendermaßen aus:
Zuerst werde ich ĂŒber virtuelle Netzwerke berichten. Erstens, weil ich das möchte, und zweitens, weil das Design des Infrastruktur-Netzwerks sonst nicht wirklich verstĂ€ndlich sein wird.
Dann geht es richtig um das Design des Netzwerks: Topologie, Routing, Richtlinien.
Wir werden eine Laborumgebung aufbauen.
Wir werden darĂŒber nachdenken und vielleicht das GerĂ€t im Netzwerk in Betrieb nehmen.
Und dann ĂŒber jede Komponente in intimen Details.

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

NĂŒtzliche Links

  • Bevor wir in die Serie eintauchen, ist es sinnvoll, das Buch von Natalia Samoylenko zu lesen, Python fĂŒr Netzwerkingenieure.Und vielleicht auch zu absolvieren. einen Kurs.
  • Es wird auch hilfreich sein, ĂŒber das Design von Rechenzentrums-Fabriken von Facebook zu lesen, verfasst von Peter Lapukhoff. RFC Wie das Overlay-basierte SDN funktioniert, zeigt Ihnen die Dokumentation zur Architektur
  • (frĂŒher Open Contrail). Tungsten Fabric Roman Gorge. FĂŒr Kommentare und Korrekturen.
Danke

Artem Tschernobaj. FĂŒr KDPV.
đŸ„‡Automatisierung fĂŒr die Kleinsten. Nullte Folge. Planung | ProHoster

Quelle: habr.com

60GB SSD 8Gb DDR4