One-to-N odl message router
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?) |
^/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
}
]
}
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)