Please note that the content of this repository is currently WORK IN PROGRESS.
The SFC Controller is a Golang implementation of an orchestration module for providing data-plane connectivity for cloud native containers. The containers may be Ligato VPP-agent enabled containers which in turn use VPP based cloud-native Virtual Network Functions (VNFs) or the containers may be application containers communicating via veth interfaces. The VPP Agent is built on top of the CN-Infra platform for developing cloud-native Virtual Network Functions (VNFs).
The SFC Controller supports a wide variety of topologies. The controller can effect connectivity for containers on-host, inter-host and host to external router.
The SFC Controller system architecture is shown in the following figure:
The architecture has the following components:
- SFC Controller: can be deployed in its own container and is responsible for managing the data plane connectivity for a set of hosts, external routers and, of course, the containers. A model of the hosts, external routers, and chains or sets of containers is given to the SFC controller either through a yaml config file or via REST api calls.
- etcd: the communication of the configuration is done via ETCD. Each VPP agent enabled container in the system is responsible for reading its branch of the ETCD tree. For non-VPP containers, the VSwitch VPP will perform the programming of the veth interfaces. All of the configuration in the ETCD tree for data-plane connectivity is written to by the SFC controller.
- VSwitch VPP container: there is one of these per host. This is a special container that the SFC Controller uses to wire the containers together, and to wire the containers to external routers and other SFC Controller controlled hosts.
- VPP agent containers: these containers are VPP enabled and have a Ligato VPP-agent which controls the VPP in the container. VNF's are developed as extensions to VPP.
- non-VPP containers: these are application containers which communicate with other containers or externally via veth interfaces. The VSwitch VPP creates the veth interfaces.
The SFC Controller supports the following topologies:
The SFC controller is written with a plugin architecture so that functionality can be extended.
The set of plugins in the SFC Controller is as follows:
- l2_driver - l2 bridge, vxlan tunnel plugin (wire inter-host, and host-external router)
- CN-Infra core - lifecycle management of plugins (loading, initialization, unloading)
The SFC Controller repository also contains tools for building and troubleshooting of VNFs based on the VPP Agent:
- sfcdump - a CLI tool that shows a raw dump of a set of sfc-controller datastrcutures and VPP agents
For a quick start with the sfc-controller, you can use pre-built Docker images with the Agent and VPP on Dockerhub.
-
Start ETCD and Kafka on your host (e.g. in Docker as described here). Note: The SFC Controller in the pre-built Docker image will not start if it can't connect to both Etcd and Kafka. Note: also start the VSwitch VPP. See the Quickstart VSwitch VPP
-
Run VPP + VPP Agent in a Docker image:
docker pull ligato/sfc-controller
docker run -it --name sfc-contoller --rm ligato/sfc-controller
- Dump the the SFC Controller ETCD tree using sfcdump:
docker exec -it sfc-controller sfcdump
GoDoc can be browsed online.
Read the README for the Development Docker Image for more details.
If you are interested in contributing, please see the contribution guidelines.