Containernet is a fork of the Mininet network emulator that uses Docker containers as hosts in emulated network topologies.
Multipass describes how build a Mininet testbed that provides real-time traffic visbility using sFlow-RT. This article adapts the testbed for Containernet.
multipass launch --name=containernet bionic multipass exec containernet -- sudo apt update multipass exec containernet -- sudo apt -y install ansible git aptitude default-jre multipass exec containernet -- git clone https://github.com/containernet/containernet.git multipass exec containernet -- sudo ansible-playbook -i "localhost," -c local containernet/ansible/install.yml multipass exec containernet -- sudo /bin/sh -c "cd containernet; make develop" multipass exec containernet -- wget https://inmon.com/products/sFlow-RT/sflow-rt.tar.gz multipass exec containernet -- tar -xzf sflow-rt.tar.gz multipass exec containernet -- ./sflow-rt/get-app.sh sflow-rt mininet-dashboard
Run the above commands in a terminal to create the Containernet virtual machine.
multipass list
List the virtual machines
Name State IPv4 Image primary Stopped -- Ubuntu 20.04 LTS containernet Running 192.168.64.12 Ubuntu 18.04 LTS 172.17.0.1
Find the IP address of the mininet virtual machine we just created (192.168.64.12).
multipass exec containernet -- ./sflow-rt/start.sh
Start sFlow-RT. Use a web browser to connect to the VM and access the Mininet Dashboad application running on sFlow-RT, in this case http://192.168.64.12:8008/app/mininet-dashboard/html/
Open a second shell.
multipass shell containernet
Connet to the Containernet virtual machine.
cp containernet/examples/containernet_example.py .
Copy the Containernet Get started example script.
#!/usr/bin/python
"""
This is the most simple example to showcase Containernet.
"""
from mininet.net import Containernet
from mininet.node import Controller
from mininet.cli import CLI
from mininet.link import TCLink
from mininet.log import info, setLogLevel
setLogLevel('info')
exec(open("./sflow-rt/extras/sflow.py").read())
net = Containernet(controller=Controller)
info('*** Adding controller\n')
net.addController('c0')
info('*** Adding docker containers\n')
d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty")
d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty")
info('*** Adding switches\n')
s1 = net.addSwitch('s1')
s2 = net.addSwitch('s2')
info('*** Creating links\n')
net.addLink(d1, s1)
net.addLink(s1, s2, cls=TCLink, delay='100ms', bw=1)
net.addLink(s2, d2)
info('*** Starting network\n')
net.start()
info('*** Testing connectivity\n')
net.ping([d1, d2])
info('*** Running CLI\n')
CLI(net)
info('*** Stopping network')
net.stop()
Edit the copy and add the highlighted line to enable sFlow monitoring:
sudo python3 containernet_example.py
Run the Containernet example script.