ProHoster > blog > amministrazione > Automazione dei servizi di rete o come costruire un laboratorio virtuale utilizzando OpenDaylight, Postman e Vrnetlab
Automazione dei servizi di rete o come costruire un laboratorio virtuale utilizzando OpenDaylight, Postman e Vrnetlab
In questo articolo, ti mostrerò come impostare ApertoDaylight per lavorare con le apparecchiature di rete e mostrare anche come utilizzare Postino e semplice CONF.REST richieste, questa apparecchiatura può essere controllata. Non lavoreremo con l'hardware, ma implementeremo piccoli laboratori virtuali con un singolo router utilizzando Vrnetlab su Ubuntu LTS 20.04.
Mostrerò prima le impostazioni dettagliate usando l'esempio di un router Ginepro vMX 20.1R1.11, quindi lo confrontiamo con l'impostazione Cisco xRV9000 7.0.2.
contenuto
Conoscenza richiesta
Parte 1: discutere brevemente OpenDaylight (di seguito ODL), Postino и Vrnetlab e perché ne abbiamo bisogno
Parte 2: descrizione del laboratorio virtuale
Parte 3: personalizzare ApertoDaylight
Parte 4: personalizzare Vrnetlab
Parte 5: usando Postino collegare il router virtuale (Ginepro vMX) a ODL
Parte 6: ottenere e modificare la configurazione del router utilizzando Postino и ODL
Parte 7: aggiungere Cisco xRV9000
conclusione
PS
Bibliografia
Conoscenza richiesta
Affinché l'articolo non si trasformi in un foglio, ho omesso alcuni dettagli tecnici (con collegamenti alla letteratura dove puoi leggerli).
A questo proposito vi propongo argomenti che sarebbe bene (ma quasi non necessario) conoscere prima di leggere:
Nel nostro caso, ci interessa come mezzo per inviare richieste REST all'API OpenDaylight. Ovviamente puoi inviare richieste manualmente, ma in Postman tutto sembra molto chiaro e si adatta perfettamente ai nostri scopi.
Per chi vuole scavare: su di esso sono stati scritti molti materiali didattici (per esempio).
Strumento per la distribuzione di router virtuali in Docker
Supporta: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR, ecc.
Open Source
Uno strumento molto interessante ma poco conosciuto. Nel nostro caso, lo useremo per eseguire Juniper vMX e Cisco xRV9000 su un normale Ubuntu 20.04 LTS.
In questo tutorial, configureremo il seguente sistema:
Come funziona
Ginepro vMX sale dentro docker contenitore (con Vrnetlab) e funziona come il router virtuale più comune.
ODL connesso al router e consente di controllarlo.
Postino lanciato su una macchina separata e attraverso di essa inviamo i comandi ODL: per connettere/rimuovere il router, modificare la configurazione, ecc.
Commento sul dispositivo del sistema
Ginepro vMX и ODL richiedono molte risorse per il loro funzionamento stabile. Uno solo vMX richiede 6 GB di RAM e 4 core. Pertanto, è stato deciso di spostare tutti i "pesi massimi" su una macchina separata (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). Il router, ovviamente, non "vola" su di esso, ma le prestazioni sono sufficienti per piccoli esperimenti.
Parte 3: configurare OpenDaylight
L'attuale versione di ODL al momento della stesura di questo documento è Magnesium SR1
1) Installa Java Open JDK 11 (per un'installazione più dettagliata qui)
ubuntu:~$ sudo apt install default-jdk
2) Trova e scarica l'ultima build ODLquindi
3) Decomprimere l'archivio scaricato
4) Vai alla directory risultante
5) Lancio ./bin/karaf
A questo punto ODL dovrebbe avviarsi e ci ritroveremo in console (la porta 8181 serve per l'accesso dall'esterno, che useremo in seguito).
Quindi, installa Caratteristiche dell'ODLprogettato per funzionare con i protocolli CONF.NET и CONF.REST. Per farlo nella console ODL eseguiamo:
Ogni router supportato Vrnetlab, dispone di una propria procedura di configurazione univoca. Quando Ginepro vMX dobbiamo solo caricare l'archivio .tgz con il router (puoi scaricarlo da sito ufficiale) nella directory vmx ed eseguire il comando make:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Копируем в эту директорию .tgz архив с роутером
ubuntu:~$ sudo make
Costruire un'immagine vMX ci vorranno circa 10-20 minuti. È ora di andare a prendere un caffè!
"Questo perché la prima volta che il VCP (Control Plane) viene avviato, legge un file di configurazione che determina se verrà eseguito come un VCP VRR in vMX. In precedenza, questo lancio veniva eseguito durante l'avvio di Docker, ma questo significava che il VCP è stato sempre riavviato una volta prima che il router virtuale diventasse disponibile, con conseguente tempo di avvio lungo (circa 5 minuti) Ora la prima esecuzione del VCP viene eseguita durante la creazione dell'immagine Docker e poiché la build Docker non può essere eseguita con - -privileged, questo significa che qemu funziona senza l'accelerazione hardware KVM e quindi la compilazione richiede molto tempo. Durante questo processo vengono emessi molti log, quindi almeno puoi vedere cosa sta succedendo. Penso che una build lunga sia non così spaventoso perché creiamo un'immagine una volta, ma ne lanciamo molte".
Dopo puoi vedere l'immagine del nostro router docker:
ubuntu:~$ sudo docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
vrnetlab/vr-vmx 20.1R1.11 b1b2369b453c 3 weeks ago 4.43GB
debian stretch 614bb74b620e 7 weeks ago 101MB
Avvia il contenitore vr-vmx
Iniziamo con il comando:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453c
Successivamente, possiamo vedere le informazioni sui contenitori attivi:
ubuntu:~$ sudo docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
120f882c8712 b1b2369b453c "/launch.py" 2 minutes ago Up 2 minutes (unhealthy) 22/tcp, 830/tcp, 5000/tcp, 10000-10099/tcp, 161/udp jun01
Collegamento al router
L'indirizzo IP dell'interfaccia di rete del router può essere ottenuto con il seguente comando:
Di default Vrnetlab crea un utente sul router vrnetlab/VR-netlab9.
Collegamento con ssh:
ubuntu:~$ ssh [email protected]
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
ECDSA key fingerprint is SHA256:g9Sfg/k5qGBTOX96WiCWyoJJO9FxjzXYspRoDPv+C0Y.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.17.0.2' (ECDSA) to the list of known hosts.
Password:
--- JUNOS 20.1R1.11 Kernel 64-bit JNPR-11.0-20200219.fb120e7_buil
vrnetlab> show version
Model: vmx
Junos: 20.1R1.11
Questo completa la configurazione del router.
Suggerimenti per l'installazione di router di vari fornitori sono disponibili all'indirizzo progetto Github nelle rispettive directory.
Parte 5: Postman: connetti il router a OpenDaylight
Installazione del postino
Per installare, basta scaricare l'applicazione quindi.
Collegamento di un router a ODL
Creiamo PUT richiesta:
Stringa della domanda:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
Questi sono spazi dei nomi interni XML (Spazio dei nomi XML) per ODL in base al quale crea node.
Inoltre, rispettivamente, il nome del router è ID-nodo, indirizzo del router - host e così via.
La riga più interessante è l'ultima. Directory della cache dello schema crea una directory in cui vengono scaricati tutti i file Schema YANG router connesso. Puoi trovarli dentro $ODL_ROOT/cache/jun01_cache.
Controllo della connessione del router
Creiamo GET richiesta:
Stringa della domanda:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/
Nella scheda Autorizzazione è necessario impostare il parametro Basic Auth e login/password: admin/admin.
Noi inviamo. Dovrebbe ricevere uno stato di "200 OK" e un elenco di tutti quelli supportati dal dispositivo Schema YANG:
commento: Per vedere quest'ultimo, nel mio caso è stato necessario attendere circa 10 minuti dopo l'esecuzione PUTfino a tutto Schema YANG scarica su ODL. Fino a questo punto, durante l'esecuzione di questo GET query visualizzerà quanto segue:
Nella scheda Autorizzazione è necessario impostare il parametro Basic Auth e login/password: admin/admin.
Parte 6: modificare la configurazione del router
Ottenere la configurazione
Creiamo GET richiesta:
Stringa della domanda:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/
Nella scheda Autorizzazione è necessario impostare il parametro Basic Auth e login/password: admin/admin.
Noi inviamo. Dovrebbe ricevere lo stato "200 OK" e la configurazione del router:
Crea una configurazione
Ad esempio, creiamo la seguente configurazione e modifichiamola:
protocols {
bgp {
disable;
shutdown;
}
}
Creiamo POST richiesta:
Stringa della domanda:
POST http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
Nella scheda Autorizzazione è necessario impostare il parametro Basic Auth e login/password: admin/admin.
Nella scheda Intestazioni, devi aggiungere due intestazioni:
Accetta applicazione/xml
Tipo di contenuto application/xml
Dopo l'invio, dovrebbero ricevere lo stato "204 Nessun contenuto"
Per verificare che la configurazione sia cambiata, puoi utilizzare la query precedente. Ma ad esempio, ne creeremo un altro che visualizzerà solo informazioni sui protocolli configurati sul router.
Creiamo GET richiesta:
Stringa della domanda:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
Nella scheda Autorizzazione è necessario impostare il parametro Basic Auth e login/password: admin/admin.
Dopo aver eseguito la richiesta, vedremo quanto segue:
Cambia la configurazione
Cambiamo le informazioni sul protocollo BGP. Dopo le nostre azioni, sarà simile a questo:
protocols {
bgp {
disable;
}
}
Creiamo PUT richiesta:
Stringa della domanda:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols
Non dimenticare di modificare le intestazioni nella scheda Intestazioni in:
Accetta applicazione/json
Applicazione di tipo di contenuto/json
Dopo l'invio, otterremo il seguente risultato (Osserviamo la risposta utilizzando GET richiesta):
Parte 7: Aggiunta di Cisco xRV9000
Di cosa stiamo parlando Juniper, sì Juniper? Parliamo di Cisco!
Ho trovato xRV9000 versione 7.0.2 (una bestia che necessita di 8Gb di RAM e 4 core. Non è liberamente disponibile, quindi contatta Cisco) - eseguiamolo.
Esecuzione di un contenitore
Il processo di creazione di un contenitore Docker non è praticamente diverso da Juniper. Allo stesso modo, rilasciamo il file .qcow2 con il router nella directory corrispondente al suo nome (in questo caso, xrv9k) ed eseguiamo il comando make docker-image.
Dopo pochi minuti, vediamo che l'immagine è stata creata:
ubuntu:~$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
vrnetlab/vr-xrv9k 7.0.2 54debc7973fc 4 hours ago 1.7GB
vrnetlab/vr-vmx 20.1R1.11 b1b2369b453c 4 weeks ago 4.43GB
debian stretch 614bb74b620e 7 weeks ago 101MB
Iniziamo il contenitore:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fc
Dopo un po', vediamo che il contenitore è partito:
ubuntu:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
058c5ecddae3 54debc7973fc "/launch.py" 4 hours ago Up 4 hours (healthy) 22/tcp, 830/tcp, 5000-5003/tcp, 10000-10099/tcp, 161/udp xrv01
Connettiti tramite ssh:
ubuntu@ubuntu:~$ ssh [email protected]
Password:
RP/0/RP0/CPU0:ios#show version
Mon Jul 6 12:19:28.036 UTC
Cisco IOS XR Software, Version 7.0.2
Copyright (c) 2013-2020 by Cisco Systems, Inc.
Build Information:
Built By : ahoang
Built On : Fri Mar 13 22:27:54 PDT 2020
Built Host : iox-ucs-029
Workspace : /auto/srcarchive15/prod/7.0.2/xrv9k/ws
Version : 7.0.2
Location : /opt/cisco/XR/packages/
Label : 7.0.2
cisco IOS-XRv 9000 () processor
System uptime is 3 hours 22 minutes
Connessione del router a OpenDaylight
L'aggiunta avviene in modo del tutto simile con vMX. Dobbiamo solo cambiare i nomi. PUT richiesta:
Chiama dopo un po' GET query per verificare che tutto sia connesso:
Cambia la configurazione
Impostiamo la seguente configurazione:
!
router ospf LAB
mpls ldp auto-config
!
Creiamo POST richiesta:
Stringa della domanda:
POST http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/xrv01/yang-ext:mount/Cisco-IOS-XR-ipv4-ospf-cfg:ospf
Nella scheda Autorizzazione è necessario impostare il parametro Basic Auth e login/password: admin/admin.
Nella scheda Intestazioni, devi aggiungere due intestazioni:
Accetta applicazione/json
Applicazione di tipo di contenuto/json
Dopo la sua esecuzione, dovrebbero ricevere lo stato "204 Nessun contenuto".
Controlliamo cosa abbiamo.
Per fare questo, creeremo GET richiesta:
Stringa della domanda:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/xrv01/yang-ext:mount/Cisco-IOS-XR-ipv4-ospf-cfg:ospf
Nella scheda Autorizzazione è necessario impostare il parametro Basic Auth e login/password: admin/admin.
Dopo l'esecuzione, dovresti vedere quanto segue:
Per rimuovere la configurazione utilizzare DELETE:
Nella scheda Autorizzazione è necessario impostare il parametro Basic Auth e login/password: admin/admin.
conclusione
In totale, come avrai notato, le procedure per connettere Cisco e Juniper a OpenDaylight non differiscono: questo apre uno spazio piuttosto ampio alla creatività. Partendo dalla gestione della configurazione di tutti i componenti di rete e terminando con la creazione delle proprie policy di rete.
In questo tutorial, ho fornito gli esempi più semplici di come interagire con le apparecchiature di rete utilizzando OpenDaylight. Senza dubbio, le query degli esempi precedenti possono essere rese molto più complesse e configurare interi servizi con un clic del mouse: tutto è limitato solo dalla tua immaginazione *
To be continued ...
PS
Se all'improvviso sai già tutto questo o, al contrario, sei passato e sei sprofondato nell'anima di ODL, allora ti consiglio di guardare allo sviluppo di applicazioni sul controller ODL. Puoi iniziare quindi.