Grâce à leur con­vi­via­lité, les con­te­neurs Linux jouissent d’une grande po­pu­la­rité et sont désormais une com­po­sante im­por­tante de la sécurité in­for­ma­tique. La pla­te­forme de con­te­neurs LXC (Linux Container) est utilisée pour isoler plusieurs processus les uns des autres et du reste du système. Pour cela, une image est créée grâce à la vir­tua­li­sa­tion qui permet de conserver la por­ta­bi­lité et la cohérence de chaque conteneur, du dé­ve­lop­pe­ment à l’ex­ploi­ta­tion en passant par la phase d’essai. Ainsi les ap­pli­ca­tions in­di­vi­duelles possèdent chacune un en­vi­ron­ne­ment virtuel, tout en utilisant col­lec­ti­ve­ment le noyau du système hôte.

Que per­met­tent les LXC (Linux Container) ? La sim­pli­cité est-elle toujours un avantage et quelle quantité de mémoire de machine virtuelle se cache dans un conteneur Linux ?

Linux Container, qu’est-ce que c’est ?

Le terme Linux Container (LXC) désigne à la fois les ap­pli­ca­tions vir­tua­li­sées basées sur Linux et la pla­te­forme et la tech­no­lo­gie de conteneur sous-jacente. Il est né­ces­saire de garder ceci à l’esprit, notamment lorsqu’on parle de pla­te­formes de con­te­neurs al­ter­na­tives qui utilisent également les Linux Container comme tech­no­lo­gie.

LXC est une pla­te­forme de con­te­neurs open source qui promet une uti­li­sa­tion simple, ce qui est plutôt rare pour un système de con­te­neurs, et une ex­pé­rience uti­li­sa­teur intuitive et moderne. Pour cela, la pla­te­forme offre dif­fé­rents outils, langues, modèles et bi­blio­thèques. En outre, l’en­vi­ron­ne­ment de vir­tua­li­sa­tion peut s’installer et s’utiliser sur toutes les dis­tri­bu­tions courantes de Linux.

Conseil

Les con­te­neurs sont des outils uniques utiles au dé­ve­lop­pe­ment et à la gestion des ap­pli­ca­tions d’une manière qu’on a longtemps jugée im­pos­sible : ils per­met­tent aux ap­pli­ca­tions d’être isolées du système, sans avoir à les exécuter dans un système isolé. Elles peuvent donc continuer à échanger des in­for­ma­tions avec le monde extérieur. Leur arrivée a été l’équi­valent d’une ré­vo­lu­tion et depuis la tech­no­lo­gie de con­te­neurs s’est dé­ve­lop­pée et de nombreux four­nis­seurs sont en con­cur­rence sur le marché. Les prin­ci­paux four­nis­seurs de container-as-a-service sont Amazon, Microsoft et Google. Cependant, la pla­te­forme la plus connue est Docker, une extension du projet Linux Container (LXC) qui prend en charge avant tout les four­nis­seurs CaaS.

C’est en 2001 que nait l’idée de la tech­no­lo­gie Linux Container. C’est dans le cadre du projet Vserver, qu’un en­vi­ron­ne­ment isolé a été im­plé­menté pour la première fois. Cela a posé les bases de la mise en place de plusieurs espaces de noms contrôlés dans Linux et de ce qui est main­te­nant appelé le conteneur Linux. D’autres tech­no­lo­gies comme les cgroups (Control Groups) qui peuvent contrôler et limiter l’uti­li­sa­tion des res­sources d’un processus ou de groupes de processus ont suivi. Avec systemd, un système d’ini­tia­li­sa­tion pour la gestion des espaces de noms et de leurs processus a été ajouté.

Dans la pratique, LXC assure un dé­ve­lop­pe­ment plus rapide des ap­pli­ca­tions. La technique de con­te­neurs aide notamment pour le portage, la con­fi­gu­ra­tion et l’isolation. Lors de la diffusion de données en temps réel, les con­te­neurs jouent aussi un rôle majeur en mettant à dis­po­si­tion l’évo­lu­ti­vité né­ces­saire aux ap­pli­ca­tions. Les Linux Con­tai­ners s’adaptent à l’in­fras­truc­ture ce qui les rend hautement in­dé­pen­dants et permet donc de les utiliser aussi bien en local que sur un Cloud ou dans un en­vi­ron­ne­ment hybride.

Note

La raison du franc succès de la tech­no­lo­gie de con­te­neurs peut s’expliquer en partie comme suit : chaque ap­pli­ca­tion d’un système d’ex­ploi­ta­tion a ses tâches et les effectue pré­ci­sé­ment dans cet en­vi­ron­ne­ment. Elles se basent sur les con­fi­gu­ra­tions exis­tantes du pro­gram­meur et dépendent donc de certaines bi­blio­thèques, contextes et fichiers. Les con­te­neurs sont eux utilisés pour tester les nouvelles ap­pli­ca­tions de manière simple, rapide et sûre : cela permet à une nouvelle ap­pli­ca­tion d’être utilisée dans un en­vi­ron­ne­ment virtuel sans réé­cri­ture, débogage et problèmes. Le contenu d’un conteneur est modelé sur une ins­tal­la­tion d’une dis­tri­bu­tion Linux, en contient tous les fichiers de con­fi­gu­ra­tion, mais est beaucoup plus facile à mettre en place que le système d’ex­ploi­ta­tion réel.

Les objectifs et fonc­tion­na­li­tés de la tech­no­lo­gie LXC

Au premier abord, il est difficile de saisir ce qui dif­fé­ren­cie LXC des systèmes de vir­tua­li­sa­tion clas­siques. C’est en prenant du recul que la dif­fé­rence saute aux yeux. Elle peut être résumée comme suit : les con­te­neurs fonc­tion­nent au niveau du système d’ex­ploi­ta­tion, les machines vir­tuelles au niveau du matériel. Les con­te­neurs se partagent le système d’ex­ploi­ta­tion et isolent les processus d’ap­pli­ca­tion du reste du système tandis que les systèmes de vir­tua­li­sa­tion classique per­met­tent l’exécution de plusieurs systèmes d’ex­ploi­ta­tion sur un seul système.

Note

Pour permettre le fonc­tion­ne­ment simultané de plusieurs systèmes d’ex­ploi­ta­tion dans un système d’ex­ploi­ta­tion, il est possible d’utiliser un hy­per­vi­seur pour émuler un système hardware, mais cela demande une grande quantité de res­sources. L’uti­li­sa­tion de con­te­neurs d’ap­pli­ca­tion exécutés na­ti­ve­ment sur le système d’ex­ploi­ta­tion, c’est-à-dire sans émulation, est beaucoup plus économe en res­sources.

Les con­te­neurs Linux né­ces­si­tent en général moins de res­sources qu’une machine virtuelle et possèdent une interface standard qui permet de gérer fa­ci­le­ment plusieurs con­te­neurs si­mul­ta­né­ment. Une pla­te­forme avec LXC peut d’ailleurs être organisée sur plusieurs Clouds, ce qui assure la por­ta­bi­lité et garantit que les ap­pli­ca­tions qui fonc­tion­nent cor­rec­te­ment sur le système du dé­ve­lop­peur fonc­tion­ne­ront sur n’importe quel autre système. Grâce à l’interface Linux Container, il est possible de démarrer, arrêter ou modifier les variables d’en­vi­ron­ne­ment même celles de grosses ap­pli­ca­tions.

Pour résumer, l’objectif de LXC est de créer un en­vi­ron­ne­ment qui ressemble le plus possible à une ins­tal­la­tion Linux standard sans avoir besoin d’un noyau séparé.

La pla­te­forme de con­te­neurs Linux actuelle utilise les fonc­tion­na­li­tés de noyau suivantes pour « enfermer » les ap­pli­ca­tions et processus dans un conteneur :

  • Espaces de noms des noyaux (ipc, uts, mount, pid,réseau et uti­li­sa­teur)
  • Profil Apparmor et SELinux
  • Di­rec­tives Seccomp
  • Chroots (à l’aide de pivot_root)
  • Capacité de noyau
  • cgroups (groupes de contrôle)

Les con­te­neurs Linux doivent rester compacts. C’est pourquoi ils sont composés de peu de com­po­sants in­dé­pen­dants :

  • La bi­blio­thèque liblxc
  • Plusieurs liens de langage pour l’API :
    • python3 (support à long terme en 2.0.x)
    • lua (support à long terme en 2.0.x)
    • Go
    • Ruby
    • Python
    • Haskell
  • Une gamme d’outils standards pour le contrôle du conteneur
  • Modèles pour les dis­tri­bu­tions

Comment fonc­tionne LXC ?

L’isolation et la vir­tua­li­sa­tion sont aussi im­por­tantes, car elles aident à gérer ef­fi­ca­ce­ment les res­sources et les questions de sécurité. Elles allègent la sur­veil­lance, notamment pour la détection d’erreurs dans le système qui n’ont souvent rien à voir avec les nouvelles ap­pli­ca­tions. Mais comment cela fonc­tionne-t-il avec LXC ? Autrement dit : comment fonc­tion­nent les Linux Con­tai­ners ?

La manière la plus simple et la plus ju­di­cieuse d’utiliser Linux Container est de connecter chaque conteneur avec un processus. Cela permet d’obtenir un contrôle complet. Pour chaque processus, les espaces de noms qui mettent des res­sources à la dis­po­si­tion d’un ou plusieurs processus qui utilisent le même espace de noms sont par­ti­cu­liè­re­ment im­por­tants. En outre, les processus servent de contrôle d’accès pour sécuriser les con­te­neurs.

Pour utiliser un en­vi­ron­ne­ment LXC, les ca­rac­té­ris­tiques et leurs fonctions doivent être claires. Les cgroups (groupes de contrôle du noyau) limitent et isolent les res­sources des processus telles que l’unité centrale, les E/S, la mémoire et les res­sources réseau. En outre, le contenu d’un groupe de contrôle peut être ad­mi­nis­tré, surveillé, priorisé et modifié.

Note

Dans Linux tout est dans un dossier. Pour cette raison, chaque cgroup est un ensemble de fichiers (/sys/fs/cgroup). Pour gérer ce type de fichier, il existe dif­fé­rents outils tels que cgmnager.

Les fonctions sont claires et la pla­te­forme LXC est donc très con­vi­viale, ce qui est un avantage non né­gli­geable notamment pour les débutants. Découvrez ci-dessous les in­con­vé­nients de cette méthode.

Aperçu des avantages et in­con­vé­nients des Linux Container

La facilité d’uti­li­sa­tion des Linux Container est un gros avantage comparé aux tech­niques de vir­tua­li­sa­tion clas­siques. Cependant, la très large diffusion de LXC, l’éco­sys­tème presque complet et les outils innovants sont prin­ci­pa­le­ment dus à la pla­te­forme Docker, qui a mis en place les con­te­neurs Linux. Comparé à d’autres systèmes de con­te­neurs tels que rkt, OpenVZ, Cloud Foundry Garden, qui sont beaucoup plus limités dans leur uti­li­sa­tion, LXC bénéficie de ses liens étroits avec le pionnier des pla­te­formes de con­te­neurs.

Un ad­mi­nis­tra­teur système qui a déjà travaillé avec une vir­tua­li­sa­tion basée sur un hy­per­vi­seur comme Hyper-V n’aura aucun problème pour faire fonc­tion­ner LXC. L’ensemble du dis­po­si­tif, de la création des modèles de con­te­neurs et leur dé­ploie­ment et la con­fi­gu­ra­tion du système d’ex­ploi­ta­tion à la mise en réseau en passant par le dé­ploie­ment des ap­pli­ca­tions, reste le même. Tous les scripts et les flux de travail conçus pour les machines vir­tuelles peuvent également être utilisés pour les Linux Container. Les dé­ve­lop­peurs n’ont ainsi pas de nouvelles solutions et de nouveaux outils sur mesure, mais peuvent continuer à tra­vail­ler sans problème dans un en­vi­ron­ne­ment familier et avec leurs propres scripts et flux de travail au­to­ma­ti­sés.

Un in­con­vé­nient majeur de LXC se situe au niveau de la gestion de la mémoire : bien que dif­fé­rents backend de mémoire (ivm, overlayfs, zfs et btrfs) soient pris en charge, par défaut, la mémoire est stockée di­rec­te­ment sur le rootfs. Il manque une option d’en­re­gis­tre­ment pour les images. D’autres pla­te­formes de con­te­neurs offrent des solutions plus in­tel­li­gentes et plus flexibles pour le stockage des con­te­neurs et la gestion des images.

Quand utilise-t-on LXC ?

LXC est un projet en open source soutenu fi­nan­ciè­re­ment par Canonical, l’en­tre­prise derrière la dis­tri­bu­tion de Linux Ubuntu. Le plus grand soutien à ce projet vient cependant de sa propre com­mu­nauté qui développe ensemble des versions stables et des mises à jour de sécurité et fait avancer le projet. Dif­fé­rentes éditions de LXC bé­né­fi­cient d’ailleurs déjà d’un support durable et de mises à jour de sécurité ré­gu­lières. Les autres versions sont main­te­nues au mieux, gé­né­ra­le­ment jusqu’à la sortie d’une version plus récente et plus stable.

Dans la plupart des cas, les Linux Con­tai­ners sont utilisés comme tech­no­lo­gie de con­te­neurs ad­di­tion­nelle de soutien. Toutefois, ce n’est pas in­ha­bi­tuel dans ce domaine, car con­trai­re­ment aux machines vir­tuelles, les con­te­neurs sont encore con­si­dé­rés comme une tech­no­lo­gie assez récente. Il faut néanmoins noter que le nombre de four­nis­seurs de solutions de con­te­neurs augmente con­ti­nuel­le­ment et avec eux l’éco­sys­tème autour de cette tech­no­lo­gie.

LXC est aujourd’hui une al­ter­na­tive per­ti­nente aux ap­pli­ca­tions tra­di­tion­nelles exis­tantes, qui s’adresse plus par­ti­cu­liè­re­ment aux ad­mi­nis­tra­teurs de machines vir­tuelles. La tran­si­tion d’une machine virtuelle à une tech­no­lo­gie de con­te­neurs est plus facile avec Linux Container qu’avec d’autres tech­niques de con­te­neurs.

Existe-t-il des al­ter­na­tives à Linux Container ?

L’al­ter­na­tive la plus populaire à LXC est Docker. La pla­te­forme basée sur les con­te­neurs Linux a été dé­ve­lop­pée en continu au cours des dernières années et fonc­tionne désormais sur les systèmes Windows. Ainsi les plus gros four­nis­seurs Cloud comme Google IBM, AWS et Azure assurent la prise en charge native de Docker.

OpenVZ est une autre al­ter­na­tive de con­te­neurs (Linux) connue pour la vir­tua­li­sa­tion intégrale de serveurs. Comme LXC, OpenVZ utilise le noyau du système d’ex­ploi­ta­tion hôte et met à dis­po­si­tion des uti­li­sa­teurs les serveurs virtuels dans des en­vi­ron­ne­ments isolés.

KVM est une tech­no­lo­gie de vir­tua­li­sa­tion open source déjà intégrée dans Linux. KVM signifie Kernel-based Virtual Machine (machine virtuelle basée sur le noyau). Cela permet de trans­for­mer Linux en hy­per­vi­seur, ce qui permet à la machine hôte de faire fonc­tion­ner plusieurs en­vi­ron­ne­ments isolés.

Ku­ber­netes est à l’origine issu de Google qui était l’un des premiers soutiens de la tech­no­lo­gie de con­te­neurs Linux. Cette pla­te­forme open source au­to­ma­tise l’ex­ploi­ta­tion de con­te­neurs Linux. Des groupes entiers d’hôtes, sur lesquels fonc­tion­nent les con­te­neurs, sont regroupés en cluster et peuvent ainsi être gérés fa­ci­le­ment.

Note

LXC et LXD sont étroi­te­ment liés et il est difficile d’évoquer l’un sans l’autre. Ces deux termes et ces deux tech­no­lo­gies sont dif­fi­ciles à dif­fé­ren­cier. LXD est un pro­lon­ge­ment de LXC qui contient notamment un système daemon.

Aller au menu principal