Motivation
- due last stress tests we were able to connect max. 2000 active NETCONF connections to a SDNC
- to establish microservices over a whole provider network (like transportPCE for optical path calculation) we try to multiplex the northbound RESTconf interface of a SDNC at least for the node requests
- that means topology has to be rebuild on the microservice side but for all node related RESTconf requests it still looks like one single SDN-Controller is holding every single connection to the nodes of the network
Goal
- scale up SDN-Controller/RESTconf interface (for device requests) for microserivces which are using only RESTconf (and optional websocket) interface, e.g. highstreet adapted transportPCE
- keep that service as generic as possible to avoid fixes due protocol changes
- horizontal scalability!!!
Restrictions
- RESTconf only for the device requests (up to now)
- NodeIds have to be unique in the whole network (over multiple SDNCs /SDNC clusters)
- only implemented services (here named multirequest services) can also be forwarded
- things like network-topology are up to now not possible to forward (therefore the response data have to be combined)
How it works
Forwarding Rules
Uri | Description |
---|---|
^\/rests\/(data|operations)\/network-topology:network-topology\/topology=topology-netconf\/node=([a-zA-Z0-9\-_]+)[\?\/]+ | forward to odl of nodeId(match.group(2)) |
^\/restconf\/(config|operational)\/network-topology\/network-topology\/topology\/topology-netconf\/node\/([a-zA-Z0-9\-_]+) | forward to odl of nodeId(match.group(2)) |
^/odlux | handled by sdnc-web |
^/help | handled by sdnc-web |
^/yang-schema | multi request service (with caching?) |
^/odl/[a-zA-Z0-9\-](/.*)$ | forward to odl as match.group(1) |
^/jolokia | ??? can be handled with /odl/... rule |
Additional northbound interfaces
- GET /odl
[{ "id":"odl1", "web":"http://172.18.0.3:8181", "ws":"ws://172.18.0.3:8181/websocket", "primary":true },{ "id":"odl2", "web":"http://172.18.0.5:8181", "ws":"ws://172.18.0.5:8181/websocket", "primary":false } ]
Configuration
test.config.json
{ "port":8080, "rfc8040":true, "nbrestconf":false, "trustAll":true, "remoteOdlMap":[ { "id":"odl1", "web":"http://172.18.0.3:8181", "ws":"ws://172.18.0.3:8181/websocket", "primary":true } ] }
parameter | description | default value |
---|---|---|
port | listening port | 8080 |
rfc8040 | flag for rfc8040 restconf interface enabled | true |
nbrestconf | flag for nb restconf interface enabled | false |
trustAll | allow insecure https certificates southbound | false |
remoteOdlMap | southbound opendaylight instances to connect to | [] |
Possible Improvements
- merge SDNCs topologies which are requested southbound to one overall topology northbound (e.g. for topology-netconf)