TP sysres IMA5sc 2018/2019 G13

De Wiki d'activités IMA

TP Systeme Reseau

Vous trouverez sur cette page Wiki tous les travaux relatifs au cours de Systeme Reseau réalisés par YANG Ji

TP Conteneur Reseau

Etapes de realisation des conteneurs

Obtenir le priorité.

su

Creation d'un fichier (utilisé en tant que partition) de debootstrap --include=vim,nano,apache2 stable /mnt/container1 10240 bloc de 1024k octets (Soit un fichier de 10Go)

dd if=/dev/zero of=disc.img1 bs=1024k count=10240

Creation d'un systeme d'un systeme de fichier linux(ext4) au sein du fichier precedemment créé

mkfs.ext4 disc.img1

Création d'un dossier /mnt/container1

mkdir /mnt/container1

Montage du systeme de fichier dans fs1

mount -t ext4 -o loop /home/pifou/PrA_Ji/disc.img1 /mnt/container1/

La commande df permet d'avoir la liste des partitions montés par le systeme

root@zabeth15:/home/pifou/PrA_Ji# df
Filesystem     1K-blocks      Used Available Use% Mounted on
udev            16455512         0  16455512   0% /dev
tmpfs            3293352       772   3292580   1% /run
/dev/sda2      212427252 148635992  52930872  74% /
tmpfs               5120         4      5116   1% /run/lock
tmpfs           13293680     20944  13272736   1% /run/shm
tmpfs           16466748         0  16466748   0% /sys/fs/cgroup
tmpfs            3293348        12   3293336   1% /run/user/1000
/dev/loop0      10255636     36888   9678076   1% /mnt/container1

Télécharger debootstrap

apt-get install debootstrap

Télecharger les fichier de système du "container", with:

debootstrap --include=vim,nano,apache2 stable /mnt/container1 

Je ne peux pas le téléchargé.

J'ai ajouté les proxy:

export http_proxy=http://proxy.polytech-lille.fr:3128
export https_proxy=https://proxy.polytech-lille.fr:3128

J'ai réussit à téléchargé.

Pour que le container peux montrer le proc automatiquement, j'ai ajouté une phrase au fichier "fstab"

echo "proc /proc proc defaults 0 0" >> /mnt/container1/etc/fstab

J'ai copié l'image

umount /mnt/container1/
root@zabeth15:/home/pifou/PrAmkdir /mnt/container2 /mnt/container3

_Ji# cp disc.img1 disc.img2

root@zabeth15:/home/pifou/PrA_Ji# cp disc.img1 disc.img3

J'ai créé les autres deux dossiers de container:

mkdir /mnt/container2 /mnt/container3


Configuration du réseau

J'ai ajouté un bridge

ip link add bridge_projet type bridge

J'ai ajouté 4 ethernet virtuels:

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 eth0@vif4

J'ai connecter les interfaces à la bridge que j'ai crée.

root@zabeth15:/home/pifou/PrA_Ji# ip link set vif1 master bridge_projet
root@zabeth15:/home/pifou/PrA_Ji# ip link set vif2 master bridge_projet
root@zabeth15:/home/pifou/PrA_Ji# ip link set vif3 master bridge_projet
root@zabeth15:/home/pifou/PrA_Ji# ip link set vif4 master bridge

Après:

J'ai ouvrir les interfaces:

root@zabeth15:/home/pifou/PrA_Ji# ip link set vif1 up
root@zabeth15:/home/pifou/PrA_Ji# ip link set vif2 up
root@zabeth15:/home/pifou/PrA_Ji# ip link set vif3 up
root@zabeth15:/home/pifou/PrA_Ji# ip link set vif4 up

J'ai donné la bridge une adresse de IP: 192.168.1.1/24:

root@zabeth15:/home/pifou/PrA_Ji# ip a add dev bridge_projet 192.168.1.1/24

Rebooter la bridge:

root@zabeth15:/home/pifou/PrA_Ji# ip link set bridge_projet down; ip link set bridge_projet up


Configuration des 3 container

Entrer le container 1:

root@zabeth15:/home/pifou# mount -t ext4 -o loop /home/pifou/PrA_Ji/disc.img1 /mnt/container1/
root@zabeth15:/home/pifou# unshare -n -u -p -f -m chroot /mnt/container1 /bin/bash -c "mount /proc ; /bin/bash"
root@zabeth15:/home/pifou# mount -t ext4 -o loop /home/pifou/PrA_Ji/disc.img2 /mnt/container2/
root@zabeth15:/home/pifou# unshare -n -u -p -f -m chroot /mnt/container2 /bin/bash -c "mount /proc ; /bin/bash"
root@zabeth15:/home/pifou# mount -t ext4 -o loop /home/pifou/PrA_Ji/disc.img3 /mnt/container3/
root@zabeth15:/home/pifou# unshare -n -u -p -f -m chroot /mnt/container3 /bin/bash -c "mount /proc ; /bin/bash"


Après, je veux ajouté la bridge virtuelle aux containers, mais, premièrement, je dois obtenir les ID du processus:

root@zabeth15:/home/pifou/PrA_Ji# ps auxxx | grep unshare

Après, j'ai ajouté la bridge aux containers:

ip link set eth0@vif1 netns /proc/<PID_unshare_containner1>/ns/net name eth0
ip link set eth0@vif2 netns /proc/<PID_unshare_containner2>/ns/net name eth0
ip link set eth0@vif3 netns /proc/<PID_unshare_containner3>/ns/net name eth0
ip link set eth1@vif4 netns /proc/<PID_unshare_containner3>/ns/net name eth1

Heureusement, j'ai trouvé eth0,eth1 dans les containers.

Après, j'ai ajouté l'adresse de IP aux containers.

ip addr add 192.168.1.2/24 dev eth0 #container 1
ip addr add 192.168.1.3/24 dev eth0 #container 2
ip addr add 192.168.1.4/24 dev eth0 #container 3

Après, j'ai réussit à ping entre la machine physical et les containers.

J'ai essayé ping 172.26.145.4, et il n'y avait rien de réponse, donc, j'ai ajouté l'adresse de IP à eth1 de container 3.

root@zabeth15:/# ip addr add 172.26.145.4/24 dev eth1 # container 3

Après, j'ai ajouté le nom de domaine dans le site gandi.net, L'adresse de IP est 172.26.145.4, le nom est Ji,j'ai aussi ajouté deux autres noms, Ji2 et Ji3 pour les autres 2 containers.

Après, dans le container de proxy(troisième container), j'ai ajouté des configuration de proxy d'apache2(/etc/apache2/sites-available/000-default.conf):

< VirtualHost *:80> 
ServerName websinteun.plil.space
ProxyPass "/web1" "<IP de container 1>"
ProxyPassReverse "/web1" "<IP de container 1>/"
ProxyPass "/web2" "<IP de container 2>/"
ProxyPassReverse "/web2" "<IP de container 2>/"
ProxyRequests Off
</VirtualHost >,

Après, j'ai changé un peu les index.html de les deux apache2, et configuré le DNS à Gandi.

A la fin, je pouvais connecter à apache de container 1 par le site Ji.plil.space/web1, et connecter à apache de container 2 par le site Ji.plil.space/web2.


Docker

Premièrement, j'ai activité le table de IP de docker par commenter opts ="--iptables=false" dans /etc/default/docker,et après j'ai rebooté le docker et activé le iptables-save:

service docker restart
iptables-save

Après, j'ai ajouté le proxy pour télécharger des logiciels:

export http_proxy=http://proxy.polytech-lille.fr:3128/
apt-get update
apt-get install apache2 vim nano

Après, j'ai ouvert une autre fenêtre à saugarder le docker:

docker commit [IDduConteneur] docker_projet

Après, j'ai ouvert 3 autres fenêtre à lancer 3 dockers:

  docker run -i -t --network mehcretnetwork --name c1 docker_projet   #container 1
  docker run -i -t --network mehcretnetwork --name c2 docker_projet   #container 2
  docker run -i -t --network mehcretnetwork --name c_proxy -p 80:80 docker_projet #container proxy


Après, j'ai changé le configuration de apache2 de container proxy comme avant:

 < VirtualHost *:80> 
ServerName websinteun.plil.space
ProxyPass "/web1" "<IP de container 1>"
ProxyPassReverse "/web1" "<IP de container 1>/"
ProxyPass "/web2" "<IP de container 2>/"
ProxyPassReverse "/web2" "<IP de container 2>/"
ProxyRequests Off
</VirtualHost >

Après, dans chaque container, j'ai monter le module proxy et rebooter apache2:

a2enmod proxy
service apache2 restart

Après, j'ai changé l'adresse de IP de DNS dans Gandi, le nouvelle adresse de IP est l'adresse de IP de l'odinateur physical.

A la fin, je pouvais connecter à apache de container 1 par le site Ji.plil.space/web1, et connecter à apache de container 2 par le site Ji.plil.space/web2.

16h30 => Serveurs Web docker OK


TP PRA Global

TP réalisé en binôme avec Matthieu DELOBELLE, page wiki disponible ICI