Edit a subject
This commit is contained in:
parent
330199cf24
commit
cad67995ae
14 changed files with 162 additions and 294 deletions
|
|
@ -1,9 +1,21 @@
|
|||
SOURCES = subject.md project-part1.md project-part2.md rendu.md end.md
|
||||
PANDOCOPTS = --latex-engine=xelatex \
|
||||
--standalone \
|
||||
--normalize \
|
||||
--smart \
|
||||
-M lang=french \
|
||||
-M fontsize=12pt \
|
||||
-M papersize=a4paper \
|
||||
-M mainfont="Linux Libertine O" \
|
||||
-M monofont="Inconsolata" \
|
||||
-M sansfont="Linux Biolinum O" \
|
||||
--include-in-header=../tutorial/header.tex
|
||||
|
||||
|
||||
all: subject.pdf
|
||||
|
||||
.md.pdf:
|
||||
pandoc --latex-engine=xelatex --toc --normalize -M lang=frenchb --standalone -N --template=../template.tex -M fontsize=12pt -M papersize=a4paper -o $@ $<
|
||||
subject.pdf: ${SOURCES}
|
||||
pandoc ${PANDOCOPTS} -o $@ $+
|
||||
|
||||
.md.tex:
|
||||
pandoc --latex-engine=xelatex --toc --normalize -N --template=../template.tex -M fontsize=12pt -M papersize=a4paper -o $@ $<
|
||||
|
||||
.SUFFIXES: .md .tex .pdf
|
||||
clean::
|
||||
rm subject.pdf
|
||||
|
|
|
|||
1
subject/end.md
Normal file
1
subject/end.md
Normal file
|
|
@ -0,0 +1 @@
|
|||
Bon courage !
|
||||
1
subject/project-part1.md
Symbolic link
1
subject/project-part1.md
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../tutorial/3/project-body.md
|
||||
1
subject/project-part2.md
Symbolic link
1
subject/project-part2.md
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../tutorial/4/project-body.md
|
||||
1
subject/rendu.md
Symbolic link
1
subject/rendu.md
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../tutorial/4/project-rendu.md
|
||||
|
|
@ -1,163 +1,28 @@
|
|||
% Virtualisation légère
|
||||
% Pierre-Olivier *Nemunaire* Mercier
|
||||
% Samedi 29 novembre 2014
|
||||
---
|
||||
title: Virtualisation légère -- Projet
|
||||
author: Pierre-Olivier *Nemunaire* Mercier
|
||||
institute: EPITA
|
||||
date: EPITA -- SRS 2017
|
||||
...
|
||||
|
||||
# Introduction
|
||||
Le laboratoire des assistants a besoin de votre expertise afin de renforcer la
|
||||
sécurité et la réactivité de son système de correction automatisé.
|
||||
|
||||
## Présentation du sujet
|
||||
|
||||
Durant ces prochaines heures, vous allez devoir réaliser un service de
|
||||
déploiement de *machines virtuelles* légères, mettant en pratique les
|
||||
connaissances que vous avez acquises durant le cours et le TP.
|
||||
|
||||
N'oublier pas de lire le sujet en entier, plusieurs fois, avant de
|
||||
commencer. Vous n'êtes pas forcément tenu de réaliser les étapes dans l'ordre.
|
||||
|
||||
## Quelques conseils
|
||||
|
||||
* L'utilisation d'un gestionnaire de version est fortement recommandé.
|
||||
* N'hésitez pas à préférer utiliser les
|
||||
[API](https://qa.linuxcontainers.org/master/current/doc/api/) (et leur
|
||||
bindings) plutôt que de faire des appels à des fonctions de type `system(3)`.
|
||||
* N'oubliez pas de consulter avant toutes choses les `man` très fournis des
|
||||
commandes que vous utiliserez ; en particulier tous les `lxc-*`,
|
||||
`capabilities(7)`, ...
|
||||
* Vous pouvez utiliser ou vous inspirer des images présentes sur le Hub Docker.
|
||||
* Ne passez pas trop de temps sur l'interface, l'architecture des containers
|
||||
est bien plus intéressante.
|
||||
|
||||
## Modalités de rendu
|
||||
|
||||
L'heure du rendu est fixé au dimanche 30 novembre 2014 à 11h42 CET.
|
||||
|
||||
Il est attendu que vous rendiez, à <virli@nemunai.re>, une tarball contenant un
|
||||
ou plusieurs `Dockerfile` permettant d'obtenir l'interface de contrôle des
|
||||
conteneurs, accompagnés d'un script automatisant le déploiement de la solution
|
||||
sur une nouvelle machine (voir la section 2.2 pour les modalités de ce script).
|
||||
|
||||
## Notation
|
||||
|
||||
Chaque partie du sujet rapporte un certain nombre de points tenant compte de la
|
||||
difficulté. Il est attendu que vous présentiez succinctement votre travail le
|
||||
dimanche matin entre 8h et 12h. Vous pouvez effectuer votre rendu avant ou
|
||||
après cette présentation à condition de respecter l'horaire indiqué à la
|
||||
section précédente.
|
||||
|
||||
L'accent sera mis sur le respect des bonnes pratiques, en particulier sur
|
||||
celles vue en cours ou en TP.
|
||||
Votre projet consistera à réaliser la partie d'isolation de la moulinette des
|
||||
ACUs : dans un premier temps vous ferez en sorte de restreindre un groupe de
|
||||
processus pour qu'il ne puisse pas faire de déni de service sur notre machine ;
|
||||
puis dans une seconde partie, vous vous assurerez de l'isolation de chaque
|
||||
étudiant.
|
||||
|
||||
|
||||
# Étapes de réalisation
|
||||
Il n'y a pas de restriction sur le langage utilisé, vous pouvez tout aussi bien
|
||||
utiliser du C, du C++, du Python, du shell, etc.
|
||||
|
||||
## Interface utilisateur
|
||||
L'usage de bibliothèques **non relatives** au projet est autorisé : le but de
|
||||
ce sujet est d'évaluer votre compréhension et votre utilisation de la
|
||||
tuyauterie bas-niveau du noyau liée à la virtualisation légère. À partir du
|
||||
moment où vous n'utilisez pas une bibliothèque qui abstrait complètement cette
|
||||
plomberie, n'hésitez pas à l'utiliser !
|
||||
|
||||
La première étape est de réaliser l'interface avec laquelle les utilisateurs
|
||||
vont utiliser votre service.
|
||||
|
||||
Le langage (et le framework si besoin) est laissé à votre discrétion parmi
|
||||
[Perl Dancer](https://metacpan.org/pod/Dancer),
|
||||
[Python Django](http://djangoproject.com/) ou encore [PHP](http://php.net/).
|
||||
|
||||
Vous allez avoir besoin d'une base de données (MySQL/MariaDB ou PostgreSQL)
|
||||
pour stocker la liste des conteneurs lancés, de leurs configuration, des images
|
||||
disponibles, des utilisateurs, etc.
|
||||
|
||||
L'interface pourra prendre la forme d'une simple API ou de formulaires sur des
|
||||
pages classiques. Chaque étape de ce sujet donne généralement lieu à une série
|
||||
de pages.
|
||||
|
||||
|
||||
## Recettes de déploiement (bonus)
|
||||
|
||||
Concevez les recettes de déploiement à destination d'un gestionnaire de
|
||||
configuration (tel qu'[Ansible](http://docs.ansible.com/)) pour construire les
|
||||
images des conteneurs et configurer la machine qui exécutera votre service.
|
||||
|
||||
La tarball que vous rendez doit permettre de déployer facilement (installation
|
||||
de dépendance et docker build) votre solution ; prévoyez un script (non
|
||||
optionel) si plus d'étape sont nécessaire pour construire vos conteneurs.
|
||||
|
||||
|
||||
## Gestion d'un conteneur
|
||||
|
||||
Pour cette étape, votre site doit être en mesure de lancer et d'arrêter un
|
||||
conteneur que vous aurez préalablement créé.
|
||||
|
||||
Le choix de la technologie de virtualisation est laissé à votre
|
||||
discrétion.
|
||||
|
||||
Dans un premier temps, vous pouvez lancer vos conteneurs sans considération de
|
||||
sécurité, en donnant tous les privilèges au conteneur de votre site, puis dans
|
||||
un second temps, organisez une séparation des privilèges pour qu'un exploit sur
|
||||
votre site ne remette pas en cause la sécurité de l'ensemble de la machine.
|
||||
|
||||
|
||||
## Lancement de conteneur à partir de templates
|
||||
|
||||
Maintenant que vous êtes capable de lancer et d'arrêter un conteneur,
|
||||
laissez la possibilité à l'utilisateur de lancer un nouveau conteneur à partir
|
||||
d'un template LXC ou d'une image Docker.
|
||||
|
||||
À la fin de l'étape, vous devez être capable de lancer n'importe quel template
|
||||
ou image.
|
||||
|
||||
|
||||
## Quota disque (bonus)
|
||||
|
||||
Permettez à l'utilisateur de configurer l'espace disque dont il disposera dans
|
||||
sa nouvelle machine virtuelle.
|
||||
|
||||
Cela peut se faire via l'utilisation d'un système de fichier gérant les quotas
|
||||
(XFS, Btrfs, ZFS, ...) ou via LVM.
|
||||
|
||||
|
||||
## Quota CPU/RAM/Réseau
|
||||
|
||||
Laissez la possibilité à l'utilisateur de configurer la quantité de mémoire
|
||||
maximale que le conteneur peu utiliser ainsi que de permettre la limitation de
|
||||
l'utilisation du CPU. Donner également la possibilité de limiter la bande
|
||||
passante.
|
||||
|
||||
|
||||
## Configuration réseau
|
||||
|
||||
Faites en sorte que l'utilisateur puisse exposer des ports de son conteneur sur
|
||||
des ports de la machine hôte.
|
||||
|
||||
|
||||
## Configuration réseau (avancé)
|
||||
|
||||
Mettez en place l'une des solutions de virtualisation réseau vue en cours,
|
||||
permettant d'assigner à chaque conteneur une IP non-NATée.
|
||||
|
||||
|
||||
## Gestion de conteneurs (avancé)
|
||||
|
||||
### Gel de conteneur
|
||||
|
||||
Donner la possibilité à l'utilisateur de suspendre (freeze) l'exécution d'un
|
||||
conteneur et de la reprendre lorsqu'il le désire.
|
||||
|
||||
### Clone
|
||||
|
||||
Permettez à l'utilisateur de dupliquer un conteneur.
|
||||
|
||||
### Snapshots
|
||||
|
||||
Mettez en place un système de snapshots permettant de restaurer un
|
||||
état antérieur, préalablement capturé.
|
||||
|
||||
|
||||
# Astuces pour la présentation
|
||||
|
||||
* Des questions pourront vous être posées à propos de l'infrastructure
|
||||
que vous avez mis en place, de notions vues durant le cours ou le
|
||||
TP.
|
||||
* Soyez en mesure de justifier vos choix !
|
||||
* Vous êtes en SRS, n'oubliez pas de vous renseigner sur les techniques de
|
||||
hardening à mettre en place ; si vous ne les avez pas mises en place ou pas
|
||||
automatisé via le script de déploiement, n'oubliez pas d'indiquer les
|
||||
changements durant la présentation.
|
||||
|
||||
|
||||
Bon courage !
|
||||
\hypersetup{linkcolor=black}
|
||||
\tableofcontents
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue