TP sysres IMA5sc 2018/2019 G2

De Wiki d'activités IMA

TP GIS4 - Conteneur réalisation manuelle

Création des systèmes fichier

Dans le répertoire /home/pifou/Documents/IMA5/JDQB/PRA/ (Zabeth09)

 dd if=/dev/zero of=disk1 bs=1024k count=10240
 mkfs disk1

Dans /tmp création de répertoires pour le stockage

 mkdir JDQB_DISK1
 mkdir JDQB_DISK2
 mkdir JDQB_DISK3
 mount -o loop disk1 /tmp/JDQB_DISK1
 debootstrap --include=apache2,nano stable /tmp/JDQB_DISK1
 echo "proc /proc defaults 0 0" >> /tmp/JDQB_DISK1/etc/fstab
 umount -d /tmp/JDQB_DISK1

On clone le disk1 pour avoir disk2 et disk3 (cp)

On remonte les trois disques

 mount -o loop diskX /tmp/JDQB_DISKX

Lancement des conteneurs

Ouverture de trois terminaux en root, puis utilisation de la commande dans chacun des terminaux

 unshare -n -u -p -f -m chroot /tmp/JDQB_DISKX /bin/sh -c "mount /proc ; /bin/bash" ;


Dans chaque conteneur

 ip l set eth0 up

Cette commande s'applique aussi à eth1 pour le conteneur 1

Mise en place commutateur virtuel

Création des interfaces liées

iface_virt_X (interface virtuelle X) <-> iface_ns_X (interface namespace X)

 ip link add iface_virt_1 type veth peer name iface_ns_1
 ip link add iface_virt_2 type veth peer name iface_ns_2
 ip link add iface_virt_3 type veth peer name iface_ns_3


Création de notre propre pont

 ip link add jdqb_bridge type bridge

Ajout des parties des interfaces dans le commutateur

 ip link set iface_virt_1 master jdqb_bridge
 ip link set iface_virt_2 master jdqb_bridge
 ip link set iface_virt_3 master jdqb_bridge


Activation des interfaces

 ip link set iface_virt_1 up
 ip link set iface_virt_2 up 
 ip link set iface_virt_3 up  

Activation du pont

 ip address add dev jdqb_bridge 192.168.0.1/24

Montée du pont

 ip link set jdqb_bridge up

Connexion des conteneurs à leur interface virtuelle respective

 ip link set iface_ns_1 netns /proc/<PID1>/ns/net name eth0
 ip link set iface_ns_2 netns /proc/<PID2>/ns/net name eth0
 ip link set iface_ns_3 netns /proc/<PID3>/ns/net name eth0

Obtention des PIDs

 ps aux | grep unshare

Quatrième interface, reliant le mandataire web inverse (conteneur 1) et le bridge de zabeth09

 ip link add iface_virt_0 type veth peer name iface_ns_0
 ip link set iface_virt_0 master bridge
 ip link set iface_virt_0 up
 ip link set iface_ns_0 netns /proc/<PID1>/ns/net name eth1

Modification de la table IP

 iptables -F
 iptables -F -t nat
 iptables -P FORWARD ACCEPT

Attribution des adresses aux conteneurs

 nsenter -t <PID1> -n ip address add dev eth0 192.168.0.91/24
 nsenter -t <PID2> -n ip address add dev eth0 192.168.0.92/24
 nsenter -t <PID3> -n ip address add dev eth0 192.168.0.93/24
 nsenter -t <PID1> -n ip address add dev eth1 172.26.145.90/24

Mandataire inverse

Configuration Apache2

Afin de configurer notre premier conteneur en mandataire inverse, nous modifions le fichier : /etc/apache2/sites-available/000-default.conf

Nous ajoutons :

 <VirtualHost *:80>
 ...  
 ProxyPass /site1 http://192.168.0.92/
 ProxyPassReverse /site1 http://192.168.0.92/
 ProxyPass /site2 http://192.168.0.93/
 ProxyPassReverse /site2 http://192.168.0.93/
 ProxyRequests Off
 ...
 </VirtualHost>

Configuration réseau

Ajout de la route par défaut (Polytech) :

 ip route add default via 172.26.145.254

Configuration eth1 :

 ip add add dev eth1 172.26.145.90/24
 ip link set eth1 up

11h25 => Serveurs Web unshare OK

Création des conteneurs via Docker

InstructionsTexte italique

docker run -i -t debian

export http

apt-get install apache nano vi

En dehors conteneur docker commit <image name> sur le conteneur


Creer réseau privé docker network create


(2X)docker run -i -t <image name> --net nom réseau docker run -i -t <image name> --net nom réseau -p 80:80

DNS : vérifier les @IP des conteneurs LE mandataire inverse doit avoir @IP de zabeth

Procédure

Modification des paramètres de docker dans /etc/default/docker, commenter la ligne DOCKER_EPTS="--iptables=false"

 iptables-save
 service docker restart
 docker run -i -t debian /bin/bash

Dans le conteneur

 export http_proxy
 export https_proxy
 apt-get update
 apt-get install apache2 nano vim

Récupération ID du docker

 docker ps

Commit sur le docker

 docker commit <ID> apache2

Création du network

 docker network create jdqb_network

Lancement des conteneurs

 docker run -i -t --net jdqb_network apache2 
 docker run -i -t --net jdqb_network apache2
 docker run -i -t --net jdqb_network -p 80:80 apache2

Dans chaque conteneur

 ip a

Dans le conteneur mandataire

 nano /etc/apache2/sites-enabled/000-default.conf

Ajout des proxypass

 ProxyPass /site1 http://<IP conteneur 1>/
 ProxyPassReverse /site1 http://<IP conteneur 1>/
 ProxyPass /site2 http://<IP conteneur 2>/
 ProxyPassReverse /site2 http://<IP conteneur 2>/
 ProxyRequests Off

Ajout d'un DNS dans GANDI @plil.space

Type A , TTL 1800, nom jdqb-docker, <ip bridge zabeth>

Sur les trois conteneurs

 service apache2 restart

10h20 Serveurs Web (docker) OK

TP PRA - Mise en place du routeur Catalyst 3650