网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

在本文中,我将向您展示如何设置 OpenDaylight 使用网络设备,并展示如何使用 邮差 和简单的 休息会议 请求,可以控制此设备。 我们不会使用硬件,而是使用单个路由器部署小型虚拟实验室 网络实验室 以上 Ubuntu的LTS 20.04.

我将首先使用路由器示例显示详细设置 瞻博网络 vMX 20.1R1.11,然后我们将其与设置进行比较 思科 xRV9000 7.0.2.

内容

  • 所需知识
  • Часть1: 简单讨论 OpenDaylight(以下简称 ODL), 邮差 и 网络实验室 为什么我们需要它们
  • Часть2: 虚拟实验室的描述
  • Часть3: 定制 OpenDaylight
  • Часть4: 定制 网络实验室
  • Часть5: 通过使用 邮差 连接虚拟路由器(瞻博网络 vMX)至 ODL
  • Часть6:使用获取和更改路由器配置 邮差 и ODL
  • Часть7: 添加思科 xRV9000
  • 结论
  • PS
  • 参考书目

所需知识

为了不让文章变成一张纸,我省略了一些技术细节(带有指向文献的链接,您可以在其中阅读它们)。

在这方面,我向您提供在阅读之前最好(但几乎没有必要)了解的主题:

第 1 部分:一些理论

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

  • 一个开放的 SDN 平台,用于管理和自动化各种网络,由 Linux基金会
  • 里面的Java
  • 基于模型驱动的服务抽象级别 (MD-SAL)
  • 使用 YANG 模型为网络设备自动生成 RESTCONF API

网络管理的主要模块。 通过它,我们将与连接的设备进行通信。 通过自己的 API 进行管理。

您可以阅读有关 OpenDaylight 的更多信息 这里.

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

  • API测试工具
  • 简单易用的界面

在我们的例子中,我们感兴趣的是将它作为一种向 OpenDaylight API 发送 REST 请求的方式。 当然,您可以手动发送请求,但在 Postman 中,一切看起来都非常清晰,非常适合我们的目的。

给想挖的:上面写了很多培训资料(例如).

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

  • 在 Docker 中部署虚拟路由器的工具
  • 支持:Cisco XRv、Juniper vMX、Arista vEOS、Nokia VSR 等。
  • 开源

一种非常有趣但鲜为人知的乐器。 在我们的案例中,我们将使用它在常规 Ubuntu 9000 LTS 上运行 Juniper vMX 和 Cisco xRV20.04。

你可以阅读更多关于它的信息 项目页面.

第 2 部分:实验室

在本教程中,我们将设置以下系统:

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

怎么开动这个

  • 瞻博网络 vMX 上升 码头工人 容器(通过 网络实验室) 并充当最常见的虚拟路由器。
  • ODL 连接到路由器并允许您控制它。
  • 邮差 在单独的机器上启动并通过它我们发送命令 ODL:连接/移除路由器,更改配置等。

对系统设备的评论

瞻博网络 vMX и ODL 需要相当多的资源才能稳定运行。 仅一个 虚拟MX 要求 6 Gb 的 RAM 和 4 个内核。 因此,决定将所有“重量级”移动到单独的机器上(Heulett Packard Enterprise MicroServer ProLiant Gen8,Ubuntu 20.04 LTS). 路由器当然不会在其上“飞行”,但性能足以进行小型实验。

第 3 部分:设置 OpenDaylight

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

在撰写本文时 ODL 的当前版本是 Magnesium SR1

1) 安装 Java 开放 JDK 11 (更详细的安装 这里)

ubuntu:~$ sudo apt install default-jdk

2) 查找并下载最新版本 ODL
3)解压缩下载的存档
4)转到结果目录
5) 发射 ./bin/karaf

在这一步 ODL 应该启动,我们会发现自己在控制台中(端口 8181 用于从外部访问,我们稍后会用到)。

接下来,安装 ODL 功能设计用于协议 网络会议 и 休息会议. 在控制台中执行此操作 ODL 我们执行:

opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-all

这是最简单的设置。 ODL 完全的。 (有关详细信息,请参阅 这里).

第 4 部分:设置 Vrnetlab

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

系统准备

安装前 网络实验室 您需要安装其运行所需的软件包。 例如 码头工人, 混帐, 密码:

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

用于安装 网络实验室 从github克隆相应的仓库:

ubuntu:~$ cd ~
ubuntu:~$ git clone https://github.com/plajjan/vrnetlab.git

转到目录 网络实验室:

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

创建路由器的映像

每个支持的路由器 网络实验室, 有其独特的设置程序。 什么时候 瞻博网络 vMX 我们只需要用路由器上传 .tgz 存档(你可以从 官方网站) 到 vmx 目录并运行命令 make:

ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Копируем в эту директорию .tgz архив с роутером
ubuntu:~$ sudo make

构建图像 虚拟MX 大约需要 10-20 分钟。 是时候去喝杯咖啡了!

你问为什么这么久?

笔译 答案 这个问题的作者:

“这是因为第一次启动 VCP(控制平面)时,它会读取一个配置文件,确定它是否会在 vMX 中作为 VRR VCP 运行。以前,此启动是在 Docker 启动期间完成的,但这意味着 VCP在虚拟路由器可用之前总是重新启动一次,导致启动时间很长(大约 5 分钟)现在 VCP 的第一次运行是在构建 Docker 映像期间完成的,并且由于 Docker 构建不能运行 - -privileged选项,这意味着qemu在没有KVM硬件加速的情况下工作,因此构建需要很长时间。在此过程中,输出了很多日志,所以至少你可以看到发生了什么。我认为构建时间很长并不可怕,因为我们创建了一次图像,但我们推出了很多次。”

在你可以看到我们路由器的图像之后 码头工人:

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/VR-netlab9.
与连接 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

这样就完成了路由器设置。

可以在以下位置找到各种供应商路由器的安装建议 github项目 在各自的目录中。

第 5 部分:Postman - 将路由器连接到 OpenDaylight

邮递员安装

要安装,只需下载应用程序 .

将路由器连接到 ODL

让我们创造 PUT 要求:

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

  1. 请求参数:
    PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
  2. 请求正文(正文选项卡):
    <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>
  3. 在授权选项卡上,您必须设置参数 Basic Auth 和登录名/密码:admin/admin。 这是访问 ODL 所必需的:
    网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室
  4. 在标题选项卡上,您需要添加两个标题:
    • 接受申请/xml
    • 内容类型应用程序/xml

我们的要求已经提出。 我们发送。 如果一切配置正确,那么我们应该返回状态“201 Created”:

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

这个请求有什么作用?

我们在里面创建节点 ODL 使用我们要访问的真实路由器的参数。

xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"

这些是内部命名空间 XML (XML名称空间) 为了 ODL 根据它创建节点。

此外,路由器的名称分别是 节点号, 路由器地址 - 主持人 等。

最有趣的是最后一行。 模式缓存目录 创建一个下载所有文件的目录 杨式 连接的路由器。 你可以在...里找到它们 $ODL_ROOT/cache/jun01_cache.

检查路由器的连接

让我们创造 的GET 要求:

  1. 请求参数:
    GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/
  2. 在授权选项卡上,您必须设置参数 Basic Auth 和登录名/密码:admin/admin。

我们发送。 应收到“200 OK”状态和设备支持的所有列表 杨式:

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

备注: 要看到后者,就我而言,执行后需要等待大约 10 分钟 PUT直到所有 阳模式 卸载 ODL. 到目前为止,执行此操作时 的GET 查询将显示以下内容:

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

删除路由器

让我们创造 删除 要求:

  1. 请求参数:
    DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
  2. 在授权选项卡上,您必须设置参数 Basic Auth 和登录名/密码:admin/admin。

第 6 部分:更改路由器配置

获取配置

让我们创造 的GET 要求:

  1. 请求参数:
    GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/
  2. 在授权选项卡上,您必须设置参数 Basic Auth 和登录名/密码:admin/admin。

我们发送。 应收到状态“200 OK”和路由器配置:

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

创建配置

例如,让我们创建以下配置并修改它:

protocols {
    bgp {
        disable;
        shutdown;
    }
}

让我们创造 解决方案&帖子 要求:

  1. 请求参数:
    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
  2. 请求正文(正文选项卡):
    <bgp xmlns="http://yang.juniper.net/junos/conf/protocols">
    <disable/>
    <shutdown>
    </shutdown>
    </bgp>
  3. 在授权选项卡上,您必须设置参数 Basic Auth 和登录名/密码:admin/admin。
  4. 在标题选项卡上,您需要添加两个标题:
    • 接受申请/xml
    • 内容类型应用程序/xml

发送后,他们应该收到状态“204 No Content”

要检查配置是否已更改,您可以使用之前的查询。 但是,例如,我们将创建另一个只显示有关路由器上配置的协议的信息。

让我们创造 的GET 要求:

  1. 请求参数:
    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
  2. 在授权选项卡上,您必须设置参数 Basic Auth 和登录名/密码:admin/admin。

执行请求后,我们将看到以下内容:

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

更改配置

让我们更改有关 BGP 协议的信息。 在我们的操作之后,它将看起来像这样:

protocols {
    bgp {
        disable;
    }
}

让我们创造 PUT 要求:

  1. 请求参数:
    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
  2. 请求正文(正文选项卡):
    <protocols xmlns="http://yang.juniper.net/junos/conf/protocols">
    <bgp>
        <disable/>
    </bgp>
    </protocols>
  3. 在授权选项卡上,您必须设置参数 Basic Auth 和登录名/密码:admin/admin。
  4. 在标题选项卡上,您需要添加两个标题:
    • 接受申请/xml
    • 内容类型应用程序/xml

使用以前的 的GET 请求,我们看到了变化:

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

删除配置

让我们创造 删除 要求:

  1. 请求参数:
    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
  2. 在授权选项卡上,您必须设置参数 Basic Auth 和登录名/密码:admin/admin。

打电话的时候 的GET 请求有关协议的信息,我们将看到以下内容:

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

补充:

为了更改配置,不需要以格式发送请求正文 XML. 这也可以以格式完成 JSON.

为此,例如,在查询中 PUT 要更改配置,请将请求正文替换为:

{
    "junos-conf-protocols:protocols": {
        "bgp": {
            "description" : "Changed in postman" 
        }
    }
}

不要忘记将标题选项卡上的标题更改为:

  • 接受申请/json
  • 内容类型 application/json

发送后,我们会得到如下结果(我们看答案使用 的GET 要求):

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

第 7 部分:添加 Cisco xRV9000

我们对瞻博网络有何看法,是的,瞻博网络? 让我们谈谈思科!
我找到了 xRV9000 版本 7.0.2(需要 8Gb RAM 和 4 核的野兽。它不是免费提供的,所以联系 思科) - 让我们运行它。

运行容器

创建 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 [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

将路由器连接到 OpenDaylight

添加以与 vMX 完全相似的方式发生。 我们只需要更改名称。
PUT 要求:
网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

过一会再打电话 的GET 查询以检查一切是否已连接:
网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

更改配置

让我们设置以下配置:

!
router ospf LAB
 mpls ldp auto-config
!

让我们创造 解决方案&帖子 要求:

  1. 请求参数:
    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
  2. 请求正文(正文选项卡):
    {
        "processes": {
            "process": [
                {
                    "process-name": "LAB",
                    "default-vrf": {
                        "process-scope": {
                            "ldp-auto-config": [
                                null
                            ]
                        }
                    }
                }
            ]
        }
    }
  3. 在授权选项卡上,您必须设置参数 Basic Auth 和登录名/密码:admin/admin。
  4. 在标题选项卡上,您需要添加两个标题:
    • 接受申请/json
    • 内容类型 application/json

执行后,他们应该收到状态“204 No Content”。

让我们检查一下我们得到了什么。
为此,我们将创建 的GET 要求:

  1. 请求参数:
    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
  2. 在授权选项卡上,您必须设置参数 Basic Auth 和登录名/密码:admin/admin。

执行后,您应该看到以下内容:

网络服务自动化或如何使用 OpenDaylight、Postman 和 Vrnetlab 构建虚拟实验室

要删除配置使用 删除:

  1. 请求参数:
    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
  2. 在授权选项卡上,您必须设置参数 Basic Auth 和登录名/密码:admin/admin。

结论

总的来说,正如您可能已经注意到的那样,将 Cisco 和 Juniper 连接到 OpenDaylight 的过程并没有什么不同——这为创造力开辟了相当广阔的空间。 从所有网络组件的配置管理开始,到创建您自己的网络策略结束。
在本教程中,我给出了如何使用 OpenDaylight 与网络设备交互的最简单示例。 毫无疑问,上述示例中的查询可以变得更加复杂,只需单击鼠标即可设置整个服务 - 一切只受您的想象力限制 *

待续...

PS

如果您突然间已经了解了这一切,或者相反,已经深入了解了 ODL 的灵魂,那么我建议您着眼于在 ODL 控制器上开发应用程序。 你可以开始了 .

实验成功!

参考文献

  1. Vrnetlab:使用 KVM 和 Docker 模拟网络 /布赖恩·林克莱特
  2. OpenDaylight 食谱 / Mathieu Lemay、Alexis de Talhouet 等
  3. YANG 的网络可编程性 / Benoît Claise、Loe Clarke、Jan Lindblad
  4. 学习 XML,第二版 / Erik T. Ray
  5. 有效的 DevOps / Jennifer Davis, Ryn Daniels

来源: habr.com

添加评论