Prohoster > Blog > quản lý > Tự động hóa các dịch vụ mạng hoặc cách xây dựng phòng thí nghiệm ảo bằng OpenDaylight, Postman và Vrnetlab
Tự động hóa các dịch vụ mạng hoặc cách xây dựng phòng thí nghiệm ảo bằng OpenDaylight, Postman và Vrnetlab
Trong bài viết này tôi sẽ hướng dẫn bạn cách thiết lập mởÁnh sáng ban ngày để làm việc với thiết bị mạng và cũng sẽ chỉ ra cách sử dụng Người phát thơ và đơn giản RESTCONF yêu cầu, thiết bị này có thể được kiểm soát. Chúng tôi sẽ không làm việc với phần cứng mà thay vào đó chúng tôi sẽ triển khai các phòng thí nghiệm ảo nhỏ bằng một bộ định tuyến duy nhất bằng cách sử dụng Vrnetlab hơn Ubuntu 20.04 LTS.
Đầu tiên tôi sẽ trình bày cách thiết lập chi tiết bằng ví dụ về bộ định tuyến Cây bách xù vMX 20.1R1.11, và sau đó chúng tôi so sánh nó với cài đặt Cisco xRV9000 7.0.2.
nội dung
Kiến thức cần thiết
Часть 1: thảo luận ngắn gọn OpenDaylight (sau đây gọi tắt là ODL), Người phát thơ и Vrnetlab và tại sao chúng ta cần chúng
Часть 2: mô tả phòng thí nghiệm ảo
Часть 3: cấu hình mởÁnh sáng ban ngày
Часть 4: cấu hình Vrnetlab
Часть 5: bằng cách sử dụng Người phát thơ kết nối bộ định tuyến ảo (cây bách xù vMX) Đến ODL
Часть 6: lấy và thay đổi cấu hình bộ định tuyến bằng cách sử dụng Người phát thơ и ODL
Часть 7: thêm Cisco xRV9000
Kết luận
PS
Thư mục
Kiến thức cần thiết
Để ngăn bài viết biến thành một trang giấy, tôi đã bỏ qua một số chi tiết kỹ thuật (kèm theo các liên kết đến tài liệu để bạn có thể đọc về chúng).
Về vấn đề này, tôi gợi ý cho bạn những chủ đề mà bạn nên biết (nhưng hầu như không cần thiết) trước khi đọc:
Trong trường hợp của chúng tôi, chúng tôi quan tâm đến nó như một phương tiện để gửi các yêu cầu REST tới API OpenDaylight. Tất nhiên, bạn có thể gửi yêu cầu theo cách thủ công, nhưng trong Postman mọi thứ trông rất rõ ràng và hoàn hảo cho mục đích của chúng tôi.
Dành cho những ai muốn tìm hiểu sâu hơn: rất nhiều tài liệu giáo dục đã được viết trên đó (ví dụ).
Một nhạc cụ rất thú vị nhưng ít được biết đến. Trong trường hợp của chúng tôi, với sự trợ giúp của nó, chúng tôi sẽ chạy Juniper vMX và Cisco xRV9000 trên Ubuntu 20.04 LTS thông thường.
Trong hướng dẫn này, chúng ta sẽ thiết lập hệ thống sau:
Làm thế nào nó hoạt động
cây bách xù vMX vươn đến phu bến tàu thùng chứa (bằng phương tiện Vrnetlab) và hoạt động như bộ định tuyến ảo phổ biến nhất.
ODL được kết nối với bộ định tuyến và cho phép bạn điều khiển nó.
Người phát thơ được khởi chạy trên một máy riêng biệt và thông qua nó, chúng tôi gửi lệnh ODL: để kết nối/gỡ bỏ bộ định tuyến, thay đổi cấu hình, v.v.
Bình luận về thiết kế hệ thống
cây bách xù vMX и ODL đòi hỏi khá nhiều nguồn lực để hoạt động ổn định. Chỉ một vMX Yêu cầu 6 GB RAM và 4 lõi. Vì vậy, người ta quyết định chuyển tất cả các “hạng nặng” sang một máy riêng (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). Tất nhiên, bộ định tuyến không “bay” trên đó, nhưng có đủ hiệu suất cho các thử nghiệm nhỏ.
Phần 3: Thiết lập OpenDaylight
Phiên bản hiện tại của ODL tại thời điểm viết bài là Magiê SR1
1) Cài đặt Java OpenJDK 11 (để biết thêm cách cài đặt chi tiết đây)
ubuntu:~$ sudo apt install default-jdk
2) Tìm và tải xuống bản dựng mới nhất ODLdo đó
3) Giải nén kho lưu trữ đã tải xuống
4) Chuyển đến thư mục kết quả
5) Khởi chạy ./bin/karaf
Ở bước này ODL sẽ bắt đầu và chúng ta sẽ thấy mình trong bảng điều khiển (Để truy cập bên ngoài, cổng 8181 được sử dụng, chúng ta sẽ sử dụng cổng này sau).
Tiếp theo chúng ta cài đặt Tính năng ODL, được thiết kế để hoạt động với các giao thức NETCONF и RESTCONF. Để làm điều này trong bảng điều khiển ODL LÀM:
Mỗi bộ định tuyến được hỗ trợ Vrnetlab, có quy trình thiết lập riêng. Khi cây bách xù vMX Tất cả những gì chúng ta cần làm là tải kho lưu trữ .tgz lên bằng bộ định tuyến (bạn có thể tải xuống từ trang web chính thức) vào thư mục vmx và thực hiện lệnh make:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Копируем в эту директорию .tgz архив с роутером
ubuntu:~$ sudo make
Xây dựng hình ảnh vMX sẽ mất khoảng 10-20 phút. Đã đến lúc phải đi pha cà phê!
Tại sao lâu như vậy, bạn hỏi?
Dịch câu trả lời câu trả lời của tác giả cho câu hỏi này:
"Điều này là do khi VCP (Mặt phẳng điều khiển) khởi động lần đầu, nó sẽ đọc tệp cấu hình để xác định xem nó có chạy dưới dạng VRR VCP trong vMX hay không. Trước đây, quá trình khởi động này được thực hiện trong quá trình khởi động Docker, nhưng điều này có nghĩa là VCP luôn được khởi động lại một lần trước khi bộ định tuyến ảo khả dụng, dẫn đến thời gian khởi động lâu (khoảng 5 phút) Bây giờ, lần chạy VCP đầu tiên được thực hiện trong quá trình xây dựng hình ảnh Docker và vì bản dựng Docker không thể chạy với tùy chọn --privileged, điều này có nghĩa là qemu chạy mà không cần tăng tốc phần cứng KVM và do đó mất rất nhiều thời gian để xây dựng. Rất nhiều nhật ký được xuất ra trong quá trình này, vì vậy ít nhất bạn có thể thấy điều gì đang diễn ra. Tôi nghĩ rằng một bản dựng dài không đến nỗi tệ vì chúng ta chỉ tạo một hình ảnh một lần , nhưng phóng nhiều."
Sau đó, bạn có thể thấy hình ảnh của bộ định tuyến của chúng tôi trong phu bến tàu:
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
Khởi chạy vùng chứa vr-vmx
Chúng tôi khởi chạy nó bằng lệnh:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453c
Tiếp theo chúng ta có thể xem thông tin về các container đang hoạt động:
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
Kết nối với bộ định tuyến
Địa chỉ IP của giao diện mạng của bộ định tuyến có thể được lấy bằng lệnh sau:
Mặc định, Vrnetlab tạo người dùng trên bộ định tuyến vrnetlab/VR-netlab9.
Kết nối bằng cách sử dụng 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
Điều này hoàn tất việc thiết lập bộ định tuyến.
Bạn có thể tìm thấy các đề xuất cài đặt cho bộ định tuyến từ nhiều nhà cung cấp khác nhau tại dự án github trong các thư mục thích hợp.
Đây là những không gian tên nội bộ XML (Không gian tên XML) cho ODL theo đó nó tạo ra nút.
Hơn nữa, theo đó, tên của bộ định tuyến là id nút, địa chỉ bộ định tuyến - chủ nhà và vân vân.
Dòng thú vị nhất là dòng cuối cùng. Schema-cache-thư mục tạo một thư mục chứa tất cả các tập tin được tải xuống Lược đồ YANG bộ định tuyến được kết nối. Bạn có thể tìm thấy chúng trong $ODL_ROOT/cache/jun01_cache.
Kiểm tra kết nối bộ định tuyến
Hãy tạo ra GET lời yêu cầu:
Chuỗi truy vấn:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/
Trên tab Ủy quyền, bạn cần đặt tham số Basic Auth và đăng nhập/mật khẩu: quản trị viên/quản trị viên.
Chúng tôi gửi. Sẽ nhận được trạng thái "200 OK" và danh sách tất cả các thiết bị được hỗ trợ Lược đồ YANG:
Bình luận: Để xem cái sau, trong trường hợp của tôi, cần phải đợi khoảng 10 phút sau khi thực hiện PUTđó là tất cả bây giờ lược đồ YANG sẽ được dỡ hàng vào ODL. Tính đến thời điểm này, khi thực hiện việc này GET truy vấn sẽ hiển thị như sau:
Trên tab Ủy quyền, bạn cần đặt tham số Basic Auth và đăng nhập/mật khẩu: quản trị viên/quản trị viên.
Phần 6: Thay đổi cấu hình bộ định tuyến
Lấy cấu hình
Hãy tạo ra GET lời yêu cầu:
Chuỗi truy vấn:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/
Trên tab Ủy quyền, bạn cần đặt tham số Basic Auth và đăng nhập/mật khẩu: quản trị viên/quản trị viên.
Chúng tôi gửi. Sẽ nhận được trạng thái "200 OK" và cấu hình bộ định tuyến:
Tạo cấu hình
Ví dụ: hãy tạo cấu hình sau và thay đổi nó:
protocols {
bgp {
disable;
shutdown;
}
}
Hãy tạo ra POST lời yêu cầu:
Chuỗi truy vấn:
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
Trên tab Ủy quyền, bạn cần đặt tham số Basic Auth và đăng nhập/mật khẩu: quản trị viên/quản trị viên.
Trên tab Tiêu đề, bạn cần thêm hai tiêu đề:
Chấp nhận đơn đăng ký/xml
Ứng dụng loại nội dung/xml
Sau khi gửi bạn sẽ nhận được trạng thái "204 No Content"
Bạn có thể sử dụng truy vấn trước đó để xác minh rằng cấu hình đã thay đổi. Nhưng để làm ví dụ, chúng tôi sẽ tạo một cái khác chỉ hiển thị cho chúng tôi thông tin về các giao thức được định cấu hình trên bộ định tuyến.
Hãy tạo ra GET lời yêu cầu:
Chuỗi truy vấn:
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
Trên tab Ủy quyền, bạn cần đặt tham số Basic Auth và đăng nhập/mật khẩu: quản trị viên/quản trị viên.
Sau khi thực hiện yêu cầu, chúng ta sẽ thấy như sau:
Thay đổi cấu hình
Hãy thay đổi thông tin về giao thức BGP. Sau hành động của chúng ta, nó sẽ trông như thế này:
protocols {
bgp {
disable;
}
}
Hãy tạo ra PUT lời yêu cầu:
Chuỗi truy vấn:
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
Đừng quên thay đổi tiêu đề trên tab Tiêu đề thành:
Chấp nhận ứng dụng/json
Ứng dụng loại nội dung/json
Sau khi gửi chúng tôi nhận được kết quả như sau (Chúng tôi xem câu trả lời bằng cách sử dụng GET lời yêu cầu):
Phần 7: Thêm Cisco xRV9000
Tất cả chúng ta là gì về Juniper, vâng về Juniper? Hãy nói về Cisco!
Tôi đã tìm thấy xRV9000 phiên bản 7.0.2 (một con thú cần RAM 8Gb và 4 lõi. Nó không có sẵn miễn phí, vì vậy hãy liên hệ Cisco) - hãy khởi chạy nó.
Chạy container
Quá trình tạo vùng chứa Docker thực tế không khác gì Juniper. Tương tự, chúng ta thả file .qcow2 cùng với router vào thư mục tương ứng với tên của nó (trong trường hợp này là xrv9k) và thực hiện lệnh make docker-image.
Sau vài phút chúng ta thấy hình ảnh đã được tạo:
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
Hãy khởi chạy container:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fc
Sau một thời gian, chúng ta thấy container đã khởi động:
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
Kết nối qua 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
Kết nối bộ định tuyến với OpenDaylight
Việc thêm diễn ra theo cách hoàn toàn tương tự với vMX. Bạn chỉ cần thay đổi tên. PUT lời yêu cầu:
Một lúc sau chúng tôi gọi GET yêu cầu kiểm tra xem mọi thứ đã được kết nối chưa:
Thay đổi cấu hình
Hãy thiết lập cấu hình sau:
!
router ospf LAB
mpls ldp auto-config
!
Hãy tạo ra POST lời yêu cầu:
Chuỗi truy vấn:
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
Trên tab Ủy quyền, bạn cần đặt tham số Basic Auth và đăng nhập/mật khẩu: quản trị viên/quản trị viên.
Trên tab Tiêu đề, bạn cần thêm hai tiêu đề:
Chấp nhận ứng dụng/json
Ứng dụng loại nội dung/json
Sau khi thực thi, bạn sẽ nhận được trạng thái "204 Không có nội dung".
Hãy kiểm tra những gì chúng ta có.
Đối với điều này, chúng tôi sẽ tạo ra GET lời yêu cầu:
Chuỗi truy vấn:
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
Trên tab Ủy quyền, bạn cần đặt tham số Basic Auth và đăng nhập/mật khẩu: quản trị viên/quản trị viên.
Trên tab Ủy quyền, bạn cần đặt tham số Basic Auth và đăng nhập/mật khẩu: quản trị viên/quản trị viên.
Kết luận
Nhìn chung, như bạn có thể nhận thấy, quy trình kết nối Cisco và Juniper với OpenDaylight không khác nhau - điều này mở ra một phạm vi khá rộng cho sự sáng tạo. Bắt đầu từ việc quản lý cấu hình của tất cả các thành phần mạng và kết thúc bằng việc tạo chính sách mạng của riêng bạn.
Trong hướng dẫn này, tôi đã đưa ra các ví dụ đơn giản về cách bạn có thể tương tác với thiết bị mạng bằng OpenDaylight. Không còn nghi ngờ gì nữa, các yêu cầu từ các ví dụ trên có thể phức tạp hơn nhiều và toàn bộ dịch vụ có thể được định cấu hình chỉ bằng một cú nhấp chuột - mọi thứ chỉ bị giới hạn bởi trí tưởng tượng của bạn*
Để được tiếp tục ...
PS
Nếu bạn đột nhiên biết tất cả những điều này hoặc ngược lại, đã trải qua nó và ODL đã ăn sâu vào tâm hồn bạn, thì tôi khuyên bạn nên hướng tới việc phát triển các ứng dụng trên bộ điều khiển ODL. Bạn có thể bắt đầu do đó.