Some experimentation is on going to understand some practical aspects of implementation around a container based vNF chain. Below are some notes from those experiments

Using Docker Events to Connect Chains

Design Constraints

    • Containers which wish to participate in this system shall have a label of the form: 
    • com.opencord.network.graph={\"links\":{\"ifaceName\":\"UUID\", ...}}
    • When two containers (on any host) have the same UUID, interfaces (with the ifaceNames given) shall be created and injected into the containers.
    • Containers without these labels MUST be ignored.
    • If the containers are on the same host, they shall be connected with a veth pair.
    • If the containers are on different hosts, traffic shall be vlan- or vxlan-tagged and then sent to interface which pipes directly to/from the corresponding host.
    • On single or multiple-host restart, all network topology shall be re-read from the docker daemon.
    • On single or multi-host restart, existing network config shall be modified only as needed (it shall not be torn down and rebuilt).

Implementation

    • golang
    • One network container per host (responsible for all networking and all containers on that host)
    • Network management containers directly accesses the host's docker daemon.
    • Networking things:
      • Container does use its own separate network namespace (does not use host namespace)
      • Container self-injects the host's leaf-connected 40GE interfaces
      • Container injects interfaces into the network namespace of other containers.