168 lines
2.6 KiB
Markdown
168 lines
2.6 KiB
Markdown
# Voyage par conteneur
|
|
|
|
## Made in Unix
|
|
|
|
### Que doit-on isoler ?
|
|
|
|
> * Matériel ?
|
|
> * Processus ?
|
|
> * Réseau ?
|
|
> * Système de fichiers ?
|
|
> * Utilisateurs et groupes ?
|
|
> * Nom et domaine de la machine !
|
|
> * IPC !
|
|
> * Horloge ?
|
|
|
|
|
|
## Made in Linux
|
|
|
|
|
|
### Pour cette mission, vous disposerez de ...
|
|
|
|
![](armory.jpg)
|
|
|
|
----
|
|
|
|
#### Namespaces
|
|
|
|
Isolation des processus (PID Namespace), interface réseau (Network
|
|
Namespace), partitions montées (Mount Namespace), utilisateurs et
|
|
groupes (User Namespace), nom de machine (UTS Namespace), IPC.
|
|
|
|
`namespaces(7)`
|
|
|
|
. . .
|
|
|
|
#### CGroups
|
|
|
|
Statistiques sur l'utilisation des ressources et limitation.
|
|
|
|
<https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt>
|
|
|
|
. . .
|
|
|
|
#### Capabilities
|
|
|
|
Limitation de ce que `root` peut faire.
|
|
|
|
`capabilities(7)`
|
|
|
|
|
|
## pour les nuls
|
|
|
|
### Mais Jamy, comment ça marche ?
|
|
|
|
![](cps.jpg)
|
|
|
|
|
|
### Syscall
|
|
|
|
* `clone`
|
|
* `unshare`
|
|
* `setns`
|
|
|
|
. . .
|
|
|
|
#### Exemple
|
|
|
|
```c
|
|
int fd;
|
|
|
|
/* Get descriptor for namespace */
|
|
fd = open("/proc/PID/ns/FILE", O_RDONLY);
|
|
|
|
/* Join that namespace */
|
|
setns(fd, 0);
|
|
```
|
|
|
|
----
|
|
|
|
```
|
|
PATH FILESYSTEM
|
|
/ /dev/sda1
|
|
├── dev
|
|
├── proc
|
|
├── sys
|
|
├── usr
|
|
└── var
|
|
├── cntrs
|
|
│ ├── toto /dev/sda5
|
|
│ │ ├── dev
|
|
│ │ ├── proc
|
|
│ │ ├── sys
|
|
│ │ └── usr
|
|
│ └── virli /dev/sda6
|
|
│ ├── dev
|
|
│ ├── proc
|
|
│ ├── sys
|
|
│ └── usr
|
|
├── log
|
|
└── tmp
|
|
```
|
|
|
|
### Système de fichiers
|
|
|
|
* `pivot_root(2)`
|
|
* Thin provisioning
|
|
* Union FileSystems
|
|
|
|
### Union FileSystem
|
|
|
|
![](unionfs.png)
|
|
|
|
|
|
### Le réseau ...
|
|
|
|
![](sosreseau.jpg)
|
|
|
|
|
|
### Le réseau ...
|
|
|
|
#### Interface physique
|
|
|
|
Facile ! Mais il en faut beaucoup.
|
|
|
|
. . .
|
|
|
|
#### VLAN
|
|
|
|
Un tag par conteneur. Routage *interne* par le switch en amont.
|
|
|
|
. . .
|
|
|
|
#### MAC-VLAN
|
|
|
|
* **VEPA :** tous les paquets sortants sortent, y compris ceux à destination
|
|
d'une autre machine locale. Le switch derrière doit rerouter les paquets vers
|
|
la machine.
|
|
* **Bridge :** le noyau analyse les paquets avant de les transmettre.
|
|
|
|
. . .
|
|
|
|
#### Virtual Ethernet
|
|
|
|
Interfaces virtuelles connectées à un bridge.
|
|
|
|
|
|
## En résumé
|
|
|
|
### Mais ! (il y a toujours un mais)
|
|
|
|
. . .
|
|
|
|
#### LXC stable
|
|
|
|
Prêt pour la production depuis février 2014.
|
|
|
|
Attention à la configuration et aux erreur avec les `capabilities` !
|
|
|
|
. . .
|
|
|
|
#### Partage des systèmes de fichiers
|
|
|
|
Optimise l'utilisation du cache du système de fichiers :-)
|
|
|
|
. . .
|
|
|
|
N'optimise pas le travail de l'administrateur système :-(
|