Automazione della rete. Un caso della propria vita

Ehi Habr!

In questo articolo vorremmo parlare di automazione delle infrastrutture di rete. Verrà presentato un diagramma di funzionamento della rete che opera in una piccola ma molto orgogliosa azienda. Tutte le corrispondenze con apparecchiature di rete reali sono casuali. Esamineremo un caso accaduto in questa rete, che avrebbe potuto portare alla chiusura dell'attività per un lungo periodo e a gravi perdite finanziarie. La soluzione a questo caso si adatta molto bene al concetto di “Automazione dell'infrastruttura di rete”. Utilizzando strumenti di automazione, mostreremo come risolvere efficacemente problemi complessi in breve tempo, e rifletteremo sul perché questi problemi dovrebbero essere risolti in questo modo e non altrimenti (tramite la console).

Negazione di responsabilità

I nostri principali strumenti per l'automazione sono Ansible (come strumento di automazione) e Git (come repository per i playbook Ansible). Vorrei subito riservare che questo non sia un articolo introduttivo, in cui parliamo della logica di Ansible o Git e spieghiamo le cose di base (ad esempio, cosa sono i moduli roletaski, i file di inventario, le variabili in Ansible o cosa succede quando inserisci i comandi git push o git commit). Questa storia non riguarda come puoi esercitarti con Ansible e configurare NTP o SMTP sulla tua attrezzatura. Questa è una storia su come risolvere rapidamente e preferibilmente un problema di rete senza errori. È inoltre consigliabile avere una buona conoscenza di come funziona la rete, in particolare quale sia lo stack di protocolli TCP/IP, OSPF, BGP. Elimineremo dall’equazione anche la scelta di Ansible e Git. Se devi ancora scegliere una soluzione specifica, ti consigliamo vivamente di leggere il libro “Programmabilità e automazione della rete. Competenze per l'ingegnere di rete di prossima generazione" di Jason Edelman, Scott S. Lowe e Matt Oswalt.

Adesso al punto.

Formulazione del problema

Immaginiamo una situazione: alle 3 del mattino, dormi profondamente e sogni. Telefonata. Il direttore tecnico chiama:

- si?
— ###, ####, #####, il cluster del firewall è caduto e non si rialza!!!
Ti strofini gli occhi, cercando di comprendere cosa sta succedendo e di immaginare come ciò possa accadere. Al telefono si sente strappare i capelli al direttore, che chiede di richiamare perché il generale lo chiama in seconda linea.

Mezz'ora dopo, hai raccolto le prime note introduttive dal turno di servizio, hai svegliato tutti quelli che potevano essere svegliati. Di conseguenza, il direttore tecnico non ha mentito, tutto è così com'è, il principale gruppo di firewall è caduto e nessun movimento elementare del corpo lo ha riportato in sé. Tutti i servizi offerti dall'azienda non funzionano.

Scegli un problema secondo i tuoi gusti, ognuno ricorderà qualcosa di diverso. Ad esempio, dopo un aggiornamento notturno in assenza di carico pesante, tutto ha funzionato bene e tutti sono andati a letto felici. Il traffico ha iniziato a fluire e i buffer dell'interfaccia hanno iniziato a traboccare a causa di un bug nel driver della scheda di rete.

Jackie Chan può descrivere bene la situazione.

Automazione della rete. Un caso della propria vita

Grazie, Jackie.

Non è una situazione molto piacevole, vero?

Lasciamo per un po' il fratello della nostra rete con i suoi tristi pensieri.

Discutiamo di come si svilupperanno ulteriormente gli eventi.

Suggeriamo il seguente ordine di presentazione del materiale

  1. Diamo un'occhiata al diagramma di rete e vediamo come funziona;
  2. Descriveremo come trasferiamo le impostazioni da un router all'altro utilizzando Ansible;
  3. Parliamo di automazione dell'infrastruttura IT nel suo insieme.

Schema e descrizione della rete

Guida

Automazione della rete. Un caso della propria vita

Consideriamo lo schema logico della nostra organizzazione. Non nomineremo produttori di apparecchiature specifiche; ai fini di questo articolo non ha importanza (Il lettore attento indovinerà che tipo di attrezzatura viene utilizzata). Questo è solo uno dei vantaggi di lavorare con Ansible; durante la configurazione, generalmente non ci interessa che tipo di attrezzatura sia. Giusto per capire, si tratta di apparecchiature di noti fornitori, come Cisco, Juniper, Check Point, Fortinet, Palo Alto... puoi sostituire la tua opzione.

Abbiamo due compiti principali per spostare il traffico:

  1. Garantire la pubblicazione dei nostri servizi, che costituiscono l'attività dell'azienda;
  2. Fornire la comunicazione con filiali, un data center remoto e organizzazioni di terze parti (partner e clienti), nonché l'accesso delle filiali a Internet tramite l'ufficio centrale.

Partiamo dagli elementi base:

  1. Due router di confine (BRD-01, BRD-02);
  2. Cluster Firewall (FW-CLUSTER);
  3. Interruttore principale (L3-CORE);
  4. Un router che diventerà un'ancora di salvezza (man mano che risolveremo il problema, trasferiremo le impostazioni di rete da FW-CLUSTER a EMERGENCY) (EMERGENCY);
  5. Switch per la gestione dell'infrastruttura di rete (L2-MGMT);
  6. Macchina virtuale con Git e Ansible (VM-AUTOMATION);
  7. Un laptop su cui vengono eseguiti test e sviluppo di playbook per Ansible (Laptop-Automation).

La rete è configurata con un protocollo di routing OSPF dinamico con le seguenti aree:

  • Area 0 – area che comprende i router responsabili dello spostamento del traffico nella zona EXCHANGE;
  • Area 1 – area che comprende i router responsabili del funzionamento dei servizi aziendali;
  • Area 2 – area che comprende i router responsabili della gestione dell'instradamento del traffico;
  • Area N – aree delle reti di filiali.

Sui router di confine viene creato un router virtuale (VRF-INTERNET), sul quale è installato eBGP full view con il corrispondente AS assegnato. iBGP è configurato tra VRF. L'azienda dispone di un pool di indirizzi bianchi che vengono pubblicati su questi VRF-INTERNET. Alcuni degli indirizzi bianchi vengono instradati direttamente al FW-CLUSTER (indirizzi su cui operano i servizi aziendali), altri vengono instradati attraverso la zona EXCHANGE (servizi interni all'azienda che richiedono indirizzi IP esterni e indirizzi NAT esterni per gli uffici). Successivamente, il traffico va ai router virtuali creati su L3-CORE con indirizzi bianchi e grigi (zone di sicurezza).

La rete di Gestione utilizza switch dedicati e rappresenta una rete fisicamente dedicata. La rete di gestione è inoltre suddivisa in zone di sicurezza.
Il router EMERGENCY duplica fisicamente e logicamente il FW-CLUSTER. Tutte le interfacce su di esso sono disabilitate tranne quelle che guardano alla rete di gestione.

Automazione e sua descrizione

Abbiamo capito come funziona la rete. Ora diamo uno sguardo passo passo a cosa faremo per trasferire il traffico da FW-CLUSTER a EMERGENCY:

  1. Disabilitiamo le interfacce sul core switch (L3-CORE) che lo collegano al FW-CLUSTER;
  2. Disabilitiamo le interfacce sullo switch del kernel L2-MGMT che lo collegano al FW-CLUSTER;
  3. Configuriamo il router EMERGENCY (per impostazione predefinita, tutte le interfacce su di esso sono disabilitate, tranne quelle associate a L2-MGMT):

  • Abilitiamo le interfacce su EMERGENCY;
  • Configuriamo l'indirizzo IP esterno (per NAT) che era sul FW-Cluster;
  • Generiamo richieste gARP in modo che gli indirizzi poppy nelle tabelle arp L3-CORE vengano modificati da FW-Cluster a EMERGENCY;
  • Registriamo il percorso predefinito come statico su BRD-01, BRD-02;
  • Creare regole NAT;
  • Passare all'area 1 dell'OSPF di EMERGENZA;
  • Passare all'area 2 dell'OSPF di EMERGENZA;
  • Modifichiamo il costo delle corse in Area 1 a 10;
  • Modifichiamo il costo del percorso predefinito nell'Area 1 a 10;
  • Modifichiamo gli indirizzi IP associati a L2-MGMT (a quelli che erano su FW-CLUSTER);
  • Generiamo richieste gARP in modo che gli indirizzi poppy nelle tabelle arp L2-MGMT vengano modificati da FW-CLUSTER a EMERGENCY.

Ancora una volta torniamo alla formulazione originaria del problema. Le tre del mattino, uno stress enorme, un errore in qualsiasi momento possono portare a nuovi problemi. Pronto a digitare comandi tramite la CLI? SÌ? Ok, almeno vai a sciacquarti la faccia, bevi un caffè e raccogli la tua forza di volontà.
Bruce, per favore aiuta i ragazzi.

Automazione della rete. Un caso della propria vita

Bene, continuiamo a migliorare la nostra automazione.
Di seguito è riportato un diagramma di come funziona il playbook in termini Ansible. Questo schema riflette ciò che abbiamo descritto poco sopra, è solo un’implementazione specifica in Ansible.
Automazione della rete. Un caso della propria vita

In questa fase, abbiamo capito cosa bisogna fare, sviluppato un playbook, condotto test e ora siamo pronti a lanciarlo.

Un'altra piccola digressione lirica. La semplicità della storia non deve trarre in inganno. Il processo di scrittura dei playbook non è stato così semplice e veloce come potrebbe sembrare. I test sono durati parecchio tempo, è stato creato uno stand virtuale, la soluzione è stata testata più volte, sono stati effettuati circa 100 test.

Lanciamoci... C'è la sensazione che tutto stia accadendo molto lentamente, c'è un errore da qualche parte, qualcosa alla fine non funzionerà. La sensazione di lanciarsi con il paracadute, ma il paracadute non vuole aprirsi subito... è normale.

Successivamente, leggiamo il risultato delle operazioni eseguite dal playbook Ansible (gli indirizzi IP sono stati sostituiti per motivi di segretezza):

[xxx@emergency ansible]$ ansible-playbook -i /etc/ansible/inventories/prod_inventory.ini /etc/ansible/playbooks/emergency_on.yml 

PLAY [------->Emergency on VCF] ********************************************************

TASK [vcf_junos_emergency_on : Disable PROD interfaces to FW-CLUSTER] *********************
changed: [vcf]

PLAY [------->Emergency on MGMT-CORE] ************************************************

TASK [mgmt_junos_emergency_on : Disable MGMT interfaces to FW-CLUSTER] ******************
changed: [m9-03-sw-03-mgmt-core]

PLAY [------->Emergency on] ****************************************************

TASK [mk_routeros_emergency_on : Enable EXT-INTERNET interface] **************************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Generate gARP for EXT-INTERNET interface] ****************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Enable static default route to EXT-INTERNET] ****************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Change NAT rule to EXT-INTERNET interface] ****************
changed: [m9-04-r-04] => (item=12)
changed: [m9-04-r-04] => (item=14)
changed: [m9-04-r-04] => (item=15)
changed: [m9-04-r-04] => (item=16)
changed: [m9-04-r-04] => (item=17)

TASK [mk_routeros_emergency_on : Enable OSPF Area 1 PROD] ******************************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Enable OSPF Area 2 MGMT] *****************************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Change OSPF Area 1 interfaces costs to 10] *****************
changed: [m9-04-r-04] => (item=VLAN-1001)
changed: [m9-04-r-04] => (item=VLAN-1002)
changed: [m9-04-r-04] => (item=VLAN-1003)
changed: [m9-04-r-04] => (item=VLAN-1004)
changed: [m9-04-r-04] => (item=VLAN-1005)
changed: [m9-04-r-04] => (item=VLAN-1006)
changed: [m9-04-r-04] => (item=VLAN-1007)
changed: [m9-04-r-04] => (item=VLAN-1008)
changed: [m9-04-r-04] => (item=VLAN-1009)
changed: [m9-04-r-04] => (item=VLAN-1010)
changed: [m9-04-r-04] => (item=VLAN-1011)
changed: [m9-04-r-04] => (item=VLAN-1012)
changed: [m9-04-r-04] => (item=VLAN-1013)
changed: [m9-04-r-04] => (item=VLAN-1100)

TASK [mk_routeros_emergency_on : Change OSPF area1 default cost for to 10] ******************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Change MGMT interfaces ip addresses] ********************
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n.254', u'name': u'VLAN-803'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+1.254', u'name': u'VLAN-805'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+2.254', u'name': u'VLAN-807'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+3.254', u'name': u'VLAN-809'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+4.254', u'name': u'VLAN-820'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+5.254', u'name': u'VLAN-822'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+6.254', u'name': u'VLAN-823'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+7.254', u'name': u'VLAN-824'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+8.254', u'name': u'VLAN-850'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+9.254', u'name': u'VLAN-851'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+10.254', u'name': u'VLAN-852'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+11.254', u'name': u'VLAN-853'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+12.254', u'name': u'VLAN-870'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+13.254', u'name': u'VLAN-898'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+14.254', u'name': u'VLAN-899'})

TASK [mk_routeros_emergency_on : Generate gARPs for MGMT interfaces] *********************
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n.254', u'name': u'VLAN-803'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+1.254', u'name': u'VLAN-805'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+2.254', u'name': u'VLAN-807'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+3.254', u'name': u'VLAN-809'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+4.254', u'name': u'VLAN-820'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+5.254', u'name': u'VLAN-822'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+6.254', u'name': u'VLAN-823'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+7.254', u'name': u'VLAN-824'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+8.254', u'name': u'VLAN-850'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+9.254', u'name': u'VLAN-851'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+10.254', u'name': u'VLAN-852'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+11.254', u'name': u'VLAN-853'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+12.254', u'name': u'VLAN-870'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+13.254', u'name': u'VLAN-898'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+14.254', u'name': u'VLAN-899'})

PLAY RECAP ************************************************************************

Fatto!

In effetti, non è del tutto pronto, non dimenticare la convergenza dei protocolli di routing dinamico e il caricamento di un gran numero di percorsi nel FIB. Non possiamo influenzarlo in alcun modo. Aspettiamo. Ha funzionato. Ora è pronto.

E nel villaggio di Vilabajo (che non vuole automatizzare la configurazione della rete) continuano a lavare i piatti. Bruce (certamente, già diverso, ma non per questo meno interessante) sta cercando di capire quanta più riconfigurazione manuale dell'attrezzatura avrà luogo.

Automazione della rete. Un caso della propria vita

Vorrei soffermarmi anche su un punto importante. Come possiamo recuperare tutto? Dopo qualche tempo riporteremo in vita il nostro FW-CLUSTER. Questa è l'apparecchiatura principale, non quella di backup, su cui deve funzionare la rete.

Pensi che i networker stiano iniziando a esaurirsi? Il direttore tecnico sentirà mille argomenti sul perché questo non si dovrebbe fare, perché questo si potrà fare dopo. Sfortunatamente, è così che funziona la rete a partire da un mucchio di toppe, pezzi, resti del suo antico lusso. Risulta essere una trapunta patchwork. Il nostro compito in generale, non in questa situazione specifica, ma in generale in linea di principio, come specialisti IT, è ricondurre il lavoro della rete alla bella parola inglese “coerenza”, è molto sfaccettata, può essere tradotta come: coerenza , coerenza, logica, coerenza, sistematicità, comparabilità, coerenza. E' tutto su di lui. Solo in questo stato la rete è gestibile, capiamo chiaramente cosa funziona e come, capiamo chiaramente cosa bisogna cambiare, se necessario, sappiamo chiaramente dove cercare se sorgono problemi. E solo in una rete del genere puoi eseguire trucchi come quelli che abbiamo appena descritto.

In realtà, è stato preparato un altro playbook, che ha riportato le impostazioni al loro stato originale. La logica del suo funzionamento è la stessa (è importante ricordare che l'ordine dei compiti è molto importante), per non allungare un articolo già piuttosto lungo, abbiamo deciso di non pubblicare l'elenco dell'esecuzione del playbook. Dopo aver eseguito tali esercizi, ti sentirai molto più calmo e fiducioso in futuro, inoltre, tutte le stampelle che hai accumulato lì si riveleranno immediatamente.

Chiunque può scriverci e ricevere i sorgenti di tutto il codice scritto, insieme a tutti i libri di gioco. Contatti nel profilo.

risultati

A nostro avviso, i processi che possono essere automatizzati non si sono ancora cristallizzati. Sulla base di ciò che abbiamo riscontrato e di ciò che stanno discutendo i nostri colleghi occidentali, finora sono visibili i seguenti temi:

  • Provisioning del dispositivo;
  • Raccolta dati;
  • Segnalazione;
  • Risoluzione dei problemi;
  • Conformità.

Se c'è interesse, possiamo continuare la discussione su uno degli argomenti indicati.

Vorrei anche parlare un po’ dell’automazione. Cosa dovrebbe essere nella nostra comprensione:

  • Il sistema deve vivere senza una persona, pur essendo migliorato da una persona. Il sistema non dovrebbe dipendere dagli esseri umani;
  • L'operazione deve essere eseguita da esperti. Non esiste una classe di specialisti che svolga compiti di routine. Ci sono esperti che hanno automatizzato l'intera routine e risolvono solo problemi complessi;
  • Le attività standard di routine vengono eseguite automaticamente “con il semplice tocco di un pulsante”, senza sprechi di risorse. Il risultato di tali compiti è sempre prevedibile e comprensibile.

E cosa dovrebbero portare questi punti:

  • Trasparenza dell'infrastruttura IT (meno rischi di funzionamento, modernizzazione, implementazione. Meno tempi di inattività all'anno);
  • La capacità di pianificare le risorse IT (sistema di pianificazione della capacità: puoi vedere quanto viene consumato, puoi vedere quante risorse sono necessarie in un unico sistema e non tramite lettere e visite ai dipartimenti superiori);
  • Possibilità di ridurre il numero del personale IT.

Autori dell'articolo: Alexander Chelovekov (CCIE RS, CCIE SP) e Pavel Kirillov. Siamo interessati a discutere e proporre soluzioni sul tema dell'automazione dell'infrastruttura IT.


Fonte: habr.com

Aggiungi un commento