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))
^/odluxhandled by sdnc-web
^/helphandled by sdnc-web
^/yang-schemamulti request service (with caching?)
^/controllers$list of controllers
^/controllers/[a-zA-Z0-9\-](/.*)$forward to odl as match.group(1)
^/jolokia??? can be handled with /controllers/... rule
^/ready$multi request service for /ready

Additional northbound interfaces

  • GET /controllers  
[{
	"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
        }
    ]
}
parameterdescriptiondefault value
portlistening port8080
rfc8040flag for rfc8040 restconf interface enabledtrue
nbrestconfflag for nb restconf interface enabledfalse
trustAllallow insecure https certificates southboundfalse
remoteOdlMapsouthbound opendaylight instances to connect to  []


Possible Improvements

  • merge SDNCs topologies which are requested southbound to one overall topology northbound (e.g. for topology-netconf)