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
- NodeIds things like network-topology are up to now not possible to forward (therefore the response data have to be unique in the whole network (over multiple SDNCs /SDNC clusterscombined)
How it works
Drawio | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
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
Code Block |
---|
[{
"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
Code Block |
---|
{
"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)