Containerisation : les plus et les moins

La conteneurisation permet de regrouper son application et toutes ses dépendances sous forme de conteneurs pour assurer que l'application fonctionne dans n'importe quel environnement de test ou de production, de manière transparente. Quelles sont les plus et les moins de cette pratique maintenant courante.

La conteneurisation s’est imposée comme une pratique courante de développement d’applications. L’avènement de Docker Engine en 2013 a été un tournant dans son adoption par la majorité des équipes dev. Elle consiste à regrouper le code et tous ses composants dans un conteneur, de sorte que l’application dans le conteneur puisse s’exécuter de manière complète, indépendamment des spécificités de l’environnement. Intégrant tout ce qu’il lui faut pour fonctionner, le conteneur est dans ce cas un environnement de calcul isolé et qui peut être déplacé entre différentes plateformes et infrastructures.


Les bienfaits de la containerisation

Sur le papier, la containerisation est toujours présentée comme une solution pratique et flexible, mais selon les experts, elle ne se limite pas à ce rôle. Découvrons alors tous les avantages de la containerisation.

L’adaptabilité

Le premier avantage de ce changement de paradigme réside dans l’adaptabilité des conteneurs. En effet, ces derniers ne sont plus configurés pour un système d’exploitation en particulier et peuvent donc s’exécuter de la même manière, quelle que soit l’infrastructure. Les images de conteneurs comprennent tout ce qui est nécessaire à leur fonctionnement, comme les fichiers binaires, les intégrations tierces ou encore les dépendances.

La portabilité

La portabilité des conteneurs suggère qu’il est possible de créer une image de conteneur sur une plateforme, par exemple Windows, avant de la déployer sur Mac ou Linux. Avant la standardisation des conteneurs, réaliser une telle prouesse demandait beaucoup de temps compte tenu de l’importante différence des bibliothèques d’exécution et des dépendances. Cela étant dit, il faut rappeler que la configuration et le stockage de données ne peuvent faire partie de l’image du conteneur et doivent faire partie de l’environnement.

L’agilité

Dans une organisation DevOps moderne, les conteneurs sont incontournables pour réaliser des déploiements rapides et relever des défis CI/CD. La création et la suppression de conteneurs sont simples à réaliser, permettant aux équipes de gagner en agilité et grâce à des outils comme Kubernetes, l’automatisation et la mise à l’échelle sont également facilités. En compartimentant l’application en plusieurs micro-services, les équipes DevOps peuvent apporter des modifications ciblées, ce qui permet de réaliser des déploiements plus rapides.

L’isolation des erreurs

Comme chaque conteneur est fondamentalement indépendant, les développeurs bénéficient d’une certaine résilience. En cas de panne sur un conteneur, cela n’aura aucun effet direct sur les autres. Résoudre les bugs devient donc possible sans avoir à gérer des temps d’arrêt de l’application dans son ensemble. Cette particularité renforce également la sécurité puisque les intrusions malveillantes sont donc isolées au sein des conteneurs infectés, limitant ainsi leurs dégâts et facilitant les interventions.

La gestion des ressources

Grâce à un outil comme Kubernetes, il est possible de réaliser des mises à l’échelles intelligentes, en fonction des besoins en matière de ressources. En effet, ces besoins peuvent évoluer à certains moments, en fonction du trafic. Pour supporter le surplus de charges, il est conseillé de créer de nouveaux conteneurs, identiques aux autres, et c’est chose aisée grâce à la conteneurisation. Le côté léger des conteneurs facilite la tâche dans cette optique.


Conteneurisation : les inconvénients

Malgré tous ces avantages, la conteneurisation possède également un envers du décor. L’usage des conteneurs présente quelques inconvénients que les professionnels doivent connaitre afin d’améliorer leurs pratiques et leurs organisations.

Des risques de sécurité à ne pas négliger

En cherchant à simplifier le processus de développement grâce aux conteneurs, les développeurs augmentent la vulnérabilité de l’application et en cas d’attaque, les bibliothèques vont propager cette vulnérabilité sur un volume important de la charge de travail. La conteneurisation expose aux attaques de la chaine d’approvisionnement qui, pour un cybercriminel, consiste à modifier des packages de l’application. Il faudra alors repenser les bibliothèques intégrées comme dépendance.

Les outils comme Docker et Kubernetes doivent également être protégés comme il se doit. Il faut surveiller les registres des conteneurs et veiller à ce que les administrateurs système n’exécutent pas en tant que root les conteneurs Docker.

Le besoin d’appliquer systématiquement des correctifs

Pour que les conteneurs puissent fonctionner de manière sure, il est nécessaire de mettre le noyau de l’hôte à jour régulièrement. Ensuite, il est primordial d’appliquer des correctifs aux bibliothèques extraites par les conteneurs. Cette étape est contraignante et assez difficile à mettre en place, raison pour laquelle 3 conteneurs sur 4 demeurent vulnérables. En effet, les bibliothèques peu sécurisées ou défaillantes offrent la possibilité aux pirates d’exécuter le code hors du conteneur.

Pour être en mesure d’appliquer systématiquement les bons correctifs, l’idéal est de recruter un profil spécialisé si cela fait défaut à l’entreprise.

La nécessaire évolution de l’organisation

La containerisation impose un changement organisationnel. Les processus doivent évoluer et inclure l’orchestrateur qui prend en charge et automatise de nombreuses tâches. S’orienter vers une organisation DevOps est vivement conseillée pour que les équipes soient également capables de déployer à une fréquence très élevée (jusqu’à plusieurs fois par jour). Pour le meilleur à terme mais à prendre en compte en termes de délais et compétences


Par Baptiste.casnedi