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

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

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)