Fix some book issues

This commit is contained in:
nemunaire 2022-05-04 11:18:16 +02:00
parent 6e135a40de
commit 3d8dd24b78
30 changed files with 109 additions and 110 deletions

View File

@ -1,5 +1,5 @@
L'isolation ... à 1  ?
-----------------------
L'isolation ... avec `chroot`
-----------------------------
Depuis les premières versions d'Unix, il est possible de changer le répertoire
vu comme étant la racine du système de fichiers. En anglais : *change root*:

View File

@ -55,7 +55,7 @@ ce sujet :\
::::: {.exercice}
#### À vous de jouer {-}
#### À vous de jouer {-}
Continuons l'exercice précédent où nous avions [fixé les
limites](#Fixer-des-limites) de mémoire que pouvez réserver les processus de

View File

@ -1,5 +1,3 @@
\newpage
::::: {.exercice}
### Comparaison de *namespace* -- `cmpns.sh`
@ -31,6 +29,7 @@ que l'on cherche à comparer.
- uts: same
```
</div>
\
<div lang="en-US">
```

View File

@ -19,32 +19,32 @@ Pour savoir si vous avez réussi, comparez les sorties des commandes :
- ...
### Tests {-}
Voici quelques exemples pour tester :
<div lang="en-US">
```
42sh$ docker run --name mywebserver -d -p 80:80 nginx
42sh$ docker run --name mywebsrv -d -p 80:80 nginx
d63ceae863956f8312aca60b7a57fbcc1fdf679ae4c90c5d9455405005d4980a
42sh$ docker container inspect --format '{{ .State.Pid }}' mywebserver
42sh$ docker container inspect --format '{{ .State.Pid }}' mywebsrv
234269
42sh# ./mydocker_exec mywebserver ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group def
42sh# ./mydocker_exec mywebsrv ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
13: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP group def
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
13: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP
link/ether 02:42:ac:11:00:02 brd ff:[...]:ff link-netnsid 0
inet 172.17.0.1/16 scope global eth0
valid_lft forever preferred_lft forever
42sh# hostname
koala.zoo.paris
42sh# ./mydocker_exec mywebserver hostname
42sh# ./mydocker_exec mywebsrv hostname
d63ceae86395
42sh# ./mydocker_exec mywebserver mount
42sh# ./mydocker_exec mywebserver ps aux
42sh# ./mydocker_exec mywebsrv mount
42sh# ./mydocker_exec mywebsrv ps aux
...
```
</div>

View File

@ -22,7 +22,7 @@ Nous allons voir dans cette partie plusieurs méthodes pour utiliser ces espaces
de noms.
#### Avec son coquillage
#### Dans son shell
De la même manière que l'on peut utiliser l'appel système `chroot(2)` depuis un
shell via la commande `chroot(1)`, la commande `unshare(1)` permet de faire le
@ -94,10 +94,11 @@ static char child_stack[STACKSIZE];
int clone_flags = CLONE_CGROUP | CLONE_NEWNET | SIGCHLD;
pid_t pid = clone(do_execvp, // First function executed by child
child_stack + STACKSIZE, // Assume stack grows downward
clone_flags, // clone specials flags
args); // Arguments to pass to do_execvp
pid_t pid = clone(do_execvp, // First function executed by child
child_stack + STACKSIZE, // Assume stack grows downward
clone_flags, // clone specials flags
args); // Arguments to pass to
// do_execvp
```
</div>

View File

@ -33,31 +33,31 @@ d'avoir une vision arborescente des points de montage en cours d'utilisation.
<div lang="en-US">
```
TARGET SOURCE FSTYPE OPTIONS
/ /dev/sda1 ext4 rw,relatime,data=ordered
/proc proc proc rw,nosuid,nodev,noexec,relatime
/sys sysfs sysfs rw,nosuid,nodev,noexec,relatime
├─/sys/kernel/security securityfs securityfs rw,nosuid,nodev,noexec,relatime
/ /dev/sda1 ext4 rw,data=ordered,...
/proc proc proc rw,nosuid,nodev,...
/sys sysfs sysfs rw,nosuid,nodev,...
├─/sys/kernel/security securityfs securityfs rw,nosuid,nodev,...
├─/sys/firmware/efi/efivars efivarfs efivarfs ro,relatime
└─/sys/fs/cgroup cgroup_root tmpfs rw,nosuid,nodev,noexec,relatime
├─/sys/fs/cgroup/unified none cgroup2 rw,nosuid,nodev,noexec,relatime
├─/sys/fs/cgroup/cpuset cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset
├─/sys/fs/cgroup/cpu cpu cgroup rw,nosuid,nodev,noexec,relatime,cpu
├─/sys/fs/cgroup/cpuacct cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct
├─/sys/fs/cgroup/blkio blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio
├─/sys/fs/cgroup/memory memory cgroup rw,nosuid,nodev,noexec,relatime,memory
├─/sys/fs/cgroup/devices devices cgroup rw,nosuid,nodev,noexec,relatime,devices
├─/sys/fs/cgroup/freezer freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer
├─/sys/fs/cgroup/net_cls net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls
├─/sys/fs/cgroup/perf_event perf_event cgroup rw,nosuid,nodev,noexec,relatime,p_event
├─/sys/fs/cgroup/net_prio net_prio cgroup rw,nosuid,nodev,noexec,relatime,net_pri
└─/sys/fs/cgroup/pids pids cgroup rw,nosuid,nodev,noexec,relatime,pids
/dev devtmpfs devtmpfs rw,nosuid,size=10240k,nr_inodes=486250
├─/dev/pts devpts devpts rw,nosuid,noexec,relatime,gid=5,ptmxmod
└─/sys/fs/cgroup cgroup_root tmpfs rw,nosuid,...
├─/sys/fs/cgroup/unified none cgroup2 rw,nsdelegate,...
├─/sys/fs/cgroup/cpuset cpuset cgroup rw,nosuid,cpuset,...
├─/sys/fs/cgroup/cpu cpu cgroup rw,nosuid,cpu,...
├─/sys/fs/cgroup/cpuacct cpuacct cgroup rw,nosuid,cpuacct,...
├─/sys/fs/cgroup/blkio blkio cgroup rw,nosuid,blkio,...
├─/sys/fs/cgroup/memory memory cgroup rw,nosuid,memory,...
├─/sys/fs/cgroup/devices devices cgroup rw,nosuid,devices,...
├─/sys/fs/cgroup/freezer freezer cgroup rw,nosuid,freezer,...
├─/sys/fs/cgroup/net_cls net_cls cgroup rw,nosuid,net_cls,...
├─/sys/fs/cgroup/perf_event perf_event cgroup rw,nosuid,p_event,...
├─/sys/fs/cgroup/net_prio net_prio cgroup rw,nosuid,net_pri,...
└─/sys/fs/cgroup/pids pids cgroup rw,nosuid,pids,...
/dev devtmpfs devtmpfs rw,nosuid,size=...
├─/dev/pts devpts devpts rw,nosuid,gid=5,...
├─/dev/shm tmpfs tmpfs rw
└─/dev/mqueue mqueue mqueue rw,nosuid,nodev,noexec,relatime
/home /dev/sda3 ext4 rw,nosuid,nodev,relatime,data=ordered
/run tmpfs tmpfs rw,nosuid,nodev,noexec,mode=755
/tmp tmpfs tmpfs rw,nosuid,nodev,noexec,relatime
└─/dev/mqueue mqueue mqueue rw,nosuid,nodev,...
/home /dev/sda3 ext4 rw,nosuid,nodev,...
/run tmpfs tmpfs rw,mode=755,...
/tmp tmpfs tmpfs rw,nosuid,nodev,...
```
</div>

View File

@ -28,16 +28,16 @@ pointent pas vers une destination valide :
<div lang="en-US">
```bash
42sh$ ls -l /proc/self/ns
lrwxrwxrwx 1 nemunaire 0 1 oct. 23:42 cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx 1 nemunaire 0 1 oct. 23:42 ipc -> 'ipc:[4026531839]'
lrwxrwxrwx 1 nemunaire 0 1 oct. 23:42 mnt -> 'mnt:[4026531840]'
lrwxrwxrwx 1 nemunaire 0 1 oct. 23:42 net -> 'net:[4026532008]'
lrwxrwxrwx 1 nemunaire 0 1 oct. 23:42 pid -> 'pid:[4026531836]'
lrwxrwxrwx 1 nemunaire 0 1 oct. 23:42 pid_for_children -> 'pid:[4026531836]'
lrwxrwxrwx 1 nemunaire 0 1 oct. 23:42 time -> 'time:[4026531834]'
lrwxrwxrwx 1 nemunaire 0 1 oct. 23:42 time_for_children -> 'time:[4026531834]'
lrwxrwxrwx 1 nemunaire 0 1 oct. 23:42 user -> 'user:[4026531837]'
lrwxrwxrwx 1 nemunaire 0 1 oct. 23:42 uts -> 'uts:[4026531838]'
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 ipc -> 'ipc:[4026531839]'
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 mnt -> 'mnt:[4026531840]'
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 net -> 'net:[4026532008]'
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 pid -> 'pid:[4026531836]'
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 pid_for_children -> 'pid:[4026531836]'
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 time -> 'time:[4026531834]'
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 time_for_children -> 'time:[4026531834]'
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 user -> 'user:[4026531837]'
lrwxrwxrwx 1 nemunaire 1 oct. 23:42 uts -> 'uts:[4026531838]'
```
</div>

View File

@ -99,7 +99,8 @@ des groupes au lieu des utilisateurs.
<div lang="en-US">
```bash
42sh$ unshare --mount --pid --mount-proc --fork --net --user --map-root-user bash
42sh$ unshare --mount --pid --mount-proc --fork --net --user \
--map-root-user bash
```
</div>

View File

@ -28,7 +28,8 @@ comme suit :
<div lang="en-US">
```bash
docker run --rm -d --name registry --network droneci -p 5000:5000 registry:2
docker run --rm -d --name registry --network droneci -p 5000:5000 \
registry:2
```
</div>

View File

@ -24,10 +24,10 @@ Lançons enfin Drone avec les deux commandes suivantes :
```shell
docker volume create drone_data
docker container run --name droneci -d -v drone_data:/data --network my_ci_net
docker container run --name droneci -v drone_data:/data --network my_ci_net
-p 80:80 -e DRONE_GITEA_CLIENT_ID -e DRONE_GITEA_CLIENT_SECRET \
-e DRONE_GITEA_SERVER=http://gitea:3000 -e DRONE_SERVER_PROTO=http \
-e DRONE_RPC_SECRET -e DRONE_SERVER_HOST=droneci \
-e DRONE_RPC_SECRET -e DRONE_SERVER_HOST=droneci -d \
drone/drone:2
```
</div>

View File

@ -4,4 +4,4 @@ Vous serez automatiquement redirigé vers la page d'authentification de Gitea,
puis vers l'autorisation OAuth d'accès de Drone à Gitea. Il faut bien
évidemment valider cette demande, afin que Drone ait accès à nos dépôts.
![OAuth Drone](oauth-drone.png){width=9cm}
![OAuth Drone](oauth-drone.png){width=7.6cm}

View File

@ -5,9 +5,9 @@ Voici La ligne de commande permettant de démarrer notre agent :
<div lang="en-US">
```shell
docker container run --name droneci-runner -d --network my_ci_net \
-v /var/run/docker.sock:/var/run/docker.sock -e DRONE_RPC_PROTO=http
-e DRONE_RPC_HOST=droneci -e DRONE_RPC_SECRET -e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=my-runner -e DRONE_RUNNER_NETWORKS=my_ci_net \
drone/drone-runner-docker:1
-v /var/run/docker.sock:/var/run/docker.sock -e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RPC_HOST=droneci -e DRONE_RPC_SECRET -e DRONE_RPC_PROTO=http \
-e DRONE_RUNNER_NAME=my-runner -e DRONE_RUNNER_NETWORKS=my_ci_net \
drone/drone-runner-docker:1
```
</div>

View File

@ -23,11 +23,11 @@ Pour finir, lançons notre conteneur `gitea` :
<div lang="en-US">
```shell
docker container run --name gitea --network my_ci_net -p 2222:22 -p 3000:3000 \
-v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro \
-v gitea-data:/data \
-e RUN_MODE=prod -e DOMAIN=gitea -e SSH_DOMAIN=gitea -e INSTALL_LOCK=true \
-e SECRET_KEY -d \
docker container run --name gitea --network my_ci_net -p 2222:22 \
-p 3000:3000 -v /etc/localtime:/etc/localtime:ro -v gitea-data:/data \
-v /etc/timezone:/etc/timezone:ro \
-e RUN_MODE=prod -e DOMAIN=gitea -e SSH_DOMAIN=gitea \
-e INSTALL_LOCK=true -e SECRET_KEY -d \
gitea/gitea:1
```
</div>

View File

@ -8,7 +8,7 @@ Vous pouvez ajouter un nouvel administrateur avec la commande suivante :
<div lang="en-US">
```bash
docker exec gitea gitea admin user create --username "${USER}" --admin \
--must-change-password=false --random-password --email "${USER}@example.com"
--must-change-password=false --random-password --email "${USER}@exmpl.tf"
```
</div>

View File

@ -206,7 +206,7 @@ si besoin.
::::: {.warning}
la page d'accueil est vide au démarrage, pour savoir si vous avez réussi,
La page d'accueil est vide au démarrage, pour savoir si vous avez réussi,
rendez-vous sous l'onglet *Hosts*, le nom de votre machine devrait y
apparaître. En cliquant dessus, vous obtiendrez des graphiques similaires à
ceux ci-après:

View File

@ -20,9 +20,9 @@ cours d'exécution, arrêtés, ...) avec la commande suivante:
<div lang="en-US">
```
42sh$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
552d71619723 hello-world "/hello" 4 days ago Exited (0) 4 days ago dreamy_g
0e8bbff6d500 debian "/bin/bash" 2 weeks ago Exited (0) 2 weeks ago cranky_j
CONTAINER ID IMAGE CREATED STATUS NAMES
552d71619723 hello-world 4 days ago Exited (0) 4 days ago dreamy_g
0e8bbff6d500 debian 2 weeks ago Exited (0) 2 weeks ago cranky_j
```
</div>

View File

@ -48,7 +48,8 @@ utiliser cette syntaxe pour ajouter une image:
<div lang="en-US">
```bash
base64 monimage.jpg | curl --data @- http://localhost:8080/api/images/monimage
base64 monimage.jpg | \
curl --data @- http://localhost:8080/api/images/monimage
```
</div>

View File

@ -285,7 +285,8 @@ Par exemple:
<div lang="en-US">
```bash
docker -H unix:///run/docker.sock container run -it alpine /bin/ash -c "echo foo"
docker -H unix:///run/docker.sock container run -it alpine /bin/ash -c \
"echo foo"
```
</div>
@ -305,8 +306,8 @@ conteneurs en cours d'exécution:
<div lang="en-US">
```
42sh$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4c39fc049cd1 ubuntu "/bin/bash" 6 minutes ago Up 5 minutes bold_gates
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
4c39fc049cd1 ubuntu "/bin/bash" 6 minutes ago Up 5 minutes bold_gates
```
</div>

View File

@ -3,6 +3,11 @@
À vous maintenant de connecter une instance de `nemunaire/fic-admin` à sa base
de données.
En lançant le conteneur avec les mêmes options que `youp0m`, les journaux
indiquent que le service cherche à se connecter à une base de données. Il va
donc falloir lier notre interface d'administration à [un conteneur
MariaDB](https://hub.docker.com/_/mariadb).
Ne vous embêtez pas avec les mots de passes des services, initialisez la base
de données avec le nom d'utilisateur et le mot de passe par défaut. Vous les
obtiendrez en lisant la documentation de l'image fic-admin:
@ -30,7 +35,7 @@ plusieurs fois, sans que les données ne soient perdues, entre deux
arrêts.
### Exemple d'exécution
### Exemple d'exécution {-}
<div lang="en-US">
```bash

View File

@ -16,16 +16,7 @@ conteneur: en effet, on peut vouloir mettre à jour l'applicatif sans pour
autant redémarrer sa base de données, etc. Nous allons donc voir dans cette
partie comment lier deux conteneurs.
## Mise en place du webservice
Nous allons utiliser l'interface d'administration des serveurs du FIC:
[`nemunaire/fic-admin`](https://hub.docker.com/r/nemunaire/fic-admin).
En lançant le conteneur avec les mêmes options que `youp0m`, les journaux
indiquent que le service cherche à se connecter à une base de données. Il va
donc falloir lier notre interface d'administration à [un conteneur
MariaDB](https://hub.docker.com/_/mariadb).
Mais avant, regardons d'un peu plus près la gestion des réseaux par Docker.
## Les pilotes réseau

View File

@ -63,7 +63,8 @@ Ensuite, nous pouvons démarrer un conteneur utilisant, par exemple:
<div lang="en-US">
```bash
docker container run --mount source=prod_youp0m,target=/images nemunaire/youp0m
docker container run --mount source=prod_youp0m,target=/images \
nemunaire/youp0m
```
</div>
@ -71,8 +72,9 @@ On pourra également faire de même avec un conteneur MySQL:
<div lang="en-US">
```bash
docker container run --name mydb --mount source=prod_db,target=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
docker container run --name mydb -e MYSQL_ROOT_PASSWORD=my-secret-pw \
--mount source=prod_db,target=/var/lib/mysql\
mysql
```
</div>

View File

@ -79,8 +79,8 @@ aussi en envoyer.
Si maintenant `docker` fait appel à un programme externe pour lancer
effectivement nos conteneurs, c'est que l'on peut changer cette implémentation
? la réponse dans l'article :
? la réponse dans l'article :\
<https://ops.tips/blog/run-docker-with-forked-runc/>
Et `containerd` dans l'histoire ?
Et `containerd` dans l'histoire ?\
<https://hackernoon.com/docker-containerd-standalone-runtimes-heres-what-you-should-know-b834ef155426>

View File

@ -34,7 +34,7 @@ lang="en-US">`repository:hello-world:pull`</span>). Ce qui nous donne :
<div lang="en-US">
```bash
42sh$ curl "https://auth.docker.io/token?service=registry.docker.io&"\
42sh$ curl "https://auth.docker.io/token?service=registry.docker.io&" \
"scope=repository:library/hello-world:pull" | jq .
```
```json
@ -98,7 +98,8 @@ système d'exploitation :
curl -s \
-H "Authorization: Bearer ${TOKEN}" \
-H "Accept: ${MEDIATYPE}" \
"https://registry-1.docker.io/v2/library/hello-world/manifests/${MNFST_DGST}"
"https://registry-1.docker.io/v2/library/hello-world/manifests/
${MNFST_DGST}"
```
</div>
@ -119,7 +120,7 @@ Pour récupérer la configuration de l'image :
```bash
curl -s --location \
-H "Authorization: Bearer ${TOKEN}" \
"https://registry-1.docker.io/v2/library/hello-world/blobs/${CONFIG_DIGEST}"
"https://registry-1.docker.io/v2/library/hello-world/blobs/${CNF_DIGEST}"
```
</div>
@ -129,7 +130,7 @@ Enfin, armé du `digest` de notre couche, il ne nous reste plus qu'à la demande
<div lang="en-US">
```bash
wget --header "Authorization: Bearer ${TOKEN}" \
"https://registry-1.docker.io/v2/library/hello-world/blobs/${LAYER_DIGEST}"
"https://registry-1.docker.io/v2/library/hello-world/blobs/${LAYER_DGST}"
```
</div>

View File

@ -52,7 +52,7 @@ runc spec
```
</div>
Pour savoir à quoi correspondent tous ces éléments, vous pouvez consulter :
Pour savoir à quoi correspondent tous ces éléments, vous pouvez consulter :\
<https://github.com/opencontainers/runtime-spec/blob/master/config.md>
Rassurez-vous, il n'y a que très peu de champs à modifier.

View File

@ -131,10 +131,10 @@ Testing mysql...
✗ High severity vulnerability found in gcc-8/libstdc++6
Description: Insufficient Entropy
Info: https://snyk.io/vuln/SNYK-DEBIAN10-GCC8-469413
Introduced through: apt@1.8.2.3, mysql-community/mysql-community-client@[...]
Introduced through: apt@1.8.2.3, mysql-community/mysql-client@[...]
From: apt@1.8.2.3 > gcc-8/libstdc++6@8.3.0-6
From: mysql-community/mysql-community-client@8.0.26-1debian10 > gcc-8[...]
From: mysql-community/mysql-community-server-core@8.0.26-1debian10 > gcc-8[...]
From: mysql-community/mysql-client@8.0.26-1debian10 > gcc-8[...]
From: mysql-community/mysql-server-core@8.0.26-1debian10 > gcc-8[...]
and 7 more...
Image layer: Introduced by your base image (mysql:8.0.26)
@ -144,7 +144,7 @@ Docker image: mysql
Platform: linux/amd64
Base image: mysql:8.0.26
Tested 135 dependencies for known vulnerabilities, found 79 vulnerabilities.
Tested 135 dependencies for known vulnerabilities, found 79 vulnerabilities
According to our scan, you are currently using the most secure version of
the selected base image

View File

@ -1,5 +1,3 @@
\newpage
Ma première image ... par `Dockerfile`
--------------------------------------

View File

@ -30,7 +30,7 @@ ENTRYPOINT ["/bin/echo", "Hello"]
Nous obtenons les résultats suivants :
<div lang="en-US">
```bash
```
42sh$ docker run sample-echo
Hello world
```
@ -50,7 +50,7 @@ commande exécutée est :
Essayons maintenant avec des arguments :
<div lang="en-US">
```sh
```
42sh$ docker run sample-echo $USER
Hello neo
```
@ -64,7 +64,7 @@ Si l'on a besoin d'exécuter un `ENTRYPOINT`{.dockerfile} différent, il reste l
possibilité de le surcharger au moyen d'un argument :
<div lang="en-US">
```sh
```
42sh$ docker run --entrypoint /bin/sh sample-echo
01abc345# _
```

View File

@ -1,5 +1,3 @@
\newpage
D'autres méthodes pour créer des images
---------------------------------------

View File

@ -60,5 +60,5 @@ version. Kubernetes verra la différence et appliquera une politique de
migration déterminée.
Une fois que c'est fait, nous pouvons fièrement utiliser notre navigateur pour
aller sur <http://localhost:30002/> (vous pouvez *Skip* l'authentification,
aller sur l'adresse <http://localhost:30002/> (vous pouvez *Skip* l'authentification,
dans cette configuration d'exemple, elle n'est pas nécessaire).

View File

@ -129,7 +129,7 @@ besoins en termes de réseau.
Ainsi, à la création d'un conteneur, Kubernetes va laisser aux plugins CNI le
loisir d'allouer l'adresse IP, d'ajouter les interfaces réseaux adéquates, de
configurer les routes, les règles de pare-feu, ...
configurer les routes, les règles de pare-feu, ...
### Pour aller plus loin