GNU/Linux >> Tutoriels Linux >  >> Linux

4 technologies Linux fondamentales pour les conteneurs

Dans les articles précédents, j'ai écrit sur les images de conteneurs et les runtimes. Dans cet article, j'examine comment les conteneurs sont rendus possibles par une fondation de certaines technologies Linux spéciales, y compris les espaces de noms et les groupes de contrôle.

Conteneurs Linux

  • Que sont les conteneurs Linux ?
  • Une introduction à la terminologie des conteneurs
  • Télécharger :Introduction aux conteneurs
  • Opérateurs Kubernetes :automatisation de la plate-forme d'orchestration de conteneurs
  • eBook :Modèles Kubernetes pour la conception d'applications cloud natives
  • Qu'est-ce que Kubernetes ?

Les technologies Linux constituent les bases de la création et de l'exécution d'un processus de conteneur sur votre système. Les technologies incluent :

  1. Espaces de noms
  2. Groupes de contrôle (cgroups)
  3. Seccomp
  4. SELinux

Espaces de noms

Espaces de noms fournir une couche d'isolation pour les conteneurs en donnant au conteneur une vue de ce qui semble être son propre système de fichiers Linux. Cela limite ce qu'un processus peut voir et restreint donc les ressources dont il dispose.

Il existe plusieurs espaces de noms dans le noyau Linux qui sont utilisés par Docker ou Podman et d'autres lors de la création d'un conteneur :

 

$ docker container run alpine ping 8.8.8.8
$ sudo lsns -p 29413
        NS TYPE   NPROCS PID USER COMMAND
4026531835 cgroup   299   1  root /usr/lib/systemd/systemd --
switched...
4026533105 mnt 1 29413 root ping 8.8.8.8
4026533106 uts 1 29413 root ping 8.8.8.8
4026533105 ipc 1 29413 root ping 8.8.8.8
[...]

Utilisateur

L'espace de noms d'utilisateur isole les utilisateurs et les groupes dans un conteneur. Cela se fait en permettant aux conteneurs d'avoir une vue différente des plages UID et GID par rapport au système hôte. L'espace de noms d'utilisateur permet au logiciel de s'exécuter à l'intérieur du conteneur en tant qu'utilisateur root. Si un intrus attaque le conteneur puis s'échappe vers la machine hôte, il est confiné à une seule identité non root.

Mnt

L'espace de noms mnt permet aux conteneurs d'avoir leur propre vue de la hiérarchie du système de fichiers du système. Vous pouvez trouver les points de montage pour chaque processus de conteneur dans le /proc//mounts emplacement dans votre système Linux.

UTS

L'espace de noms Unix Timesharing System (UTS) permet aux conteneurs d'avoir un nom d'hôte et un nom de domaine uniques. Lorsque vous exécutez un conteneur, un ID aléatoire est utilisé comme nom d'hôte même lorsque vous utilisez le — name étiqueter. Vous pouvez utiliser le unshare commande pour avoir une idée de comment cela fonctionne.

$ docker container run -it --name nived alpine sh
/ # hostname
9c9a5edabdd6
/ #
$ sudo unshare -u sh
# hostname isolated.hostname
# hostname
# exit
$ hostname
homelab.redhat.com

IPC

L'espace de noms Inter-Process Communication (IPC) permet à différents processus de conteneur de communiquer en accédant à une plage de mémoire partagée ou en utilisant une file d'attente de messages partagée.

 

# ipcmk -M 10M
Shared memory id: 0
# ipcmk -M 20M
Shared memory id: 1
# ipcs
---- Message Queues ----
key  msqid  owner  perms  used-bytes  messages

---- Shared Memory Segments
key        shmid owner perms bytes    nattch status
0xd1df416a 0     root  644   10485760 0
0xbd487a9d 1     root  644   20971520 0
[...]

PID

L'espace de noms Process ID (PID) garantit que les processus exécutés à l'intérieur d'un conteneur sont isolés du monde extérieur. Lorsque vous exécutez un ps commande à l'intérieur d'un conteneur, vous ne voyez que les processus en cours d'exécution à l'intérieur du conteneur et non sur la machine hôte à cause de cet espace de noms.

Réseau

L'espace de noms réseau permet au conteneur d'avoir sa propre vue de l'interface réseau, des adresses IP, des tables de routage, des numéros de port, etc. Comment un conteneur est-il capable de communiquer avec le monde extérieur ? Tous les conteneurs que vous créez sont attachés à une interface réseau virtuelle spéciale pour la communication.

Groupes de contrôle (cgroups)

Les Cgroups sont des blocs fondamentaux de la création d'un conteneur. Un groupe de contrôle alloue et limite les ressources telles que le CPU, la mémoire, les E/S réseau qui sont utilisées par les conteneurs. Le moteur de conteneur crée automatiquement un système de fichiers de groupe de contrôle de chaque type et définit des valeurs pour chaque conteneur lors de son exécution.

SECCOMP

Seccomp signifie essentiellement informatique sécurisée . Il s'agit d'une fonctionnalité Linux utilisée pour restreindre l'ensemble des appels système qu'une application est autorisée à effectuer. Le profil seccomp par défaut pour Docker, par exemple, désactive environ 44 appels système (plus de 300 sont disponibles).

L'idée ici est de fournir aux conteneurs un accès uniquement aux ressources dont le conteneur pourrait avoir besoin. Par exemple, si vous n'avez pas besoin du conteneur pour modifier l'heure de l'horloge sur votre machine hôte, vous n'avez probablement aucune utilité pour le clock_adjtime et clock_settime appels système, et il est logique de les bloquer. De même, vous ne voulez pas que les conteneurs modifient les modules du noyau, il n'est donc pas nécessaire qu'ils fassent create_module, delete_module appels système.

SELinux

SELinux signifie Linux à sécurité renforcée . Si vous exécutez une distribution Red Hat sur vos hôtes, SELinux est activé par défaut. SELinux vous permet de limiter l'accès d'une application à ses propres fichiers et d'empêcher tout autre processus d'y accéder. Ainsi, si une application est compromise, cela limiterait le nombre de fichiers qu'elle peut affecter ou contrôler. Il le fait en configurant des contextes pour les fichiers et les processus et en définissant des politiques qui appliqueraient ce qu'un processus peut voir et apporter des modifications.

Les politiques SELinux pour les conteneurs sont définies par le container-selinux emballer. Par défaut, les conteneurs sont exécutés avec le container_t label et sont autorisés à lire (r) et exécuter (x) sous le /usr répertoire et lire la plupart du contenu de /etc annuaire. Le libellé container_var_lib_t est courant pour les fichiers relatifs aux conteneurs.

Récapitulez

Les conteneurs sont un élément essentiel de l'infrastructure informatique d'aujourd'hui et une technologie assez intéressante également. Même si votre rôle n'implique pas directement la conteneurisation, la compréhension de quelques concepts et approches fondamentaux des conteneurs vous permet de comprendre comment ils peuvent aider votre organisation. Le fait que les conteneurs soient construits sur des technologies Linux open source les rend encore meilleurs !


Cet article est basé sur un article techbeatly et a été adapté avec autorisation.


Linux
  1. Construisez votre propre conteneur sur Linux

  2. Démystifier les espaces de noms et les conteneurs sous Linux

  3. Un historique des runtimes de conteneurs Linux de bas niveau

  4. 10 guides de conteneurs pour les administrateurs système

  5. Environnement Linux isolé léger

Dites simplement non à la racine (dans des conteneurs)

Introduction à la gestion des conteneurs Linux

Qu'est-ce que Docker (et les conteneurs Linux ?)

Comment gérer les conteneurs Docker

Qu'est-ce qui rend un serveur Linux noyau fondamental ?

Les conteneurs Windows peuvent-ils être hébergés sur Linux ?