Hướng dẫn kỹ thuật CÔNG TY CỔ PHẦN DỊCH VỤ CÔNG NGHỆ DATECH
Danh sách nội dung [Ẩn]
Juniper Extension Toolkit Developer Guide
Juniper Extension Toolkit (JET), là sự phát triển tiếp theo của Junos SDK, cung cấp một giao diện lập trình hiện đại dành cho các nhà phát triển ứng dụng bên thứ ba trên các thiết bị chạy hệ điều hành Junos. JET tập trung vào việc cung cấp giao diện chuẩn hóa theo tiêu chuẩn công nghiệp để tương tác với hệ điều hành Junos OS và Junos OS Evolved của Juniper Networks, cho phép tùy biến các chức năng trên plane quản lý (management plane) và plane điều khiển (control plane).
JET cũng đi kèm chuỗi công cụ (toolchain) cùng với thư viện và các công cụ khác giúp lập trình viên có thể phát triển các ứng dụng JET chạy trực tiếp trên thiết bị mạng.
JET là một framework cho phép các nhà phát triển xây dựng ứng dụng mở rộng chức năng của hệ điều hành Junos OS và Junos OS Evolved. Ví dụ, một ứng dụng JET có thể mở rộng CLI của Junos bằng cách thêm một lệnh thao tác (operational command) mới để hiển thị trạng thái cụ thể của ứng dụng. Các ứng dụng JET có thể chạy trực tiếp trên thiết bị Junos (on-box) hoặc chạy từ một thiết bị khác trong môi trường mạng và kết nối qua mạng tới thiết bị Junos.
Các ứng dụng JET tương tác với Junos OS và Junos OS Evolved thông qua các dịch vụ kiểu yêu cầu – phản hồi (request-response) và thông báo (notification) dựa trên các kênh truyền thông chuẩn hóa theo chuẩn công nghiệp.

Hình 1: Minh họa kiến trúc dịch vụ request-response và notification của JET.
Bảng 1 mô tả cách ứng dụng JET tương tác với hệ điều hành Junos OS thông qua các dịch vụ:
Bảng 1: Ứng dụng JET tương tác với Junos OS thông qua các dịch vụ.
| Dịch vụ | Mô tả |
| Request-response | Một ứng dụng có thể gửi yêu cầu và chờ phản hồi từ hệ điều hành Junos OS. Dịch vụ này được cung cấp bởi tiến trình jsd (JET service daemon) chạy trên Junos OS. Khi jsd nhận được một yêu cầu (theo mặc định qua cổng TCP 32767), nó tạo một phiên làm việc mới để phục vụ ứng dụng JET. Phiên này sẽ duy trì cho đến khi cả client và server còn hoạt động và duy trì liên lạc. Trong suốt vòng đời của phiên, jsd có thể thực thi nhiều API khác nhau. jsd hỗ trợ tối đa 8 phiên client hoạt động đồng thời, và có thể thực thi API song song từ các phiên này. **Lưu ý: Để đảm bảo giao tiếp an toàn với jsd, nên sử dụng chứng chỉ RSA và giao thức bảo mật TLSv1.2 (tối thiểu). |
| Notifications | Ứng dụng có thể nhận thông báo bất đồng bộ (asynchronous) về các sự kiện xảy ra trên Junos OS. JET sử dụng một giao thức nhắn tin theo mô hình publish-subscribe (phát – đăng ký) và một thành phần notification broker. Ứng dụng JET có thể đăng ký (subscribe) với broker này và chỉ định chủ đề (topic) mà ứng dụng quan tâm để nhận thông báo. Broker chịu trách nhiệm phân phối thông báo đến các client quan tâm dựa trên topic. Các tiến trình trong Junos OS (như eventd) đóng vai trò publisher, kết nối đến broker và phát các sự kiện. 📡 JET sử dụng giao thức MQTT (Message Queue Telemetry Transport) để hiện thực hóa dịch vụ thông báo này. Tham khảo thêm tại: https://mqtt.org |
JET hỗ trợ framework gRPC để thực hiện gọi thủ tục từ xa (RPCs). JET sử dụng gRPC cho các dịch vụ cross-language (liên ngữ) như một cơ chế để kích hoạt dịch vụ request-response. gRPC cũng cung cấp cơ chế để định nghĩa API mà không phụ thuộc vào ngôn ngữ lập trình.
Để biết thêm thông tin, tham khảo tại https://www.grpc.io/.
Trước khi phát triển hoặc chạy ứng dụng JET, bạn cần cài đặt gói phần mềm JET trên một thiết bị ngoại vi. Gói phần mềm JET bao gồm công cụ JET, plugin, và các công cụ thư viện khác cần thiết để phát triển ứng dụng chạy trên thiết bị (on-device) hoặc ngoài thiết bị (off-device). Sau khi cài đặt công cụ JET trên thiết bị ngoại vi, thiết bị này sẽ hoạt động như máy ảo JET (JET virtual machine - VM) của bạn.
Nếu bạn đang phát triển một ứng dụng có phụ thuộc vào các mô-đun C hoặc C++, hoặc phát triển ứng dụng đã ký, bạn phải sử dụng JET VM cho quá trình phát triển ứng dụng JET.
Hướng dẫn tải về các gói sau trên thiết bị ngoại vi:
Cài đặt JET trên một thiết bị ngoại vi – thiết bị này sẽ đóng vai trò như máy ảo JET (JET VM) của bạn. Phần này sẽ hướng dẫn bạn từng bước cách cài đặt JET trên thiết bị chạy hệ điều hành Ubuntu.
user@jet-vm:~$ cd ~/Downloads user@jet-vm:~/Downloads$ ls junos-jet-21.4R2.10.tar.gz |
user@jet-vm:~/Downloads$ tar -zxf junos-jet-21.4R2.10.tar.gz |
user@jet-vm:~/Downloads$ ls junos-jet-21.4R2.10 junos-jet-21.4R2.10.tar.gz user@jet-vm:~/Downloads$ cd junos-jet-21.4R2.10/ user@jet-vm:~/Downloads/junos-jet-21.4R2.10$ ls init_linux_prereqs.sh junos-jet-sb-21.4R2.10-signed.tgz README install junos-jet-toolchain-21.4R2.10-signed.tgz |
Cài đặt gói. Sử dụng lệnh ./install nếu bạn đang đăng nhập với quyền root. Nếu bạn đang đăng nhập bằng người dùng khác, hãy sử dụng lệnh sudo ./install. Khi sử dụng lệnh sudo ./install, hệ thống sẽ yêu cầu bạn nhập mật khẩu tài khoản của mình.
**Lưu ý: Đầu ra (output) trong ví dụ này đã được rút gọn để ngắn gọn.
user@jet-vm:~/Downloads/junos-jet-21.4R2.10$ sudo ./install [sudo] password for user: Installing jot utility Reading package lists... Done Building dependency tree [...] Installation of JET SB successful. [...] Installation of JET Toolchain successful. Installation of junos-jet-sb and junos-jet-toolchain completed |
JET sandbox và bộ công cụ (toolchain) đã được cài đặt trên thiết bị của bạn. Thiết bị này hiện đã hoạt động như một JET VM.
Để thiết lập biến môi trường PATH và chuẩn bị cho JET VM, thực hiện như sau:
user@jet-vm:~$ echo 'PATH=$PATH:/usr/local/junos-jet/18.3R1/junos-jet-XX.YRZ.S.tar.gz'>>~/.bashrc |
user@jet-vm:~$ source ~/.bashrc |
env để đảm bảo rằng biến PATH đã chứa đường dẫn thư mục mà bạn vừa thêm vào.user@jet-vm:~$ env PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin: /bin:/usr/games:/usr/local/junos-jet/18.3R1/junos-jet-XX.YRZ.S.tar.gz/bin |
Bạn đã sẵn sàng để phát triển ứng dụng trong môi trường JET VM.
Tải tệp IDL về thiết bị của bạn từ trang tải xuống của Juniper Networks.
Tạo một thư mục trên thiết bị của bạn để lưu trữ các tệp định nghĩa proto (protobuf definition files).
user@jet-vm:~$ mkdir jet user@jet-vm:~$ cd jet user@jet-vm:~/jet$ mkdir proto |
user@jet-vm:~/jet$ cd ../Downloads user@jet-vm:~/Downloads$ ls jet-idl-21.4R2.10.tar.gz junos-jet-21.4R2.10 junos-jet-21.4R2.10.tar.gz |
user@jet-vm:~/Downloads$ tar -xzf jet-idl-21.4R2.10.tar.gz -C ../jet/proto/ |
user@jet-vm:~/Downloads$ cd ../jet/proto user@jet-vm:~/jet/proto$ ls 1 2 README |
user@jet-vm:~/jet/proto$ cd 2 user@jet-vm:~/jet/proto/2$ ls jnx_authentication_service.proto jnx_routing_base_service.proto jnx_common_addr_types.proto jnx_routing_base_types.proto jnx_common_base_types.proto jnx_routing_bgp_service.proto jnx_firewall_service.proto jnx_routing_flexible_tunnel_profile.proto jnx_interfaces_service.proto jnx_routing_flexible_tunnel_service.proto jnx_management_service.proto jnx_routing_interface_service.proto jnx_registration_service.proto jnx_routing_rib_service.proto |
Bạn đã tải xuống tệp IDL thành công. Tệp đã sẵn sàng để sử dụng.
Nếu bạn sử dụng Python, bạn cần cài đặt một số công cụ gRPC trước khi có thể biên dịch các tệp định nghĩa proto trong Python. Các bước này cũng được mô tả trong trang Quick Start trên trang web gRPC.
user@jet-vm:~/PycharmProjects/jetTest$ source venv/bin/activate (venv) user@jet-vm:~/PycharmProjects/jetTest$ |
(venv) user@jet-vm:~/PycharmProjects/jetTest$ python --version Python 3.8.10 (venv) user@jet-vm:~/PycharmProjects/jetTest$ python -m pip --version pip 22.2.2 from /home/user/PycharmProjects/jetTest/venv/lib/python3.8/site-packages/pip (python 3.8) |
(venv) user@jet-vm:~/PycharmProjects/jetTest$ python -m pip install grpcio Collecting grpcio Downloading grpcio-1.48.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6/4.6 MB 6.1 MB/s eta 0:00:00 Collecting six>=1.5.2 Using cached six-1.16.0-py2.py3-none-any.whl (11 kB) Installing collected packages: six, grpcio Successfully installed grpcio-1.48.1 six-1.16.0 |
+ Nếu gRPC đã được cài đặt, bạn sẽ thấy thông báo này:
(venv) user@jet-vm:~$ python -m pip install grpcio Requirement already satisfied: grpcio in ./PycharmProjects/jetTest/venv/lib/python3.8/site-packages (1.48.1) |
(venv) user@jet-vm:~/PycharmProjects/jetTest$ python -m pip install grpcio-tools Collecting grpcio-tools Downloading grpcio_tools-1.48.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4/2.4 MB 10.6 MB/s eta 0:00:00 Requirement already satisfied: setuptools in ./venv/lib/python3.8/site-packages (from grpcio-tools) (60.2.0) Collecting protobuf<4.0dev,>=3.12.0 Using cached protobuf-3.20.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl (1.0 MB) Requirement already satisfied: grpcio>=1.48.1 in ./venv/lib/python3.8/site-packages (from grpcio-tools) (1.48.1) Requirement already satisfied: six>=1.5.2 in ./venv/lib/python3.8/site-packages (from grpcio>=1.48.1->grpcio-tools) (1.16.0) Installing collected packages: protobuf, grpcio-tools Successfully installed grpcio-tools-1.48.1 protobuf-3.20.1 |
Bạn đã sẵn sàng để biên dịch các tệp IDL mà bạn cần để phát triển ứng dụng của mình.
Chúc các bạn thực hiện thành công. Hi vọng bài viết này sẽ giúp ích cho các bạn trong công việc. Nếu bạn có vấn đề gì thắc mắc đừng ngần ngại liên hệ với chúng tôi theo thông tin dưới đây để được hỗ trợ thêm.
Hẹn gặp lại các bạn trong các bài viết tiếp theo !
CÔNG TY CỔ PHẦN DỊCH VỤ CÔNG NGHỆ DATECH
• Địa chỉ: Số 23E4 KĐT Cầu Diễn, Tổ 7, Phú Diễn, Bắc Từ Liêm, Hà Nội
• Điện thoại: 02432012368
• Hotline: 098 115 6699
• Email: info@datech.vn
• Website: https://datech.vn