Skip to the content.

Telephony Network Service (MANO) Example

This example of a multi-cluster network service comprises a VNF (Virtualized Network Function), a CNF (Containerized, or Cloud-native Network Function), and a PNF (Physical Network Function).

It provides an end-to-end telephony service based on Asterisk PBX between a central site and an edge site. An SIP/RTP trunk is set up on a data plane, which is implemented as simple routing for demonstration purposes, but could be extended to a full-blown SD-WAN. The result is that SIP phones connected to either site can all call each other.


The entire example is also available as a set of independent Kubernetes manifests and scripts, without TOSCA and Turandot’s orchestration. See the repository.

Helper Scripts

Standing Up the Router PNF


Deploying the Network Service

You will need two Kubernetes clusters to run this demo. Let’s call them “central” and “edge”.

Make sure Multus is installed on both clusters, and that KubeVirt is installed on the “central” cluster.

Note that it is possible to run multiple instances of Minikube on the same machine. E.g.:

minikube start --profile=central ...
minikube start --profile=edge ... 

Let’s install Turandot on the “central” cluster. You can use the --kubeconfig switch to specify the config for that cluster (default is at ~/.kube/config), or in the case of Minikube switch to it using a command:

minikube profile central
turandot install --site=central --namespace=workspace --wait

Note that install will create the namespace if it does not exist. Let’s set that namespace as our default so that we don’t have to specify it from now on:

kubectl config set-context --current --namespace=workspace

We’ll set up a delegate to the “edge” cluster. If you have a separate config file for it, use the --delegate-kubeconfig switch. Or if it’s stored in a separate context within the default config (which is the case with Minikube), use --delegate-context:

turandot delegate set edge --delegate-context=edge

Let’s register all our CSARs in the repository:

turandot template register telephony-network-service --file=dist/telephony-network-service.csar
turandot template register simple-data-plane --file=dist/simple-data-plane.csar
turandot template register asterisk-cnf --file=dist/asterisk-cnf.csar
turandot template register asterisk-vnf --file=dist/asterisk-vnf.csar

Finally, let’s deploy:

turandot service deploy telephony-network-service --template=telephony-network-service

You should see Asterisk VNF and the data plane deployed on the “central” cluster, and then Turandot installing itself on the “edge” cluster, where it will deploy Asterisk CNF and the data plane. Finally the VNF and CNF will self-configure, Turandot will configure the PNF, and the network service will be up.