Il s'agit d'un TP noté. Il faudra rendre un rapport rédigé et imagé au plus tard au 04/05/2018.
Avec l'aide de docker-machine et des instructions ci-dessous créer 3 instances de type m1.xsmall vous devez utiliser l'image “SRIV-SVC”. Le hostname doit comprendre votre prénom et le type de noeud swarm (workerN ou manager).
export OS_USERNAME=$(read USER; echo $USER) export OS_DOMAIN_NAME=univ-lyon1.fr export OS_SSH_USER=ubuntu export OS_PASSWORD=$(read -s PASSWORD; echo $PASSWORD)
docker network ls
pour la question I.4.
Maintenant, vous pouvez initialiser votre cluster swarm avec docker swarm init
. Puis intégrez vos workers à votre cluster.
docker network ls
, que constatez vous?Faites un build de cette image sur les 3 machines ou vous pouvez utiliser un repository c'est à votre convenance.
Petite astuce, pour faire les captures de l’hôte docker depuis votre machine vous pouvez utiliser cette méthode:
mkfifo /tmp/wirepipe nohup wireshark-qt -k -i /tmp/wirepipe docker-machine ssh XXXX sudo tcpdump -i ens3 -w - not port 22 > /tmp/wirepipe
Vous allez créer un service avec 2 replicats à partir de l'image précédemment construite. On a lancé 2 replicats alors que notre cluster est composé de 3 machines, il y a donc une machine sans container. Connectez vous sur cette machine faites une capture réseau du trafic. Lancer Firefox et faites des requêtes HTTP vers cet hôte.
ens3
avec l'aide d'un logiciel comme wireshark, est ce que le VNI est valide? Pourquoi Wireshark affiche 08 pour le champ flags?ctrl+shit+r
sur Firefox plusieurs fois, regardez à nouveau Wireshark? Vous devriez trouver la nouvelle adresse du VTEP, donnez cette adresse.
Dés que vous avez initialisé votre swarm, vous avez vu apparaître cette nouvelle carte réseau docker_gwbridge
. On va maintenant vérifier son fonctionnement. Vous allez maintenant sur un hôte avec un container actif. Faites un docker exec ping 134.214.100.6
. Si vous êtes dans le container, vous pouvez le kill facilement, si vous êtes sur l’hôte, garder en tête que vous avez un ping qui tourne.
docker inspect
donnez l'adresse IP de votre container? Sur quel réseau cette adresse IP est située? Est ce qu'il est possible d'atteindre 134.214.100.6 en étant sur ce réseau?ip addr show
dans votre container? Est ce qu'une nouvelle adresse IP apparaît? Si oui, faites un screenshort de la sortie de la commande.ip addr show
. Vous avez normalement 2 veth. Pour le moment, on va faire une recherche à l'aveugle, faites un wireshark sur un interface. Si vous voyez le ping, vous avez trouvé l'interface de l’hôte où la trame transite pour ping 134.214.100.6 sinon faites une capture sur l'autre vethDocker ne respecte pas la convention pour les espaces de nom réseau. Il va falloir créer un lien afin qu'on puisse utiliser ip netns. Sur un hôte exécutez ces commandes:
sudo ln -s /var/run/docker/netns /var/run/netns sudo ip netns
ip addr show
sur votre hôte, est ce que vous retrouvez le netns id pour la veth de la question QIII.4? Joignez un screenshot avec les informations intéressantes des 2 commandes (ip addr show et ip netns)ip netns exec le nom ip addr show
. Que constatez vous? Est ce qu'il s'agit d'un container? docker network ls
? Dans ce namespace le bridge br0 fait le lien entre l'interface vxlan0 et l'eth0 du container. Qu'est ce qui nous prouve ça avec la commande ip addr show
?ingress_box
, à quel autre namespace est il connecté? A quoi sert il? Vous pouvez vous aider des identifiants des cartes réseaux.
Afin de faciliter la réalisation du schéma, nous allons utiliser la commande brctl show
iptables -L
, vous pouvez prouver que le port est ouvert. Vers quelle adresse IP les requêtes sont envoyées? Vous pouvez vous aider de la commande iptables -t nat -nL
.Pour la réponse précédente vous avez peut être vu le mot ipvs, il s'agit du load balancer implémenté dans le noyau Linux
ip netns exec ingress_sbox iptables -nL -t mangle
vers quelle adresse IP les requêtes sont envoyées? A quoi correspond cette IP? Est ce un VTEP? Si non, qu'est ce que c'est?
Pour le plaisir on peut maintenant regarder les connexions actives avec la commande ip netns exec ingress_sbox ipvsadm -ln
et on comprend comment le load balancing se fait sur un simple GET répétitif
Pour finaliser votre rapport vous devez produire un schéma d'architecture. Vous pouvez utiliser Microsoft Visio ou bien draw.io.
Sur ce schéma, il doit apparaître :