As many instances of following µ-services (µ-VNF is a µ-service implementing a fine-granule networking function) as needed can be deployed or undeployed (for example, specifying number of replicas).
Following Global weighted µ-service topology (overlay network topology) is constructed by the TopoProcessor based on pieces of overly neighbor information sent by each Forwarder. The graph visualizations are generated by Visualization µ-services in multiple formats . A Client (browser or other client) makes requests to a µ-service implementing REST APIs, which then makes Go RPC calls to a visualization µ-service that generates topology in visualization formats (DOT/PNG or JS).
Minimum Weighted Topology for Forwarder-2: Node_Weight is the min weight (distance) to reach a node from Forwarder-2
One or more instances (or replicas) of Control Micro-VNF (TopoProcessor) computes the Topology
Shortest Path or Minimum Spanning Tree with ECMP (Equal-cost Multi-Path) for Forwarder-2 computed from avove Min Weight Topology
One or more instances (or replicas) of Control Micro-VNF (TopoProcessor) computes the Topology
Forwarding table computed from above Minimum Spanning Tree with ECMP
This computation can be done via separate Micro-services for each type of Target (Linux, various Hardware)
Each Forwarder is a light-weight Micro-VNF executing mainly forwarding
Table can be mapped to Hardware Forwarding Tables and controlled via the Forwarder Micro-VNF
Above Topology scaled up to 8 (from 6) Forwarders, then to 10 forwarder (via Kubernetes), then to 15 app
Similarly can be scaled down
As Forwarder Micro-VNFs and App Micro-services are scaled up/down, topologies and the forwarding tables are updated automatically
Forwarding tables of forwarder-2 shown
Scaled up with 10 forwarder and 15 App
Forwarding table on forwarder-2
From app-0 (connected to forwarder-0)
traceroute app-9.app
traceroute to app-9.app (172.17.0.30), 30 hops max, 46 byte packets
1 forwarder-0.forwarder.default.svc.cluster.local (172.17.0.10) 0.010 ms 0.006 ms 0.002 ms
2 forwarder-8.forwarder.default.svc.cluster.local (172.17.0.26) 0.010 ms 0.005 ms 0.006 ms
3 forwarder-3.forwarder.default.svc.cluster.local (172.17.0.13) 0.010 ms 0.010 ms 0.013 ms
4 app-9.app.default.svc.cluster.local (172.17.0.30) 0.004 ms 0.009 ms 0.007 ms
traceroute app-10.app
traceroute to app-10.app (172.17.0.31), 30 hops max, 46 byte packets
1 forwarder-0.forwarder.default.svc.cluster.local (172.17.0.10) 0.004 ms 0.004 ms 0.005 ms
2 forwarder-4.forwarder.default.svc.cluster.local (172.17.0.14) 0.005 ms 0.006 ms 0.002 ms
3 app-10.app.default.svc.cluster.local (172.17.0.31) 0.003 ms 0.003 ms 0.002 ms
From app-2 (connected to forwarder-2)
bash-4.4# traceroute app-0.app
traceroute to app-0.app (172.17.0.16), 30 hops max, 46 byte packets
1 forwarder-2.forwarder.default.svc.cluster.local (172.17.0.12) 0.008 ms 0.005 ms 0.002 ms
2 forwarder-1.forwarder.default.svc.cluster.local (172.17.0.11) 0.009 ms 0.004 ms 0.003 ms
3 forwarder-0.forwarder.default.svc.cluster.local (172.17.0.10) 0.009 ms 0.003 ms 0.003 ms
4 app-0.app.default.svc.cluster.local (172.17.0.16) 0.009 ms 0.004 ms 0.003 ms
Inspect Web and healthcare protocol (DICOM) traffic/transaction Packets for deeper visibility and Blockchain recording
The application servers (app-#) run web server and DICOM (PACS) server
{
"Forwarder": [
{
"ServiceName": "forwarder",
"ServiceRPCName": "Forwarder",
"ServiceIP": "172.17.0.10",
"ServicePort": "9091",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"ThisServiceReplica": 6,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "forwarder-0.forwarder.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 7,
"ServiceLaunchime": "09/15/2018 11:27:26.960 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.827 PM UTC"
},
{
"ServiceName": "forwarder",
"ServiceRPCName": "Forwarder",
"ServiceIP": "172.17.0.11",
"ServicePort": "9091",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"ThisServiceReplica": 6,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "forwarder-1.forwarder.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 5,
"ServiceLaunchime": "09/15/2018 11:27:28.135 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.828 PM UTC"
},
{
"ServiceName": "forwarder",
"ServiceRPCName": "Forwarder",
"ServiceIP": "172.17.0.12",
"ServicePort": "9091",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"ThisServiceReplica": 6,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "forwarder-2.forwarder.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 5,
"ServiceLaunchime": "09/15/2018 11:27:29.177 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.829 PM UTC"
},
{
"ServiceName": "forwarder",
"ServiceRPCName": "Forwarder",
"ServiceIP": "172.17.0.13",
"ServicePort": "9091",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"ThisServiceReplica": 6,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "forwarder-3.forwarder.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 7,
"ServiceLaunchime": "09/15/2018 11:27:30.251 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.831 PM UTC"
},
{
"ServiceName": "forwarder",
"ServiceRPCName": "Forwarder",
"ServiceIP": "172.17.0.14",
"ServicePort": "9091",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"ThisServiceReplica": 6,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "forwarder-4.forwarder.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 5,
"ServiceLaunchime": "09/15/2018 11:27:31.271 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.838 PM UTC"
},
{
"ServiceName": "forwarder",
"ServiceRPCName": "Forwarder",
"ServiceIP": "172.17.0.15",
"ServicePort": "9091",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"ThisServiceReplica": 6,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "forwarder-5.forwarder.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 7,
"ServiceLaunchime": "09/15/2018 11:27:32.905 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.840 PM UTC"
},
{
"ServiceName": "forwarder",
"ServiceRPCName": "Forwarder",
"ServiceIP": "172.17.0.24",
"ServicePort": "9091",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"ThisServiceReplica": 6,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "forwarder-6.forwarder.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 7,
"ServiceLaunchime": "09/15/2018 11:46:53.249 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.855 PM UTC"
},
{
"ServiceName": "forwarder",
"ServiceRPCName": "Forwarder",
"ServiceIP": "172.17.0.25",
"ServicePort": "9091",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"ThisServiceReplica": 6,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "forwarder-7.forwarder.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 7,
"ServiceLaunchime": "09/15/2018 11:46:54.241 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.857 PM UTC"
},
{
"ServiceName": "forwarder",
"ServiceRPCName": "Forwarder",
"ServiceIP": "172.17.0.26",
"ServicePort": "9091",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"ThisServiceReplica": 6,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "forwarder-8.forwarder.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 7,
"ServiceLaunchime": "09/15/2018 11:46:55.275 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.857 PM UTC"
}
],
"ServiceMapper": [
{
"ServiceName": "servicemapper",
"ServiceRPCName": "ServiceMapper",
"ServiceIP": "172.17.0.4",
"ServicePort": "7071",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "servicemapper-0.servicemapper.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 15,
"ServiceLaunchime": "09/15/2018 11:24:21.824 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.816 PM UTC"
},
{
"ServiceName": "servicemapper",
"ServiceRPCName": "ServiceMapper",
"ServiceIP": "172.17.0.5",
"ServicePort": "7071",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "servicemapper-1.servicemapper.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 15,
"ServiceLaunchime": "09/15/2018 11:24:23.097 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.817 PM UTC"
},
{
"ServiceName": "servicemapper",
"ServiceRPCName": "ServiceMapper",
"ServiceIP": "172.17.0.6",
"ServicePort": "7071",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "servicemapper-2.servicemapper.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 15,
"ServiceLaunchime": "09/15/2018 11:24:24.139 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.821 PM UTC"
}
],
"TopoProcessor": [
{
"ServiceName": "topoprocessor",
"ServiceRPCName": "TopoProcessor",
"ServiceIP": "172.17.0.7",
"ServicePort": "8081",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "topoprocessor-0.topoprocessor.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 66,
"ServiceLaunchime": "09/15/2018 11:23:24.360 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.821 PM UTC"
},
{
"ServiceName": "topoprocessor",
"ServiceRPCName": "TopoProcessor",
"ServiceIP": "172.17.0.8",
"ServicePort": "8081",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "topoprocessor-1.topoprocessor.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 0,
"ServiceLaunchime": "09/15/2018 11:23:25.344 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.823 PM UTC"
},
{
"ServiceName": "topoprocessor",
"ServiceRPCName": "TopoProcessor",
"ServiceIP": "172.17.0.9",
"ServicePort": "8081",
"ServiceMapper": "servicemapper",
"ServiceMapperPort": "7071",
"ServiceMapperReplica": 3,
"NameSpace": "default",
"ClusterDomain": "svc.cluster.local",
"ServiceInstance": "topoprocessor-2.topoprocessor.default.svc.cluster.local",
"ServiceStatus": 2,
"ServiceKnowledge": 0,
"ServiceLaunchime": "09/15/2018 11:23:26.377 PM UTC",
"ServiceUpdateTime": "09/15/2018 11:48:11.825 PM UTC"
}
]
}