/sfc-controller

Service Function Chain (SFC) Controller for stitching virtual and physical networking

Primary LanguageGoApache License 2.0Apache-2.0

SFC Controller

Build Status Coverage Status Go Report Card GoDoc GitHub license

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.

Architecture

The SFC Controller system architecture is shown in the following figure:

SFC System

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.

SFC Topologies

The SFC Controller supports the following topologies:

SFC Topolgies

Plugins

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)

Tools

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

Quickstart

For a quick start with the sfc-controller, you can use pre-built Docker images with the Agent and VPP on Dockerhub.

  1. 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

  2. Run VPP + VPP Agent in a Docker image:

docker pull ligato/sfc-controller
docker run -it --name sfc-contoller --rm ligato/sfc-controller
  1. Dump the the SFC Controller ETCD tree using sfcdump:
docker exec -it sfc-controller sfcdump

Documentation

GoDoc can be browsed online.

Next Steps

Read the README for the Development Docker Image for more details.

Deployment:

K8s integration

Contribution:

If you are interested in contributing, please see the contribution guidelines.