说明:翻译自The Network Configuration Service,学习自用
网络配置服务主要为两项任务提供支持:
- 配置提供网络服务(例如L3或L2连接,DHCP服务等)的ONOS应用程序
- 将有关设备、链接和设备配置的信息添加到ONOS的网络视图中
在旧式IP/以太网网络中,网络和连接性配置(例如配置BGP,IP子网,VLAN或ACL)通常需要配置多个单独设备。使用ONOS通常就需要由ONOS应用程序(用于特定任务或用例的软件包)提供等效的功能,这些功能通常跨多个设备或整个网络提供服务。某些ONOS应用程序(例如reactive forwarding(反应转发))不需要配置,也可以在默认配置下完美运行。但是,其他应用程序可能需要无法自动推断的其他特定配置信息。可以使用网络配置服务来配置这些应用程序。
网络配置服务为ONOS应用程序提供配置服务。诸如SDN-IP或VPLS之类的ONOS应用程序从中接收特定于它们自己应用程序的配置信息。有关特定于应用程序的配置的信息可以在应用程序和用例的各个应用程序部分中找到。
网络配置服务还可以将信息添加到ONOS的网络视图中。这样就可以编写一个程序,该程序从特定于站点的数据库中读取设备和拓扑清单以及其他信息,然后将其直接提供给ONOS,而不必依赖动态设备和拓扑发现。此外,它可以用于添加ONOS不能或无法自动发现但可能需要正确操作的补充信息。
有关配置ONOS本身的信息(例如,设置ONOS集群或激活应用程序)以及使用ONOS来配置网络设备,可以在配置ONOS的相应部分中找到。
总览
网络配置服务使应用程序和操作员可以使用统一的语法(当前为JSON)配置ONOS的网络视图和ONOS网络应用程序。示例包括:
- Device and device port types and names(设备和设备端口的类型和名称)
- 设备位置,所有者,硬件和软件版本
- network model(网络模型)中是否允许包含组件
该服务不仅将配置ONOS已知的网络元素—配置还可以引用尚未发现的元素—也可以指代那些无法通过常规方式发现的元素。
句法
Subject key描述了网络元素的类别,例如链接、设备、主机等。每个网络元素都与一个唯一的标识符(一个subject)和一个或多个属性相关联,这些属性具有相关的值,并被分组为configs。配置本身按config keys分类。
与该服务一起使用的JSON文件采用以下格式:
{
subject key : { # element category, e.g. "devices", "links", etc.
subject : { # unique string, e.g. a device ID
config key 1 : { # config class of config, e.g. "basic"
attr1 : value1, # attribute : value pairs associated with a config
attr2 : value2,
...
},
...
},
...
},
...
}
示例配置文件可在${ONOS_ROOT}/tools/test/configs/中找到。
南向接口提供商的网络配置。
NETCONF、SNMP、REST和TL1等不同的南向接口提供程序都使用net-cfg作为注入设备的ip,端口,用户名和密码的机制。
您可以在各自的Wiki页面中找到有关这些协议和json示例的信息。
这些协议的样本配置也存储在${ONOS_ROOT}/tools/test/configs/中。
加载网络配置
REST API
该NetworkConfigWebResource
工具为网络配置子系统实现REST调用。其最终将取代ConfigWebResource
的功能。
以下示例使用REST API upload配置文件:
curl --user onos:rocks -X POST -H "Content-Type: application/json" [http://192.168.56.111:8181/onos/v1/network/configuration/](http://192.168.56.111:8181/onos/v1/network/configuration/) -d @/tmp/cfg.json
以上假设一个正在运行的实例位于192.168.56.111,配置文件位于/tmp/cfg.json。这些应替换为适当的值。
同样,user:password组合可能与您的设置不同。其他常见值是karaf:karaf和onos:onos。
onos-netcfg Shell脚本
有一个封装REST API的shell脚本,以提供一种更方便的机制来从命令行(即,从ONOS外部)上载配置。
例如,可以使用以下命令上传以上相同的配置:
onos-netcfg 192.168.56.111 /tmp/cfg.json
该脚本还接受第三个参数,该参数允许您上传由subject_key/subject/config_key标识的较小配置块:
onos-netcfg $OC1 /tmp/basic.json /devices/of:0000000000000001/basic
/tmp/basic.json脚本仅包含基本的config key,例如:
{
"driver" : "softrouter"
}
网络配置加载器
NetworkConfigLoader
从已知位置读取JSON文件,并在系统启动时尝试将其作为网络配置加载。
当前,在部署时会从${ONOS_ROOT}/tools/package/config/中找到了一个名为network-cfg.json的文件,并将其放置在当前是固定如下文件名和路径中。
远程实例启动时,其网络配置加载器运行时将读取${KARAF_ROOT}../config/文件。
网络配置加载程序实现为网络配置事件(NetworkConfigEvent
)的侦听器。一旦通知Configs
可用,它将尝试使用已知的Configs
来生成或更新网络模型中的实体。