配置 gNOI 服务

将远程网络管理系统配置为可在网络设备上执行 gNOI 操作的 gRPC 客户端。

gRPC 网络操作接口 (gNOI) 使用 gRPC 远程过程调用 (gRPC) 框架在网络设备上执行操作。网络管理系统必须安装 gRPC 堆栈。

OpenConfig 为 gNOI 服务定义了原型定义文件。原型定义文件定义给定服务的操作 (RPC) 和数据结构(消息)。这些定义与语言无关。gRPC 支持使用多种不同的语言来执行服务操作。您必须为您选择的语言编译原型定义文件。然后,您可以创建应用程序,这些应用程序使用编译文件中的对象(类、函数、方法等)连接到网络设备上的 gRPC 服务器并执行所需的操作。

有关将 gRPC 与不同支持语言一起使用的信息,请参阅 gRPC 文档。以下部分提供了用于设置 gRPC 客户端以及下载和编译 Python 的 gNOI 原型定义文件的示例命令。您必须使用适合您的操作系统、环境和所选 gRPC 语言的命令。

开始之前:

设置 gRPC 客户端

gNOI 使用 gRPC 框架在网络设备上执行操作。gRPC 支持使用多种不同的语言。必须先在网络管理系统上安装 gRPC 堆栈,然后才能使用所选语言执行 gNOI 操作。

例如,要在运行 Ubuntu 20.04 LTS 的网络管理系统上安装 Python 的 gRPC 堆栈(在适当情况下使用 sudo ):

  1. pip安装 Python 3。
  2. 安装 grpcio Python 包。
  3. 安装 grpcio-tools Python 包。

编译原型定义文件

gRPC 支持使用多种语言。为了在网络设备上执行 gRPC 操作,您必须为您选择的语言编译相应的原型定义文件和任何依赖文件。OpenConfig 在 OpenConfig GitHub 存储库中提供了必要的原型定义文件。您可以使用协议缓冲区编译器(protoc 或等效应用程序)来编译 .proto 文件。

对于此设置,我们执行一个脚本,该脚本将所有所需的依赖 .proto 文件复制到目录中,更新文件以使用相对导入语句,然后编译文件。

要下载和编译 Python 的 gNOI 原型定义文件:

  1. 为 原始源文件创建临时目录。
  2. 将 gNOI GitHub 存储库和依赖存储库克隆到本地设备。
  3. 编 译 .proto 适合您的语言的文件,在本例中为 Python。

    示例 shell 脚本执行以下操作:

    • 创建 src/proto 目录。
    • 将所需的原型文件复制到新目录中。
    • 更新每个 proto 文件中的 import 语句以使用相对路径。
    • 编译指定列表中的每个原型文件以与 Python 一起使用。

    要使用脚本编译文件,请从包含 src 该目录的父目录执行脚本。

    注意:

    该脚本仅编译 Junos 设备上支持服务的 gNOI proto 文件(如 gnoi_files)的子集以及任何依赖的 proto 文件。要在其他服务可用时对其进行编译,可以更新变量以包含这些服务。

  4. 通过查看目标目录中的输出文件来验证 proto 文件是否已编译。

    文件列表应包括已编译的文件,对于 Python,这些文件在输出文件名中有 _pb2 和 pb2_grpc 。

创建 gNOI 应用程序

编译 proto 定义文件后,创建使用已编译文件中的对象的应用程序。应用程序连接到网络设备上的 gRPC 服务器并执行所需的操作。本节提供了两个示例 Python 模块,它们在各自的部分中进行了描述。

grpc_channel.py

grpc_channel.py Python 模块提供了示例函数,这些函数使用为所选身份验证方法(仅服务器或互)提供的参数创建 gRPC 通道。

gnoi_connect_cert_auth_mutual.py

gnoi_connect_cert_auth_mutual.py Python 应用程序与给定的 gRPC 服务器建立 gRPC 通道并执行简单的 gNOI System 服务操作。用户提供必要的连接和相互身份验证信息作为应用程序的输入。应用程序调用模块中的grpc_channel.py相应函数来在客户端和服务器之间建立 gRPC 通道。如果应用程序成功建立 gRPC 通道,则执行简单的系统服务 RPC 以从网络设备检索时间。

执行应用

创建应用程序以执行 gNOI 服务操作后,执行应用程序并提供任何必要的参数。以下示例使用上一节中提供的脚本连接到网络设备上的 gRPC 服务器并请求时间。gRPC 服务器配置为要求并验证客户端的证书。

  • 对于相互身份验证,客户端除了提供服务器的 IP 地址、gRPC 端口和根 CA 证书外,还提供自己的密钥和 PEM 格式的 X.509 公钥证书证书颁发机构。客户端还提供 RPC 调用的凭据: user_id 参数提供用户名,应用程序提示输入用户密码。