網絡服務自動化或如何使用 OpenDaylight、Postman 和 Vrnetlab 構建虛擬實驗室

網絡服務自動化或如何使用 OpenDaylight、Postman 和 Vrnetlab 構建虛擬實驗室

在本文中,我將向您展示如何設置 日光開放 使用網絡設備,並展示如何使用 郵差 和簡單的 休息會議 請求,可以控制此設備。 我們不會使用硬件,而是使用單個路由器部署小型虛擬實驗室 虛擬實驗室 以上 Ubuntu的LTS 20.04.

我將首先使用路由器示例顯示詳細設置 瞻博網絡 vMX 20.1R1.11,然後我們將其與設置進行比較 思科 xRV9000 7.0.2.

Содержание

  • 所需知識
  • Часть1: 簡單討論 OpenDaylight(以下簡稱 低密度脂蛋白), 郵差 и 虛擬實驗室 為什麼我們需要它們
  • Часть2: 虛擬實驗室的描述
  • Часть3: 配置 日光開放
  • Часть4: 配置 虛擬實驗室
  • Часть5: 通過使用 郵差 連接虛擬路由器(瞻博網絡 vMX) 至 低密度脂蛋白
  • Часть6:使用獲取和更改路由器配置 郵差 и 低密度脂蛋白
  • Часть7: 添加思科 xRV9000
  • 結論
  • 聚苯乙烯
  • 參考書目

所需知識

為了不讓文章變成一張紙,我省略了一些技術細節(帶有指向文獻的鏈接,您可以在其中閱讀它們)。

在這方面,我向您提供在閱讀之前最好(但幾乎沒有必要)了解的主題:

第 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 上升 碼頭工人 容器(通過 虛擬實驗室) 並充當最常見的虛擬路由器。
  • 低密度脂蛋白 連接到路由器並允許您控制它。
  • 郵差 在單獨的機器上啟動並通過它我們發送命令 低密度脂蛋白:連接/移除路由器,更改配置等。

對系統設備的評論

瞻博網絡 vMX и 低密度脂蛋白 需要相當多的資源才能穩定運行。 僅一個 虛擬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) 查找並下載最新版本 低密度脂蛋白
3)解壓縮下載的存檔
4)轉到結果目錄
5) 發射 ./bin/karaf

在這一步 低密度脂蛋白 應該啟動,我們會發現自己在控制台中(端口 8181 用於從外部訪問,我們稍後會用到)。

接下來,安裝 ODL 功能設計用於協議 網絡會議 и 休息會議. 在控制台中執行此操作 低密度脂蛋白 我們執行:

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

這是最簡單的設置。 低密度脂蛋白 完全的。 (有關詳細信息,請參閱 這裡).

第 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 構建虛擬實驗室

這個請求有什麼作用?

我們在裡面創建節點 低密度脂蛋白 使用我們要訪問的真實路由器的參數。

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

這些是內部命名空間 XML的 (XML命名空間) 為了 低密度脂蛋白 根據它創建節點。

此外,路由器的名稱分別是 節點號, 路由器地址 - 主持人 等等。

最有趣的是最後一行。 模式緩存目錄 創建一個下載所有文件的目錄 楊式 連接的路由器。 你可以在...裡找到它們 $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直到所有 陽模式 卸載 低密度脂蛋白. 到目前為止,執行此操作時 GET 查詢將顯示以下內容:

網絡服務自動化或如何使用 OpenDaylight、Postman 和 Vrnetlab 構建虛擬實驗室

刪除路由器

讓我們創造 DELETE 要求:

  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 構建虛擬實驗室

刪除配置

讓我們創造 DELETE 要求:

  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 構建虛擬實驗室

要刪除配置使用 DELETE:

  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 與網絡設備交互的最簡單示例。 毫無疑問,上述示例中的查詢可以變得更加複雜,只需單擊鼠標即可設置整個服務 - 一切只受您的想像力限制*

待續...

聚苯乙烯

如果您突然間已經知道了這一切,或者相反,已經深入了解了 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

來源: www.habr.com

添加評論