IPv4 Addressing

Oakestra uses the reserved private IPv4 subnet 10.0.0.0/8 for its service addressing.

The detailed network partition can be taken from the table below.

SubnetSubnet descriptionTag
10.18.0.0/16Worker subnetworker
10.30.0.0/16Service and Instance IP subnetservice instance

In the following we give a short meaning for each tag.

  • worker : subnet assigned to a single worker node associated with a cluster inside Oakestra. Worker subnet has a /26 bitmask
  • service : semantic service address subnet
  • instance : single semantic service address mapped to a service instance throughout the lifetime of the instance

Example Application Assignment

If we deploy an example application A with two instances of microservice S (i.e. mathematical expression or equation and mathematical expression or equation ) on the worker node W, an example address configuration can be the following:

App AAddresses / Subnets assigned
Worker W10.18.30.64/26
SRound Robin: 10.30.0.1
S1Instance IP: 10.30.0.2
Namespace IP: 10.18.30.65
S2Instance IP: 10.30.0.3
Namespace IP: 10.18.30.66

Extending the Network Capabilities

In case you want to extend the network capabilities with a new load balancing strategy, you will have to make some changes to our network proxy and backend systems.

All the semantic routing resolution is done in the network manager’s outgoingProxy function in the proxy package. There is a special TODO in the code, that pinpoints where you should add your code.

Additionally, you will have to implement the detection and default handling of your new service IP in the root- and cluster-managers, such that new services get your address assigned with the needed meta tags in order to signify the new service IP type for later routing.

Ideally you should start in the sla/schema.py in the root orchestrator. There you should add specific fields in order for the developers to allow to set their desired service IP for your routing policy. The next stop should then be the root-service-manager, who handles the address reservations. Under operations/service_management.py you will have to add code and add to the JSON template to be loaded into the database. In order to keep the code tidy, the handler functions are located in network/subnetwork_management.py. There you will also find some inspiration on what the handler is supposed to do.

[
  { 
    "IpType": "<balancing-shortname>",
    "Address": "<your-addressv4-handler>()",
    "Address_v6": "<your-addressv6-handler>()"
  },
  {
    "IpType": "...",
    "Address": "...",
    "Address_v6": "..."
  }
]

Get your hands dirty

We encourage you to dig into the code and retrace the callstack for deployments yourself. This will make it easier for you to grasp the communication patterns between Oakestra components, as well as their distinct tasks!