Un conteneur est un ensemble de processus isolés du reste du système et permet d’empaqueter des applications en simplifiant leur déploiement et leur gestion.
RHEL prend en charge les conteneurs en utilisant :
- Control Groups (
cgroups
) pour la gestion des ressources - Namespaces pour l’isolement des processus
- SELinux et Seccomp (Secure Computing Mode) pour appliquer les limites de sécurité
Différences entre conteneurs et machines virtuelles
Les conteneurs et machines virtuelles ont de nombreux avantages en commun : sécurité, stockage et isolement réseau. Tout deux isolent leurs bibliothèques d’applications et leurs ressources.
Machine virtuelle :
- Permet à plusieurs systèmes d’exploitation de s’exécuter simultanément sur une seule plateforme matérielle
- Utilise un hyperviseur pour diviser le matériel en plusieurs systèmes matériels virtuels
- Nécessite un environnement de système d’exploitation complet pour prendre en charge l’application
Conteneur :
- S’exécute directement sur le système d’exploitation hôte et partage les ressources matérielles avec tous les conteneurs du système
- Partage le noyau de l’hôte mais isole les processus d’application du reste du système
- Nécessite beaucoup moins de ressources matérielles donc les conteneurs sont plus rapides à démarrer
- Inclut toutes les dépendances : système, programmation et les paramètres de configuration
Note : certaines applications ne fonctionnent pas en tant que conteneur, généralement si elles ont besoin d’accéder à des informations matérielles de bas niveau.
Architectures et gestion des conteneurs
Généralement, on fait en sorte que 1 service = 1 conteneur. Le but étant de faciliter la maintenance et les services/applications restent indépendantes et ne sont pas affectées.
Les conteneurs permettent de :
- réutiliser les applications
- rendre portables les applications
- être déplacés d’un environnement à un autre (ex: DEV -> PROD)
- avoir plusieurs versions (des copies)
- avoir une utilisation temporaire
- avoir leur données générées enregistrées dans un stockage persistant
- s’exécuter lorsque cela est nécessaire
Conteneurs Rootful et Rootless
Les conteneurs peuvent être exécuté en tant que root (rootful) ou en tant qu’utilisateur normal (rootless) et définissent l’accès aux ressources système.
- Conteneurs rootful : conteneurs exécutés par un utilisateur privilégié.
- Conteneurs rootless : conteneurs exécutés par un utilisateur non privilégié.
Outils de gestion de conteneur
Les principaux outils pour exécuter des conteneurs sont :
- podman : gestion des conteneurs et des images
- skopeo : inspection, copie, suppression et signature des images
- buildah : création des images de conteneur
Images de conteneurs et registres
Pour exécuter des conteneurs, il faut utiliser une image de conteneur qui est un fichier servant de modèle pour créer des conteneurs (ces images empaquètent les applications avec leurs dépendances).
Le registre de conteneur (privé ou public) est un référentiel pour le stockage et la récupération des images de conteneur.
Les registres de conteneurs certifiés Red Hat sont :
registry.redhat.io
: conteneurs basés sur les produits Red Hatregistry.connect.redhat.com
: conteneurs basés sur des produits tiers
La commande podman login
permet de s’authentifier auprès des registres :
# podman login registry.lab.example.com |
Ne pas utiliser l’option --password
car stocké dans les logs.
Vérification de connection avec l’argument --get-login
:
# podman login registry.access.redhat.com --get-login |
Configuration de registres de conteneurs
Le fichier de configuration par défaut pour les registres de conteneurs est /etc/containers/registries.conf
.
# cat /etc/containers/registries.conf |
Pour faire du rootless, il est possible de créer un fichier de conf dans $HOME/.config/containers
.
Ce fichier remplacera /etc/containers/registries.conf
et sera utilisé par Podman en mode rootless.
La section unqualified-search-registries
est utilisée par défaut (et peut rester vide).
Pour rechercher l’image de conteneur si rien n’est précisé :
$ podman pull ubi |
Avec un nom complet (recommandé) de l’image de conteneur :
$ podman pull registry.access.redhat.com/ubi8/ubi:latest |
Pour configurer des registres de conteneurs :
# [[registry]] |
Options :
location
: emplacement du registre de conteneursinsecure
:true
: connexion non chiffrées, certificats non approuvésfalse
: connexion chiffrées, certificats approuvés
blocked
true
: les images ne peuvent pas être téléchargées à partir du registrefalse
: les images peuvent être téléchargées à partir du registre
Fichiers de conteneurs pour compiler des images de conteneur
Les fichiers de conteneur contiennent des instructions pour compiler une image de conteneur.
Exemple utilisant la dernière image d’Ubi :
$ cat myContainerFile |
Red Hat OpenShift
Red Hat propose une distribution Kubernetes appelée Red Hat OpenShift.
C’est un ensemble de composants et de services créés par-dessus Kubernetes :
- gestion à distance basée sur le Web
- architecture multisite
- contrôle
- audit
- sécurité
- gestion des cycles de vie
Kubernetes :
- équilibre les charges
- vérifie l’intégrité des conteneurs
- redémarre les conteneurs en cas d’échec
/!\ Résumé des commandes
Commandes :
podman login registry.lab.example.com |
Fichiers :
/etc/containers/registries.conf // fichier de config principal |
Configurer des registres de conteneurs :
[[registry]] |
Documentation
MAN cgroups(7)
MAN namespaces(7)
MAN seccomp(2)
https://www.openshift.com
https://github.com/opencontainers/image-spec/blob/master/spec.md
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/htmlsingle/building_running_and_managing_containers/index
https://www.redhat.com/en/resources/container-security-openshift-cloud-devopswhitepaper
https://access.redhat.com/containers : Red Hat Container Catalog
https://access.redhat.com/products/red-hat-quay