科技创新就是艺术创造
SDN:gNMI和gNOI
来源: | 作者:davincinet | 发布时间: 2020-07-11 | 3497 次浏览 | 分享到:
配置和操作任何网络设备的核心挑战是定义一组变量,操作员可以在设备上使用这些变量来获取和设置,并要求变量字典在设备之间保持统一(即与供应商无关)。因特网几十年来一直致力于定义这类字典,允许管理信息库(MIB)与SNMP一起使用。然而,MIB更侧重于读取设备状态变量,而不是写入设备配置变量,后者以前是使用设备的命令行接口(Cli)完成的。SDN转换的结果之一是将行业转移到支持程序配置API。这意味着重新访问网络设备的信息模型。

实用建模语言的可用性是在SNMP和MIB早期尚未普及的一项重大技术进步,而Yang是过去几年中出现的主要选择。代表"另一个下一代"的Yang被认为是XXXSD的一个受限版本。XSD是一种用来定义XML模式的语言,它的名称是为了证明它必须被嘲笑多久。Yang定义了数据的结构,但与XSD不同的是,它并不是特定于XML的。相反,Yang可以与不同的在线消息格式一起使用,包括XML、Protobufs和JSON。如果您不熟悉这些缩略语,或者标记语言和标记语言体系结构之间的区别是模糊的,您可以在这里简要描述:

为此目的,重要的是要有一个数据模型来定义程序中变量的语义--可读形式;它不仅仅是标准文件中的文本。此外,尽管所有硬件供应商都在推广其产品的独特特性,但这不是免费的,每个供应商都定义了一个独特的模型。这是因为购买网络硬件的网络运营商有很强的动机来促进类似设备模型的趋同,而供应商也有同样的强烈动机坚持这些模型。杨让创建、使用和修改模型的过程可编程,因此适合迭代过程。

这就是被称为OpenConfig的全行业标准化开始发挥作用的地方。OpenConfig是一组网络运营商,他们试图使用Yang作为建模语言,将业界推向一组通用的配置模型。OpenConfig对于用于访问设备上的配置和状态变量的有线协议来说是正式未知的,但是gNMI(GRPC网络管理接口)是它积极追求的一种方法。正如您可能从名称中猜测的那样,gNMI使用GRPC(依次运行在HTTP/2之上)。这意味着gNMI还使用Protobufs作为它指定通过HTTP实际通信的数据的方式。因此,gNMI的目的是作为网络设备的标准管理接口。

为了完整起见,请注意NETCONF是另一种将配置信息传递给网络设备的SNMP后协议。OpenConfig也可以与NETCONF一起使用。


OpenConfig定义了对象类型的层次结构。例如,用于网络接口的YANG模型如下所示:

模块:openconfig接口
        +-rw接口
                +-rw接口* [名称]
                        +-RW名称
                        +-rw配置
                         | ...
                        +-ro状态
                         | ...
                        +-rw保持时间
                         | ...
                        +-rw子接口
                         | ...
这是可以扩展的基本模型,例如,可以对以太网接口进行建模:

模块:openconfig-if-ethernet
        增加/ ocif:interfaces / ocif:interface:
                +-RW以太网
                +-rw配置
                 | +-rw mac地址?
                 | +-rw自动协商?
                 | +-rw双工模式?
                 | +-rw端口速度?
                 | +-rw enable-flow-control?
                +-ro状态
                        +-ro mac-address?
                        +-ro自动协商?
                        +-ro双工模式?
                        +-ro端口速度?
                        +-ro启用流程控制?
                        +-ro hw-mac-address?
                        +-RO柜台
                               ...
可以定义其他类似的扩充来支持链路聚合,IP地址分配,VLAN标记等。

OpenConfig层次结构中的每个模型都定义了客户端可以读取和写入的配置状态(在示例中以rw表示)和报告设备状态的操作状态(在示例中以ro表示)的组合。从客户端)。声明性配置状态和运行时反馈状态之间的区别是任何网络设备接口的基本方面,其中OpenConfig明确致力于将后者概括为包括操作员需要跟踪的网络遥测数据。

拥有有意义的模型集是必要的,但是完整的配置系统也包括其他元素。在我们的案例中,关于Stratum与OpenConfig模型之间的关系,有3点很重要。

首先是Stratum依赖YANG工具链。显示了将一组基于YANG的OpenConfig模型转换为gNMI使用的客户端和服务器端gRPC存根的步骤。图中的gNMI服务器与图24中的gNMI接口门户相同。工具链支持多种目标编程语言(Stratum恰好使用C ++),其中gRPC的客户端和服务器端无需编写在相同的语言。

请记住,YANG与gRPC或gNMI都不相关。该工具链可以从完全相同的OpenConfig模型开始,但是可以分别使用(例如)NETCONF或RESTCONF为正在从网络设备读取或写入的数据生成XML或JSON表示形式。但是在我们的上下文中,目标是protobufs,Stratum用来支持在gRPC上运行的gNMI。

第二个是由gNMI定义的特定gRPC方法集,可在这些模型上运行。该集合在protobuf规范中被统一定义为服务:

服务gNMI {
        rpc Capabilities(CapabilityRequest)返回(CapabilityResponse);
        rpc Get(GetRequest)返回(GetResponse);
        rpc Set(SetRequest)返回(SetResponse);
        rpc Subscribe(stream SubscribeRequest)返回(stream SubscribeResponse);
}

Capabilities方法用于检索设备支持的一组模型定义。Get和Set方法用于读写一些模型中定义的相应变量。Subscribe方法用于设置来自设备的遥测更新流。相应的参数和返回值(例如GetRequest、GetResponse)由protobuf消息定义,并包含YANG模型中的各个字段。通过在数据模型树中指定给定字段的完全限定路径名来指定该字段。

第三点是strateum不一定关心所有OpenConfig模型。这是因为,作为一个支持集中式控制器的交换机操作系统,strata关心配置数据平面的所有方面,但通常不参与控制平面协议(如BGP)的配置。在基于SDN的解决方案中,这样的控制平面协议不再在交换机上实现(尽管它们仍然属于实现集中式协议的网络操作系统的范围)。具体地说,Stratum跟踪以下OpenConfig模型:接口、vlan、QoS和LACP(链路聚合),以及一组系统和平台变量。


原文链接:https://sdn.systemsapproach.org/stratum.html#