この記事では、ネットワーク機器と連携するようにOpenDaylightを構成する方法と、Postmanおよび単純なRESTCONF要求を使用してこの機器を制御する方法を示します。ハードウェアでは作業しませんが、Ubuntu 20.04 LTSの上にVrnetlabを使用して、単一のルーターを備えた小さな仮想ラボを展開します。
最初にJuniper vMX 20.1R1.11ルーターの例を使用して詳細な構成を示し、次にCisco xRV9000 7.0.2構成と比較します。
コンテンツ
- 必要な知識
- 1: OpenDaylight ( ODL), Postman Vrnetlab
- 2:
- 3: OpenDaylight
- 4: Vrnetlab
- 5: Postman (Juniper vMX) ODL
- 6: Postman ODL
- 7: Cisco xRV9000
- P.S.
, , ( , ).
, , ( ) :
1:
- SDN , Linux Foundation
- Java inside
- Model-Driven Service Abstraction Level (MD-SAL)
- YANG RESTCONF API
. . API.
- API
REST API OpenDaylight'. , , , Postman .
- Docker'
- : Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR .
- Open Source
, . Juniper vMX Cisco xRV9000 Ubuntu 20.04 LTS.
2:
:
- Juniper vMX Docker ( Vrnetlab) .
- ODL .
- Postman ODL: / , .
Juniper vMX ODL . vMX 6 Gb 4 . "" (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). , , "", .
3: OpenDaylight
ODL — Magnesium SR1
ubuntu:~$ sudo apt install default-jdk
ODL ( 8181, ).
ODL Features, NETCONF RESTCONF. ODL :
opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-all
4: Vrnetlab
Vrnetlab . Docker, git, sshpass:
ubuntu:~$ sudo apt update
ubuntu:~$ sudo apt -y install python3-bs4 sshpass make
ubuntu:~$ sudo apt -y install git
ubuntu:~$ sudo apt install -y \
apt-transport-https ca-certificates \
curl gnupg-agent software-properties-common
ubuntu:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
ubuntu:~$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
ubuntu:~$ sudo apt update
ubuntu:~$ sudo apt install -y docker-ce docker-ce-cli containerd.io
Vrnetlab
Vrnetlab github:
ubuntu:~$ cd ~
ubuntu:~$ git clone https://github.com/plajjan/vrnetlab.git
vrnetlab:
ubuntu:~$ cd ~/vrnetlab
, . , :
ubuntu:~/vrnetlab$ ls
CODE_OF_CONDUCT.md config-engine-lite openwrt vr-bgp
CONTRIBUTING.md csr routeros vr-xcon
LICENSE git-lfs-repo.sh sros vrnetlab.sh
Makefile makefile-install.include topology-machine vrp
README.md makefile-sanity.include veos vsr1000
ci-builder-image makefile.include vmx xrv
common nxos vqfx xrv9k
image
, Vrnetlab, . Juniper vMX .tgz ( ) vmx make
:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # .tgz
ubuntu:~$ sudo make
vMX 10-20 . !
image 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
vr-vmx
:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453c
:
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
IP- :
ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2
, Vrnetlab vrnetlab/VR-netlab9.
ssh
:
ubuntu:~$ ssh vrnetlab@172.17.0.2
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
.
github .
5: Postman — OpenDaylight
Postman
ODL
PUT :
- :
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
- ( Body):
<node xmlns="urn:TBD:params:xml:ns:yang:network-topology"> <node-id>jun01</node-id> <host xmlns="urn:opendaylight:netconf-node-topology">172.17.0.2</host> <port xmlns="urn:opendaylight:netconf-node-topology">22</port> <username xmlns="urn:opendaylight:netconf-node-topology">vrnetlab</username> <password xmlns="urn:opendaylight:netconf-node-topology">VR-netlab9</password> <tcp-only xmlns="urn:opendaylight:netconf-node-topology">false</tcp-only> <schema-cache-directory xmlns="urn:opendaylight:netconf-node-topology">jun01_cache</schema-cache-directory> </node>
- Authorization
Basic Auth
/: admin/admin. ODL:
- Headers :
- Accept application/xml
- Content-Type application/xml
. . , "201 Created":
node ODL , .
xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"
XML (XML namespace) ODL node.
, , — node-id, — host .
— . Schema-cache-directory , YANG Schema . $ODL_ROOT/cache/jun01_cache
.
GET :
- :
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/
- Authorization
Basic Auth
/: admin/admin.
. "200 OK" YANG Schema:
: , 10 PUT, YANG shema ODL. GET :
DELETE :
- :
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
- Authorization
Basic Auth
/: admin/admin.
6:
GET :
- :
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/
- Authorization
Basic Auth
/: admin/admin.
. "200 OK" :
:
protocols {
bgp {
disable;
shutdown;
}
}
POST :
- :
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
- ( Body):
<bgp xmlns="http://yang.juniper.net/junos/conf/protocols"> <disable/> <shutdown> </shutdown> </bgp>
- Authorization
Basic Auth
/: admin/admin. - Headers :
- Accept application/xml
- Content-Type application/xml
"204 No Content"
, , . , .
GET :
- :
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
- Authorization
Basic Auth
/: admin/admin.
:
BGP. :
protocols {
bgp {
disable;
}
}
PUT :
- :
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
- ( Body):
<protocols xmlns="http://yang.juniper.net/junos/conf/protocols"> <bgp> <disable/> </bgp> </protocols>
- Authorization
Basic Auth
/: admin/admin. - Headers :
- Accept application/xml
- Content-Type application/xml
GET , :
DELETE :
- :
DELETE 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
- Authorization
Basic Auth
/: admin/admin.
GET :
:
, , XML. JSON.
, , PUT :
{
"junos-conf-protocols:protocols": {
"bgp": {
"description" : "Changed in postman"
}
}
}
Headers :
- Accept application/json
- Content-Type application/json
( GET ):
7: Cisco xRV9000
, ? Cisco !
xRV9000 7.0.2 (, 8Gb RAM 4 . , Cisco) — .
Docker Juniper. , .qcow2 , , ( xrv9k) make docker-image
.
, :
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
:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fc
, :
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
ssh:
ubuntu@ubuntu:~$ ssh vrnetlab@172.17.0.2
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
OpenDaylight
vMX . .
PUT :
GET , , :
:
!
router ospf LAB
mpls ldp auto-config
!
POST :
- :
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
- ( Body):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } }
- Authorization
Basic Auth
/: admin/admin. - Headers :
- Accept application/json
- Content-Type application/json
"204 No Content".
, .
GET :
- :
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
- Authorization
Basic Auth
/: admin/admin.
:
DELETE:
- :
DELETE 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
- Authorization
Basic Auth
/: admin/admin.
, , Cisco Juniper OpenDaylight — . .
, OpenDaylight. , — *
...
P.S.
!
- Vrnetlab: Emulate networks using KVM and Docker / Brian Linkletter
- OpenDaylight Cookbook / Mathieu Lemay, Alexis de Talhouet, Et al
- Network Programmability with YANG / Benoît Claise, Loe Clarke, Jan Lindblad
- Learning XML, Second Edition / Erik T. Ray
- Effective DevOps / Jennifer Davis, Ryn Daniels