TP sysres IMA5sc 2018/2019 G7
Sommaire
Wiki de TP
TP GIS
Conteneurs "à la main"
Mise en place des conteneurs
- Création d'une partition:
dd if=/dev/zero of=/disk1 bs=1024K count=10240
- Formatage :
mtfs.etx4 /disk1
- Montage de la partition:
mount /disk1 /mnt
- Installation d'un système Debian:
debootstrap --include=apache2,nano stable /mnt
- Préparation du montage du pseudo système de fichier /proc:
echo "proc /proc proc defaults 0 0" >> rootfs/etc/fstab
- Démontage :
umount /mnt
- Copie en 2 exemplaires:
cp /disk1 /disk2 cp /disk1 /disk3
- Montage des 3 partitions :
mount -oloop /disk1 /mnt/dsk1 mount -oloop /disk2 /mnt/dsk2 mount -oloop /disk3 /mnt/dsk3
- Création du processus isolé par unshare:
unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c "mount /proc ; /bin/bash" unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c "mount /proc ; /bin/bash" unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c "mount /proc ; /bin/bash"
Configuration réseau
- Création d'un commutateur logiciel:
ip link add mehcret2 type bridge
- Création des interfaces virtuelles:
ip link add vif1 type veth peer name eth0@vif1 ip link add vif2 type veth peer name eth0@vif2 ip link add vif3 type veth peer name eth0@vif3 ip link add vif4 type veth peer name eth1@vif4
- Ajout d'interfaces dans le commutateur :
ip link set vif1 master mehcret2 ip link set vif2 master mehcret2 ip link set vif3 master mehcret2 ip link set vif4 master bridge
- Activation des interfaces:
ip link set eth0 up ip link set eth1 up
- Récupération du PID des conteneurs :
ps auxwww | grep unshare
- Ajout des interfaces dans les conteneurs :
ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1) ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2) ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2) ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)
- Activation du pont:
ip address add dev mehcret2 192.168.60.0/24
- Attribution des adresses:
ip address add dev eth0 192.168.60.51/24 (dsk1) ip address add dev eth0 192.168.60.52/24 (dsk2) ip address add dev eth0 192.168.60.53/24 (dsk3) ip address add dev eth1 172.26.145.67/24 (dsk2) ip route add default via 172.26.145.254 (dsk2)
- Activation :
ip link set eth0 up ip link set vif1 up ip link set vif2 up ip link set vif3 up ip link set vif4 up ip link set mehcret2 up
On peut désormais pinger entre les différents conteneurs.
Configuration des serveurs Web
Nous devons maintenant mettre en place les serveurs apache.
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine plil.space, on ajoute les enregistrements suivants :
- mndtMehcret A 172.26.145.67 (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)
- web1Mehcret CNAME mndtMehcret (Serveur web du conteneur 1)
- web2Mehcret CNAME mndtMhecret (Serveur web du conteneur 3)
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :
<VirtualHost *:80> ServerName web1mehcret.plil.space Options Indexes FollowSymLinks DocumentRoot /var/www/html/web1mehcret/ </VirtualHost>
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés. On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web.
Il faut maintenant mettre en place le reverse proxy. Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :
<VirtualHost *:80> ServerName mndtMehcret.plil.space ProxyPass "/web1" "http://192.168.60.51/" ProxyPassReverse "/web1" "http://192.168.60.51/" ProxyPass "/web2" "http://"http://192.168.60.53/" ProxyPassReverse "/web2" "http://192.168.60.53/" </VirtualHost>
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :
$ service apache2 restart
Pour utiliser apache en mode reverse proxy, on execute la commande :
$ a2enmod proxy proxy_http
11h25 : Serveurs Web unshare OK
Conteneurs Docker
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables. Nous exécutons ensuite la commande :
$ iptables-save
Puis on redémarre le service Docker :
$ service docker restart
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :
$ docker run -i -t debian
Dans le conteneur, nous ajoutons le proxy de l'école :
$ export http_proxy=http://proxy.polytech-lille.fr:3128/
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:
$ apt-get update $ apt-get install apache2, nano, vim
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires :
$ docker commit [IDduConteneur] mehcret
On créé un réseau Docker pour isoler nos conteneurs ensemble :
$ docker network create --driver bridge mehcretnetwork
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine :
$ docker run -i --network mehcretnetwork --name mehcret1 mehcret $ docker run -i --network mehcretnetwork --name mehcret2 mehcret $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A. Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.
10h30 Serveurs Web (docker) OK