TP sysres IMA5sc 2018/2019 G7 : Différence entre versions

De Wiki d'activités IMA
(Conteneurs "à la main")
(Conteneurs "à la main")
Ligne 84 : Ligne 84 :
  
 
Nous devons maintenant mettre en place les serveurs apache.
 
Nous devons maintenant mettre en place les serveurs apache.
Dans le repertoire /etc/apache2/sites-available/, nous créons un fichier contenant la configuration de chaque serveur :
+
 
 +
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/ :
  
 
* '''Configuration''':
 
* '''Configuration''':
Ligne 93 : Ligne 102 :
 
     </VirtualHost>  
 
     </VirtualHost>  
  
Dans les dossiers /var/www/html/web1mehcret et /var/www/html/web2mehcret dans leur conteneurs respectifs, nous créons une page index.html contenant une simple balise h1.  
+
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.  
  
Nous mettons en place les sous domaines sous GANDI. Nous allons dans '''Enregistrements DNS''', nous cliquons sur ajouter : nous réalisons un enregistrement de type A, avec pour nom du reverse proxy mndtMehcret, et pointant sur l'adresse du reverse Proxy 172.26.145.67
+
Il faut maintenant mettre en place le reverse proxy.  
Nous réalisons deux autres enregistrements, de type CNAME cette fois, pour nos conteneurs, avec pour noms web1Mehcret et web2Mehcret et dont le mandataire est celui créé précédemment.
+
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :
 
 
Dans le conteneur 2, dont l'interface virtuelle est connectée à la fois à eth0 et eth1, nous mettons en place le mandataire inverse :
 
  
 
     <VirtualHost *:80>
 
     <VirtualHost *:80>
Ligne 107 : Ligne 115 :
 
       ProxyPassReverse "/web2" "http://192.168.60.53/"
 
       ProxyPassReverse "/web2" "http://192.168.60.53/"
 
     </VirtualHost>
 
     </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 :
 
Pour utiliser apache en mode reverse proxy, on execute la commande :

Version du 19 novembre 2018 à 14:26

Wiki de TP

Conteneurs "à la main"

  • 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"
  • 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
  • Configuration réseau des conteneurs :
   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.

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/ :

  • Configuration:
   <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

Nous lançons un conteneur basé sur l'image officielle de debian :

   $ docker run -i -t  debian

Dans le conteneur, nous mettons en place le mandataire Web de l'école :

   $t export http_proxy=http://proxy.polytech-lille.fr:3128/

A l’extérieur du conteneur, nous commentons la ligne contenant iptables dans le fichier /etc/default/docker. Nous exécutons ensuite :

   $ iptables-save

Avant de redémarrer le démon docker :

   $ service docker restart


Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte (nano) :

   $ apt-get update
   $ apt-get install apache2, nano, vim

On sauvegarde le conteneur : En dehors du conteneur :

   $ docker commit [IDduConteneur] mehcret

Création du réseau Docker :

   $ docker network create --driver bridge mehcretnetwork

Nous lançons ensuite 3 conteneurs :

   $ 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 rencontrons une erreur lors du lancement du troisième conteneur en raison du service apache qui tourne sur la zabeth. Il faut le désactiver avant de lancer le conteneur. Nous créons un sous domaine, dockerMehcret.plil.space pointant sur l'addresse IP de notre bridge.

Nous devons maintenant configurer le network des conteneurs.

10h30 Serveurs Web (docker) OK