ProHoster > Blog > administracja > Automatyzacja usług sieciowych, czyli jak zbudować wirtualne laboratorium z wykorzystaniem OpenDaylight, Postman i Vrnetlab
Automatyzacja usług sieciowych, czyli jak zbudować wirtualne laboratorium z wykorzystaniem OpenDaylight, Postman i Vrnetlab
W tym artykule pokażę, jak skonfigurować OpenDaylight pracować ze sprzętem sieciowym, a także pokazać, jak z niego korzystać Listonosz i proste KONF.REST żądania, to urządzenie może być kontrolowane. Nie będziemy pracować ze sprzętem, ale zamiast tego wdrożymy małe wirtualne laboratoria z użyciem jednego routera Vrnetlab przez Ubuntu LTS 20.04.
Najpierw pokażę szczegółowe ustawienia na przykładzie routera Jałowiec vMX 20.1R1.11, a następnie porównujemy go z ustawieniem Cisco xRV9000 7.0.2.
Zawartość
Wymagana wiedza
Часть 1: omówić krótko OpenDaylight (dalej ODL), Listonosz и Vrnetlab i dlaczego ich potrzebujemy
Часть 2: opis wirtualnego laboratorium
Часть 3: skonfiguruj OpenDaylight
Часть 4: skonfiguruj Vrnetlab
Часть 5: używając Listonosz podłącz wirtualny router (Jałowiec vMX) Do ODL
Часть 6: pobierz i zmień konfigurację routera za pomocą Listonosz и ODL
Часть 7: dodaj Cisco xRV9000
wniosek
PS
Bibliografia
Wymagana wiedza
Aby artykuł nie zamienił się w arkusz, pominąłem kilka szczegółów technicznych (z linkami do literatury, gdzie można o nich poczytać).
W związku z tym proponuję Ci tematy, które dobrze byłoby (choć prawie niekonieczne) znać przed lekturą:
W naszym przypadku interesuje nas to jako środek do wysyłania żądań REST do OpenDaylight API. Możesz oczywiście wysyłać żądania ręcznie, ale w Postmanie wszystko wygląda bardzo przejrzyście i idealnie pasuje do naszych celów.
Dla tych, którzy chcą kopać: napisano na nim wiele materiałów szkoleniowych (Przykładowo).
Narzędzie do wdrażania wirtualnych routerów w Dockerze
Obsługuje: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR itp.
open Source
Bardzo ciekawy, choć mało znany instrument. W naszym przypadku użyjemy go do uruchomienia Juniper vMX i Cisco xRV9000 na zwykłym Ubuntu 20.04 LTS.
W tym samouczku skonfigurujemy następujący system:
Jak to działa
Jałowiec vMX wznosi się Doker kontener (tzw Vrnetlab) i działa jako najpopularniejszy router wirtualny.
ODL podłączony do routera i umożliwia sterowanie nim.
Listonosz uruchamiamy na osobnej maszynie i za jej pośrednictwem wysyłamy polecenia ODL: aby podłączyć / usunąć router, zmienić konfigurację itp.
Komentarz do urządzenia systemu
Jałowiec vMX и ODL wymagają dość dużo zasobów do ich stabilnej pracy. Tylko jeden vMX prosi o 6 Gb RAM i 4 rdzenie. Dlatego postanowiono przenieść wszystkie „ciężkie” do osobnej maszyny (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). Router oczywiście na nim nie „lata”, ale wydajność wystarcza na małe eksperymenty.
Część 3: Skonfiguruj OpenDaylight
Obecna wersja ODL w chwili pisania tego tekstu to Magnesium SR1
1) Zainstaluj Java Open JDK 11 (dla bardziej szczegółowej instalacji tutaj)
ubuntu:~$ sudo apt install default-jdk
2) Znajdź i pobierz najnowszą wersję ODLstąd
3) Rozpakuj pobrane archiwum
4) Przejdź do wynikowego katalogu
5) Uruchom ./bin/karaf
Na tym etapie ODL powinien się uruchomić i znajdziemy się w konsoli (port 8181 służy do dostępu z zewnątrz, z którego skorzystamy później).
Następnie zainstaluj Funkcje ODLzaprojektowany do pracy z protokołami NETKONF и KONF.REST. Aby to zrobić w konsoli ODL wykonujemy:
Każdy obsługiwany router Vrnetlab, ma własną unikalną procedurę konfiguracji. Gdy Jałowiec vMX musimy tylko wgrać archiwum .tgz z routerem (można je pobrać z Oficjalna strona) do katalogu vmx i uruchom komendę make:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Копируем в эту директорию .tgz архив с роутером
ubuntu:~$ sudo make
Budowanie wizerunku vMX zajmie około 10-20 minut. Pora iść na kawę!
„Dzieje się tak, ponieważ przy pierwszym uruchomieniu VCP (Control Plane) odczytuje plik konfiguracyjny, który określa, czy będzie działał jako VRR VCP w vMX. Wcześniej to uruchamianie odbywało się podczas uruchamiania Dockera, ale oznaczało to, że VCP był zawsze restartowany raz, zanim wirtualny router stał się dostępny, co skutkowało długim czasem rozruchu (około 5 minut) Teraz pierwsze uruchomienie VCP odbywa się podczas budowania obrazu Dockera, a ponieważ kompilacji Dockera nie można uruchomić z - opcja uprzywilejowana, oznacza to, że qemu działa bez akceleracji sprzętowej KVM, przez co kompilacja zajmuje bardzo dużo czasu. Podczas tego procesu wyprowadzanych jest wiele logów, więc przynajmniej widać, co się dzieje. Myślę, że długa kompilacja nie jest takie straszne, bo raz tworzymy obraz, ale uruchamiamy wiele”.
Po tym, jak zobaczysz obraz naszego routera w Doker:
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
Uruchom kontener vr-vmx
Zaczynamy od polecenia:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453c
Następnie możemy zobaczyć informacje o aktywnych kontenerach:
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
Łączenie z routerem
Adres IP interfejsu sieciowego routera można uzyskać za pomocą następującego polecenia:
Domyślny, Vrnetlab tworzy użytkownika na routerze vrnetlab/VR-netlab9.
Łączenie z 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
To kończy konfigurację routera.
Zalecenia dotyczące instalacji routerów różnych producentów można znaleźć pod adresem projekt na githubie w odpowiednich katalogach.
Część 5: Listonosz - podłącz router do OpenDaylight
Instalacja listonosza
Aby zainstalować, po prostu pobierz aplikację stąd.
Podłączanie routera do ODL
stwórzmy PUT wniosek:
Ciąg zapytania:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
Są to wewnętrzne przestrzenie nazw XML (Przestrzeń nazw XML) dla ODL zgodnie z którym tworzy node.
Ponadto odpowiednio nazwa routera to identyfikator węzła, adres routera - gospodarz i tak dalej.
Najciekawsza linia to ostatnia. Katalog-pamięć podręczna schematu tworzy katalog, w którym pobierane są wszystkie pliki Schemat YANG podłączony router. Można je znaleźć w $ODL_ROOT/cache/jun01_cache.
Sprawdzanie połączenia routera
stwórzmy GET wniosek:
Ciąg zapytania:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/
Na karcie Autoryzacja należy ustawić parametr Basic Auth oraz login/hasło: admin/admin.
Wysyłamy. Powinien otrzymać status "200 OK" oraz listę wszystkich obsługiwanych przez urządzenie Schemat YANG:
Komentarz: Aby zobaczyć to drugie, w moim przypadku trzeba było odczekać około 10 minut po egzekucji PUTaż wszystko Schemat YANG rozładować na ODL. Do tego momentu, podczas wykonywania tego GET zapytanie wyświetli następujące informacje:
Na karcie Autoryzacja należy ustawić parametr Basic Auth oraz login/hasło: admin/admin.
Część 6: Zmień konfigurację routera
Pobieranie konfiguracji
stwórzmy GET wniosek:
Ciąg zapytania:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/
Na karcie Autoryzacja należy ustawić parametr Basic Auth oraz login/hasło: admin/admin.
Wysyłamy. Powinien otrzymać status "200 OK" oraz konfigurację routera:
Utwórz konfigurację
Jako przykład utwórzmy następującą konfigurację i zmodyfikujmy ją:
protocols {
bgp {
disable;
shutdown;
}
}
stwórzmy POST wniosek:
Ciąg zapytania:
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
Na karcie Autoryzacja należy ustawić parametr Basic Auth oraz login/hasło: admin/admin.
Na karcie Nagłówki musisz dodać dwa nagłówki:
Zaakceptuj aplikację/xml
Aplikacja typu zawartości/xml
Po wysłaniu powinny otrzymać status „204 Brak treści”
Aby sprawdzić, czy konfiguracja uległa zmianie, możesz użyć poprzedniego zapytania. Ale na przykład stworzymy inny, który będzie wyświetlał informacje tylko o protokołach skonfigurowanych na routerze.
stwórzmy GET wniosek:
Ciąg zapytania:
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
Na karcie Autoryzacja należy ustawić parametr Basic Auth oraz login/hasło: admin/admin.
Po wykonaniu żądania zobaczymy:
Zmień konfigurację
Zmieńmy informacje o protokole BGP. Po naszych działaniach będzie to wyglądało tak:
protocols {
bgp {
disable;
}
}
stwórzmy PUT wniosek:
Ciąg zapytania:
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
Nie zapomnij zmienić nagłówków na karcie Nagłówki na:
Zaakceptuj aplikację/json
Aplikacja typu zawartości/json
Po wysłaniu otrzymamy następujący wynik (Patrzymy na odpowiedź za pomocą GET wniosek):
Część 7: Dodawanie Cisco xRV9000
O co nam chodzi w Juniper, tak, Juniper? Porozmawiajmy o Cisco!
Znalazłem xRV9000 w wersji 7.0.2 (bestia, która potrzebuje 8Gb RAM i 4 rdzenie. Nie jest dostępna za darmo, więc skontaktuj się Cisco) - uruchommy to.
Prowadzenie kontenera
Proces tworzenia kontenera Docker praktycznie nie różni się od Junipera. Podobnie upuszczamy plik .qcow2 z routerem do katalogu odpowiadającego jego nazwie (w tym przypadku xrv9k) i wykonujemy polecenie make docker-image.
Po kilku minutach widzimy, że obraz został utworzony:
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
Uruchamiamy kontener:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fc
Po chwili wyglądamy, że kontener się uruchomił:
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
Połącz przez 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
Podłączanie routera do OpenDaylight
Dodawanie odbywa się w zupełnie podobny sposób z vMX. Musimy tylko zmienić nazwy. PUT wniosek:
Zadzwoń po chwili GET zapytanie, aby sprawdzić, czy wszystko jest połączone:
Zmień konfigurację
Ustawmy następującą konfigurację:
!
router ospf LAB
mpls ldp auto-config
!
stwórzmy POST wniosek:
Ciąg zapytania:
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
Na karcie Autoryzacja należy ustawić parametr Basic Auth oraz login/hasło: admin/admin.
Na karcie Nagłówki musisz dodać dwa nagłówki:
Zaakceptuj aplikację/json
Aplikacja typu zawartości/json
Po jego wykonaniu powinny otrzymać status „204 Brak treści”.
Sprawdźmy, co mamy.
Aby to zrobić, stworzymy GET wniosek:
Ciąg zapytania:
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
Na karcie Autoryzacja należy ustawić parametr Basic Auth oraz login/hasło: admin/admin.
Na karcie Autoryzacja należy ustawić parametr Basic Auth oraz login/hasło: admin/admin.
wniosek
W sumie, jak być może zauważyłeś, procedury łączenia Cisco i Junipera z OpenDaylight nie różnią się - otwiera to dość szerokie pole do kreatywności. Począwszy od zarządzania konfiguracją wszystkich komponentów sieciowych, a skończywszy na stworzeniu własnych polityk sieciowych.
W tym samouczku podałem najprostsze przykłady interakcji ze sprzętem sieciowym za pomocą OpenDaylight. Bez wątpienia zapytania z powyższych przykładów można znacznie bardziej rozbudować i skonfigurować całe usługi jednym kliknięciem myszki - wszystko ogranicza tylko wyobraźnia *
To be continued ...
PS
Jeśli nagle już to wszystko wiesz lub wręcz przeciwnie, przeszedłeś i zatopiłeś się w duszy ODL, to polecam przyjrzeć się rozwijaniu aplikacji na kontrolerze ODL. Możesz zaczynać stąd.