Conducting a Network Mapping Experiment on EdgeNet
In this tutorial, we’re going to deploy a world-class network mapping system on EdgeNet, Paris Traceroute. Paris Traceroute is designed to overcome the traditional limitations in traceroute. Specifically, classic traceoute fails when routers load-balance across multiple paths, a common Internet feature. Paris Traceroute is a staple of modern network mapping, used by M-Lab extensively.
Multi-level MDA-Lite Paris Traceroute is a form of traceroute with a Multi-path Detection Algorithm (MDA), which attempts to avoid as many redundant traceroute packets as possible. The inventors’ aim is to reduce the packets necessary while also being confident they have mapped all of the path diversity.
What You Will Do
The EdgeNet team at the UPMC Sorbonne Universitès and PlanetLab Europe has prepared a packaged version of Multi-level MDA Lite Paris Traceroute for easy deployment on EdgeNet, and a command-line client that can be run on your local machine to get measurements from any EdgeNet site. You will:
- Download the YAML file the EdgeNet team has prepared
- Deploy it across EdgeNet
- Use the command-line client to get measurement date
Technologies You Will Use
The technologies that you will use are:
- Kubernetes, to deploy the containers to the EdgeNet nodes
- Kubectl to run measurements and (optionally) to do the deployment.
- EdgeNet (see Using EdgeNet), making a note of your namespace
- Install kubectl on your local machine.
Get the Files to Deploy the Slice and Query Multi-level MDA Lite Paris Traceroute
- The YAML file is at paris_traceroute.yaml.
- The shell script to query Paris Traceroute is at paris_traceroute.sh. This is a convenience wrapper around a command line; if you don’t want to use it, the command line
kubectl exec <container-name> -- bash -c "python3 multilevel-mda-lite/MDALite.py <ip address>"will work. If you use paris_traceroute.sh, the command line is
./paris_traceroute.sh <short-container-name> <ip-address>
Deploy the Service on EdgeNet
Using the Dashboard
Click the Create Button in the top right. You should see this screen:
You can then “Create from Text Input” or “Create from File”. For either, use the file you downloaded, which will look like this:
apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: multilevel-mda-lite-paristraceroute spec: template: metadata: labels: app: multilevel-mda-lite-paristraceroute spec: hostNetwork: true containers: - name: multilevel-mda-lite-paristraceroute image: bljuma/multilevel-mda-lite-paristraceroute command: [ "/bin/bash", "-c", "--" ] args: [ "while true; do sleep 30; done;" ]
hostNetwork:true tells Kubernetes to expose the ports from
the Pod. A
DaemonSet places a Pod on every node in EdgeNet. The name of your application is
it will use the Docker image
bljuma/multilevel-mda-lite-paristraceroute (an Ubuntu OS with
curl installed). It will then loop continuously, doing nothing. That’s where the
kubectl exec comes in.
paris_traceroute.yaml in any convenient directory, and then, from the command line, run
$ kubectl apply -f paris_traceroute.yaml. To see your pods, run
$ kubectl get pods -o wide. For a full set of
kubectl commands and options, see Kubectl cheat sheet.
Make Paris Traceroute do something
All the deployment has essentially done is set up measurement servers; to run an actual measurement, you must query the server. Typically, this would be done by setting up a web server as a front end, which uses ports very quickly. Fortunately, Kubernetes and Docker permit
ssh access into a running container over the existing
kubectl port, through
kubectl exec takes two arguments: the name of the pod to execute the command, and the command itself. The name of the pod will typically be
<deployment-name>-<hash>; in our case,
multilevel-mda-lite-paristraceroute-6xfbd, so a typical command would be
kubectl exec multilevel-mda-lite-paristraceroute-6xfbd "python3 multilevel-mda-lite/MDALite.py 220.127.116.11.
paris_traceoute.sh simplifies this to
./paris_traceroute.sh <hash> <ip-address>, e.g.
./paris_traceroute.sh 6xfbd 18.104.22.168
The results will come out in text on your local machine.