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

De Wiki d'activités IMA
(Commutateur et interfaces virtuels)
(Création des partitions)
Ligne 9 : Ligne 9 :
 
Dans un premier temps, nous avons créé une partition pour bootstrap. Pour cela, après s'être mis en su, nous avons utilisé les commandes suivantes:
 
Dans un premier temps, nous avons créé une partition pour bootstrap. Pour cela, après s'être mis en su, nous avons utilisé les commandes suivantes:
  
* '''dd if=/dev/zero of=/disk1 bs=1024k count=1024''' : Copie d'un fichier nul. L'argument bs (block size) définit une taille de partition de 10Go.
+
  '''dd if=/dev/zero of=/disk1 bs=1024k count=1024''' // Copie d'un fichier nul. L'argument bs (block size) définit une taille de partition de 10Go.
* '''mkfs /disk1''' : Permet de l'utiliser en tant que partition.
+
  '''mkfs /disk1''' // Permet de l'utiliser en tant que partition.
* '''mkdir /tmp/fs1''' : Création de l'endroit où sera initialisé le file system.
+
  '''mkdir /tmp/fs1''' // Création de l'endroit où sera initialisé le file system.
* '''mount –o loop disk1 /tmp/fs1''' : Monte la partition sur ce système de fichiers.
+
  '''mount –o loop disk1 /tmp/fs1''' // Monte la partition sur ce système de fichiers.
* '''export http_proxy=http://proxy.polytech-lille.fr:3128''' : Permet la prise en compte du proxy pour l'ajout des dépendances.
+
  '''export http_proxy=http://proxy.polytech-lille.fr:3128''' // Permet la prise en compte du proxy pour l'ajout des dépendances.
  
  

Version du 19 novembre 2018 à 10:19

Présentation du Sujet

Séance 1 : 12/11/2018

Dans cette séance nous devions était de créer des conteneurs "à la main". L'objectif étant de créer 3 conteneurs connectés entre eux via un commutateur virtuel. Un d'entre eux est également connecté au commutateur virtuel de la machine de TP étant sur bridge. Ce sera le mandataire inverse qui permettra de rediriger les flux vers les différentes machines.

Création des partitions

Dans un premier temps, nous avons créé une partition pour bootstrap. Pour cela, après s'être mis en su, nous avons utilisé les commandes suivantes:

 dd if=/dev/zero of=/disk1 bs=1024k count=1024 // Copie d'un fichier nul. L'argument bs (block size) définit une taille de partition de 10Go.
 mkfs /disk1 // Permet de l'utiliser en tant que partition.
 mkdir /tmp/fs1 // Création de l'endroit où sera initialisé le file system.
 mount –o loop disk1 /tmp/fs1 // Monte la partition sur ce système de fichiers.
 export http_proxy=http://proxy.polytech-lille.fr:3128 // Permet la prise en compte du proxy pour l'ajout des dépendances.


Et finalement, nous avons lancé Debootstrap qui installe un système Debian de base avec les dépendances spécifiées : debootstrap --include=apache2,vi stable /tmp/fs1. Cette commande prend un peu de temps (5 à 10 min). Une fois que debootstrap a fini, il faut répéter l'opération deux fois : démonter disk1, le copier dans deux disques disk2 et disk3, créer les systèmes de fichiers fs2 et fs3 puis remonter les 3 disques sur leur système de fichier respectif.

Remarque: Nous avions dans un premier temps oublié d'exécuter la commande echo "proc /proc proc defaults 0 0" >> /tmp/fs1/etc/fstab permettant la préparation du montage du pseudo système de fichier /proc. Cela entraînait une erreur lors de la création des conteneurs.

Commutateur et interfaces virtuels

La création du commutateur virtuel se fait via la commande suivante:

ip link add commutateurTP type bridge


Création des interfaces virtuelles:

Une fois que le commutateur créé il nous a fallu créer et ajouter des interfaces virtuelles sur ce commutateur. Ces interfaces permettent de connecter les conteneurs. Nous les avons nommées vif pour virtual interface. Vif 1, Vif 2 et Vif3 seront liés à eth0 et vif 4 sera lié à eth1 pour le mandataire inverse.

 ip link add vif1 type veth peer name eth0@vif1 // Exemple de création de l'interface vif 1.
 ip link set vif1 master commutateurTP // Ajout de l'interface dans le commutateur.
 ip link set vif1 up // Active l'interface.

Création des conteneurs

On commence par la création d'un processus isolé à l'aide de la commande unshare. Cette commande permet de séparer les espaces de noms indiqués du processus parent puis exécuter le programme indiqué:

unshare -p -f -m -n -u chroot tmp/fs1 /bin/sh -c "mount /proc ; /bin/bash" ;
  • Les arguments -n et -u assurent un réseau indépendant. Ce que l'on peut vérifier au sein du conteneur à l'aide de la commande ip l
  • L'argument -m permet d'isoler l'espace de noms de montage.
  • L'argument -p permet d'isoler l'espace de noms PID ce que l'on peut vérifier avec la commande psaux
  • L'argument -f permet Engendrer le programme indiqué comme un processus fils d’unshare plutôt que de l’exécuter directement.


Déplacement des pairs dans un espace réseau différent:

Il faut ensuit lier les conteneurs à notre commutateur virtuel. Un des 3 conteneurs sera également lié au bridge de la machine :

  • ps aux | grep unshare: Récupération des différents PID.
  • ip link set eth0@vif1 netns /proc/<PID_Récupéré>/ns/net name eth0 : Lie l'interface virtuelle 1 à notre commutateur virtuel.
  • ip link set eth1@vif4 netns /proc/<PID_Récupéré>/ns/net name eth1 : Lie l'interface virtuelle 1 au bridge de la Zabeth, faisant de notre vif1 le mandataire inverse.

Configuration réseau dans l’espace alternatif :

On a ensuit ajouté à chaque conteneur une adresse ip. Celles-ci nous permettront d'établir la communication. Pour cela nous sommes allés directement au sein du conteneur et nous avons ajouté l'adresse 192.168.60.41/24 (Adresse choisie arbitrairement de la forme 192.168.60.<n°groupe><n°conteneur>).

Ceci s'effectue à l'aide de la commande ip addr add 192.168.60.41/24.

Il faut également activer les interfaces à l'aide de la commande ip link set eth0 up.

Séance 2 : 19/11/2018

Nous avons du dans un premier temps refaire ce que nous avions fait lors de la séance précédente. Nous arrivions pas pas à ping les différents conteneurs. Nous avions oublié deux commandes :

  • ifup lo : Activation de la boucle locale sur le conteneur
  • ip link set commutateurTP up : Activation du commutateur virtuel sur la machine de


Configuration des serveurs apaches

Création des noms de domaine:

Il nous a fallu dans un premier temps créer 3 noms de domaine (1 pour le mandataire inverse et 2 pour chaque conteneur). Pour cela nous nous somme rendus sur l'hébergeur Gandi à l'aide des identifiants qui nous étaient fournis. Dans la rubrique domaine nous avons ajouté une configuration DNS dans le domaine plil.space:

  • Type : A pour mandataire inverse -> Permet de relier un nom de domaine à l'adresse IP d'un serveur et Cname pour les conteneurs.
  • TTL : Nous avons laissé la valeur par défaut qui était de 1800 secondes.
  • Name : mandatairecoheaseao pour le mandataire inverse et coheasao1,2 pour les 2 conteneurs.
  • Adresse ipV4 (pour le mandataire inverse) : 172.26.145.40 -> Ip du bridge de la machine.
  • Nom d'hôte (pour les deux autres noms de domaine) : mandatairecohesao.


Création du fichier de configuration:

Le serveur web apache2 peut peut gérer plusieurs sites. En effet chaque site est défini comme un serveur virtuel et a son fichier de configuration situé dans /etc/apache2/sites-available. Par exemple pour le second conteneur, fs3, on crée un fichier cohesao2 à cet endroit qui décrit le site :

 <VirtualHost 192.168.60.43:80>
   ServerName plil.space.cohesao2 Nom du domaine
   ServerAdmin cohesao@plil.space.cohesao2
   DocumentRoot /var/www/  Location où le site sera initialisé
   <Directory /var/www/>
       Order allow,deny
       Allow from all
   </Directory>
 </VirtualHost>

On répète la même opération au sein du conteneur fs2.

  • Une fois ces deux fichiers créés, il faut créer un lien symbolique entre les fichiers créés et le répertoire sites-enabled à l'aide de la commande ln -s /etc/apache2/sites-available/cohesao2 /etc/apache2/sites-enabled/cohesao2.
  • Pour finir relancer le serveur Apache2 pour prendre en compte les modifications à l'aide de la commande /etc/init.d/apache2 restart


Pour le mandataire inverse:

On active les modules proxy avec la commande a2enmod proxy proxy_http:

  • Le module proxy permet l'implémentation d'un serveur mandataire/passerelle
  • Le module proxy_http apporte le support des requêtes HTTP et HTTPS au module proxy

Dans le fichier par défaut du dossier sites-available on ajoute les lignes suivantes

 ProxyPass /cohesao1 http://192.168.60.42/
 ProxyPass /cohesao2 http://192.168.60.43/
 ProxyPassReverse /cohesao1 http://192.168.60.42/
 ProxyPassReverse /cohesao2 http://192.168.60.43/
 ProxtRequest Off