Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Il est courant d’utiliser des pipelines pour générer et déployer des images sur des clusters Azure Kubernetes Service (AKS). Bien qu’il soit idéal pour la création d’images, ce processus ne tient souvent pas compte des images obsolètes laissées derrière elles et peut entraîner des ballonnements d’images sur les nœuds de cluster. Ces images peuvent contenir des vulnérabilités, ce qui peut créer des problèmes de sécurité. Pour supprimer les risques de sécurité dans vos clusters, vous pouvez nettoyer ces images non référencées. Le nettoyage manuel des images peut s’avérer fastidieux. Image Cleaner effectue l’identification et la suppression automatiques des images, ce qui atténue le risque d’images obsolètes et réduit le temps nécessaire pour les nettoyer.
Remarque
Image Cleaner est une fonctionnalité basée sur Eraser.
Sur un cluster AKS, le nom de la fonctionnalité et le nom de la propriété est Image Cleaner alors que les noms des pods Image Cleaner pertinents contiennent Eraser.
Prérequis
- Un abonnement Azure. Si vous n’avez pas d’abonnement Azure, vous pouvez créer un compte gratuit.
- Azure CLI version 2.49.0 ou ultérieure. Exécutez
az --versionpour rechercher votre version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
Limites
Image Cleaner ne prend pas encore en charge les pools de nœuds Windows ou les nœuds virtuels AKS.
Fonctionnement d’Image Cleaner
Une fois que vous avez activé Image Cleaner, un pod de gestionnaire de contrôleurs nommé eraser-controller-manager est déployé sur votre cluster.
Avec Image Cleaner, vous pouvez choisir entre le mode manuel et le mode automatique et les options de configuration suivantes :
Options de configuration
| Nom | Description | Obligatoire |
|---|---|---|
--enable-image-cleaner |
Activer la fonctionnalité Image Cleaner pour un cluster AKS | Oui, sauf si Désactiver est spécifié |
--disable-image-cleaner |
Désactiver la fonctionnalité Image Cleaner pour un cluster AKS | Oui, sauf si Activer est spécifié |
--image-cleaner-interval-hours |
Ce paramètre détermine l’intervalle de temps (en heures) qu’Image Cleaner utilise pour s’exécuter. La valeur par défaut pour Azure CLI est d’une semaine, la valeur minimale de 24 heures et la valeur maximale de trois mois. | Non requis pour Azure CLI, requis pour le modèle ARM et d’autres clients |
Mode automatique
Une fois que eraser-controller-manager est déployé, les étapes suivantes sont effectuées automatiquement :
- Il démarre immédiatement le processus de nettoyage et crée des pods worker
eraser-aks-xxxxxpour chaque nœud. - Il existe trois conteneurs dans chaque pod worker :
- Un collecteur qui collecte les images inutilisées.
- Un trivy-scanner qui tire parti de trivy pour analyser les vulnérabilités des images.
- Un dissolvant qui supprime les images inutilisées présentant des vulnérabilités.
- Une fois le processus de nettoyage terminé, le pod worker est supprimé et le prochain nettoyage planifié se produit en fonction de l’intervalle
--image-cleaner-interval-hoursque vous définissez.
Mode manuel
Vous pouvez déclencher le nettoyage manuellement en définissant un objet CRD, ImageList. Cela déclenche l’eraser-contoller-manager afin de créer des pods worker eraser-aks-xxxxx pour chaque nœud et d’effectuer le processus de suppression manuelle.
Remarque
Après avoir désactivé Image Cleaner, l’ancienne configuration existe toujours. Cela signifie que si vous activez à nouveau la fonctionnalité sans passer explicitement la configuration, la valeur existante est utilisée au lieu de la valeur par défaut.
Activer Image Cleaner sur votre cluster AKS
Activer Image Cleaner sur un nouveau cluster
Activez Image Cleaner sur un nouveau cluster AKS à l’aide de la commande
az aks createavec le paramètre--enable-image-cleaner.az aks create \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner \ --generate-ssh-keys
Activer Image Cleaner sur un cluster existant
Activez Image Cleaner sur un cluster AKS existant à l’aide de la commande
az aks update.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner
Mettre à jour l’intervalle Image Cleaner sur un nouveau cluster ou un cluster existant
Mettez à jour l’intervalle Image Cleaner sur un nouveau cluster AKS ou un existant à l’aide du paramètre
--image-cleaner-interval-hours.# Create a new cluster with specifying the interval az aks create \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner \ --image-cleaner-interval-hours 48 \ --generate-ssh-keys # Update the interval on an existing cluster az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner \ --image-cleaner-interval-hours 48
Supprimer manuellement des images à l’aide d’Image Cleaner
Important
name doit être défini sur imagelist.
Supprimez une image manuellement avec la commande
kubectl applysuivante. Cet exemple montre comment supprimer l’imagedocker.io/library/alpine:3.7.3si elle n’est pas utilisée.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
Le nettoyage manuel est une opération ponctuelle qui est déclenchée seulement si une nouvelle imagelist est créée ou si des modifications sont apportées à l’imagelist existante. Une fois l’image supprimée, l’imagelist n’est pas supprimée automatiquement.
Si vous avez besoin de déclencher un autre nettoyage manuel, vous devez créer une nouvelle imagelist ou apporter des modifications à une liste qui existe déjà. Si vous souhaitez supprimer la même image une nouvelle fois, vous devez créer une nouvelle imagelist.
Supprimer une ImageList existante et en créer une nouvelle
Supprimez l’ancienne
imagelisten utilisant la commandekubectl delete.kubectl delete ImageList imagelistCréez une nouvelle
imagelistavec le même nom d’image. L’exemple suivant utilise la même image que l’exemple précédent.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
Modifier une ImageList existante
Modifiez l’
imagelistexistante en utilisant la commandekubectl edit.kubectl edit ImageList imagelist # Add a new image to the list apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: docker.io/library/python:alpine3.18
Lorsque vous utilisez le mode manuel, le pod eraser-aks-xxxxx effectue la suppression dans les 10 minutes qui suivent la fin du travail.
Liste d’exclusions d’images
Les images spécifiées dans la liste d’exclusion ne sont pas supprimées du cluster. Image Cleaner prend en charge les listes d’exclusions définies par le système et l’utilisateur. La modification de la liste d’exclusions système n’est pas prise en charge.
Vérifier la liste d’exclusions système
Vérifiez la liste d’exclusions système à l’aide de la commande
kubectl getsuivante.kubectl get -n kube-system configmap eraser-system-exclusion -o yaml
Créer une liste d’exclusions définie par l’utilisateur
Créez un exemple de fichier JSON pour contenir des images exclues.
cat > sample.json <<EOF {"excluded": ["excluded-image-name"]} EOFCréez une
configmapà l’aide de l’exemple de fichier JSON avec les commandeskubectl createetkubectl labelsuivantes.kubectl create configmap excluded --from-file=sample.json --namespace=kube-system kubectl label configmap excluded eraser.sh/exclude.list=true -n kube-system
Désactiver Image Cleaner
Désactivez Image Cleaner sur votre cluster à l’aide de la commande
az aks updateavec le paramètre--disable-image-cleaner.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --disable-image-cleaner
FAQ
Comment savoir quelle version d’Image Cleaner j’utilise ?
kubectl describe configmap -n kube-system eraser-manager-config | grep tag -C 3
Image Cleaner prend-il en charge d’autres analyseurs de vulnérabilité en plus de trivy-scanner ?
Nombre
Puis-je spécifier des niveaux de vulnérabilité pour les images à nettoyer ?
Nombre Les paramètres par défaut des niveaux de vulnérabilité comprennent :
-
LOW -
MEDIUM -
HIGH. Et CRITICAL
Vous ne pouvez pas personnaliser les paramètres par défaut.
Comment passer en revue les images qui ont été nettoyées par Image Cleaner ?
Les journaux d’image sont stockés dans le pod worker eraser-aks-xxxxx. Quand eraser-aks-xxxxx est actif, vous pouvez exécuter les commandes suivantes pour afficher les journaux de suppression :
kubectl logs -n kube-system <worker-pod-name> -c collector
kubectl logs -n kube-system <worker-pod-name> -c trivy-scanner
kubectl logs -n kube-system <worker-pod-name> -c remover
Le pod eraser-aks-xxxxx effectue la suppression dans les 10 minutes qui suivent la fin du travail. Vous pouvez suivre ces étapes pour activer le module complémentaire Azure Monitor et utiliser le tableau de journal de pod Container Insights. Après, les journaux historiques seront stockés et vous pourrez les consulter même si eraser-aks-xxxxx est supprimé.
Vérifiez qu’Azure Monitoring est activé sur votre cluster. Pour obtenir des instructions détaillées, consultez Activer Container Insights sur le cluster AKS.
Les journaux des conteneurs s’exécutant dans l’espace de noms
kube-systemne sont pas collectés par défaut. Supprimez l’espace de nomskube-systemdeexclude_namespacesdans la carte de configuration et appliquez la carte de configuration pour activer la collecte de ces journaux. Consultez Configurer la collecte des données d'observation des conteneurs pour plus de détails.Obtenez l’ID de ressource Log Analytics à l’aide de la commande
az aks show.az aks show --resource-group myResourceGroup --name myManagedClusterAu bout de quelques minutes, la commande renvoie des informations au format JSON au sujet de la solution, y compris l’ID de ressource de l’espace de travail :
"addonProfiles": { "omsagent": { "config": { "logAnalyticsWorkspaceResourceID": "/subscriptions/<WorkspaceSubscription>/resourceGroups/<DefaultWorkspaceRG>/providers/Microsoft.OperationalInsights/workspaces/<defaultWorkspaceName>" }, "enabled": true } }Dans le Portail Azure, recherchez l’ID de ressource de l’espace de travail, puis sélectionnez Journaux.
Copiez l’une des requêtes suivantes et collez-la dans la fenêtre de requête.
Utilisez la requête suivante si votre cluster utilise le schéma ContainerLogV2. Si vous utilisez toujours
ContainerLog, vous devez effectuer une mise à niveau vers ContainerlogV2.ContainerLogV2 | where PodName startswith "eraser-aks-" and PodNamespace == "kube-system" | project TimeGenerated, PodName, LogMessage, LogSourceSi vous souhaitez continuer à utiliser
ContainerLog, utilisez plutôt la requête suivante :let startTimestamp = ago(1h); KubePodInventory | where TimeGenerated > startTimestamp | project ContainerID, PodName=Name, Namespace | where PodName startswith "eraser-aks-" and Namespace == "kube-system" | distinct ContainerID, PodName | join ( ContainerLog | where TimeGenerated > startTimestamp ) on ContainerID // at this point before the next pipe, columns from both tables are available to be "projected". Due to both // tables having a "Name" column, we assign an alias as PodName to one column which we actually want | project TimeGenerated, PodName, LogEntry, LogEntrySource | summarize by TimeGenerated, LogEntry | order by TimeGenerated desc
Sélectionnez Exécuter. Tous les journaux d'activité d’image supprimés s’affichent dans la zone Résultats.