Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het is gebruikelijk om pijplijnen te gebruiken voor het bouwen en implementeren van afbeeldingen in AKS-clusters (Azure Kubernetes Service). Hoewel dit proces zeer geschikt is voor het maken van afbeeldingen, houdt het vaak geen rekening met de verouderde afbeeldingen die achterblijven, wat kan leiden tot een overvloed aan afbeeldingen op knooppunten in clusters. Deze beelden kunnen kwetsbaarheden bevatten, wat beveiligingsproblemen kan veroorzaken. Om beveiligingsrisico's in uw clusters te verwijderen, kunt u deze niet-gereferentieerde afbeeldingen opschonen. Het handmatig opschonen van afbeeldingen kan tijdrovend zijn. Image Cleaner voert automatische identificatie en verwijdering van afbeeldingen uit, waardoor het risico op verouderde afbeeldingen wordt beperkt en de tijd die nodig is om deze op te schonen, wordt verkort.
Notitie
"Image Cleaner" is een functie, gebaseerd op "Eraser".
In een AKS-cluster zijn de functienaam en eigenschapsnaam Image Cleaner, terwijl de namen van de relevante Image Cleaner-pods Eraser bevatten.
Vereisten
- Een Azure-abonnement. Als u geen Azure-abonnement hebt, kunt u een gratis account maken.
- Azure CLI versie 2.49.0 of hoger. Voer de opdracht uit
az --versionom uw versie te vinden. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.
Beperkingen
Image Cleaner biedt nog geen ondersteuning voor Windows-knooppuntgroepen of virtuele AKS-knooppunten.
Hoe Image Cleaner werkt
Nadat u Image Cleaner hebt ingeschakeld, wordt er een controller manager pod genaamd eraser-controller-manager in uw cluster geïmplementeerd.
Met Image Cleaner kunt u kiezen tussen handmatige en automatische modus en de volgende configuratieopties:
Configuratieopties
| Name | Beschrijving | Vereist |
|---|---|---|
--enable-image-cleaner |
De functie Image Cleaner inschakelen voor een AKS-cluster | Ja, tenzij uitschakelen is opgegeven |
--disable-image-cleaner |
De functie Image Cleaner uitschakelen voor een AKS-cluster | Ja, tenzij inschakelen is opgegeven |
--image-cleaner-interval-hours |
Deze parameter bepaalt de intervaltijd (in uren) die Image Cleaner gebruikt om uit te voeren. De standaardwaarde voor Azure CLI is één week, de minimumwaarde is 24 uur en het maximum is drie maanden. | Niet vereist voor Azure CLI, vereist voor ARM-sjabloon of andere clients |
Automatische modus
Zodra eraser-controller-manager is geïmplementeerd, zullen de volgende stappen automatisch uitgevoerd worden:
- Het opschoonproces wordt onmiddellijk gestart en er worden werkerspods aangemaakt voor elk knooppunt.
- Er zijn drie containers in elke werkpod.
- Een collector, waarmee ongebruikte afbeeldingen worden verzameld.
- Een trivy-scanner, die gebruikmaakt van trivy om beveiligingsproblemen met afbeeldingen te scannen.
- Een remover, die ongebruikte afbeeldingen met kwetsbaarheden verwijdert.
- Nadat het opschoningsproces is voltooid, wordt de werkrolpod verwijderd en vindt de volgende geplande opschoonbewerking plaats volgens de
--image-cleaner-interval-hoursdoor u gedefinieerde opschoonbewerking.
Handmatige modus
U kunt het opschonen handmatig activeren door een CRD-objectImageList te definiëren. Hiermee wordt het eraser-contoller-manager maken van eraser-aks-xxxxx werkrolpods voor elk knooppunt geactiveerd en wordt het handmatige verwijderingsproces voltooid.
Notitie
Na het uitschakelen van Image Cleaner bestaat de oude configuratie nog steeds. Dit betekent dat als u de functie opnieuw inschakelt zonder de configuratie expliciet door te geven, de bestaande waarde wordt gebruikt in plaats van de standaardwaarde.
Image Cleaner inschakelen op uw AKS-cluster
Image Cleaner inschakelen op een nieuw cluster
Schakel Image Cleaner in op een nieuw AKS-cluster met behulp van de
az aks createopdracht met de--enable-image-cleanerparameter.az aks create \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner \ --generate-ssh-keys
Image Cleaner inschakelen op een bestaand cluster
Schakel Image Cleaner in op een bestaand AKS-cluster met behulp van de
az aks updateopdracht.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner
Het interval voor het opschonen van afbeeldingen bijwerken op een nieuw of bestaand cluster
Werk het Interval van Image Cleaner bij op een nieuw of bestaand AKS-cluster met behulp van de
--image-cleaner-interval-hoursparameter.# 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
Afbeeldingen handmatig verwijderen met Image Cleaner
Belangrijk
De name moet worden ingesteld op imagelist.
Verwijder handmatig een afbeelding met behulp van de volgende
kubectl applyopdracht. In dit voorbeeld wordt dedocker.io/library/alpine:3.7.3afbeelding verwijderd als deze niet wordt gebruikt.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
Het handmatig opschonen is een eenmalige bewerking en wordt alleen geactiveerd wanneer er een nieuwe imagelist wordt gemaakt of wijzigingen worden aangebracht in de bestaande imagelist. Nadat de afbeelding is verwijderd, wordt deze imagelist niet automatisch verwijderd.
Als u een andere handmatige opschoning moet activeren, moet u een nieuwe imagelist maken of wijzigingen aanbrengen in een bestaande. Als u dezelfde installatiekopieën opnieuw wilt verwijderen, moet u een nieuwe imagelistmaken.
Een bestaande ImageList verwijderen en een nieuwe maken
Verwijder het oude
imagelistmet behulp van dekubectl deleteopdracht.kubectl delete ImageList imagelistMaak een nieuwe
imagelistmet dezelfde installatiekopieënnaam. In het volgende voorbeeld wordt dezelfde afbeelding gebruikt als in het vorige voorbeeld.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
Een bestaande ImageList wijzigen
Wijzig de bestaande
imagelistmet behulp van dekubectl editopdracht.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
Wanneer u de handmatige modus gebruikt, wordt de eraser-aks-xxxxx pod binnen 10 minuten na voltooiing van het werk verwijderd.
Uitsluitingslijst voor afbeeldingen
Afbeeldingen die zijn opgegeven in de uitsluitingslijst, worden niet verwijderd uit het cluster. Image Cleaner ondersteunt door het systeem en door de gebruiker gedefinieerde uitsluitingslijsten. Het wordt niet ondersteund om de lijst met systeemuitsluitingen te bewerken.
Controleer de lijst met systeemuitsluitingen
Controleer de lijst met systeemuitsluitingen met behulp van de volgende
kubectl getopdracht.kubectl get -n kube-system configmap eraser-system-exclusion -o yaml
Een door de gebruiker gedefinieerde uitsluitingslijst maken
Maak een JSON-voorbeeldbestand dat uitgesloten afbeeldingen bevat.
cat > sample.json <<EOF {"excluded": ["excluded-image-name"]} EOFMaak een
configmapmet behulp van het JSON-voorbeeldbestand met behulp van de volgendekubectl createenkubectl labelopdracht.kubectl create configmap excluded --from-file=sample.json --namespace=kube-system kubectl label configmap excluded eraser.sh/exclude.list=true -n kube-system
Afbeeldingsreiniger uitschakelen
Schakel Image Cleaner in uw cluster uit met behulp van de
az aks updateopdracht met de--disable-image-cleanerparameter.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --disable-image-cleaner
Veelgestelde vragen
Hoe kan ik controleren welke versie Image Cleaner gebruikt?
kubectl describe configmap -n kube-system eraser-manager-config | grep tag -C 3
Ondersteunt Image Cleaner andere scanners voor beveiligingsproblemen naast trivy-scanner?
Nee
Kan ik beveiligingsniveaus opgeven voor het opschonen van afbeeldingen?
Nee De standaardinstellingen voor beveiligingsniveaus zijn onder andere:
-
LOW, -
MEDIUM, -
HIGH, en CRITICAL
U kunt de standaardinstellingen niet aanpassen.
Hoe kunt u afbeeldingen controleren die zijn opgeschoond door Image Cleaner?
Afbeeldingslogboeken worden opgeslagen in de eraser-aks-xxxxx worker pod. Wanneer eraser-aks-xxxxx deze actief is, kunt u de volgende opdrachten uitvoeren om verwijderingslogboeken weer te geven:
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
De eraser-aks-xxxxx pod wordt binnen 10 minuten na voltooiing van het werk verwijderd. U kunt deze stappen volgen om de Azure Monitor-invoegtoepassing in te schakelen en de Container Insights-podlogboektabel te gebruiken. Daarna worden historische logboeken opgeslagen en kunt u ze bekijken, zelfs als eraser-aks-xxxxx is verwijderd.
Zorg ervoor dat Azure Monitoring is ingeschakeld op uw cluster. Zie Container Insights inschakelen op AKS-clusters voor gedetailleerde stappen.
Logboeken voor de containers die in
kube-systemde naamruimte worden uitgevoerd, worden niet standaard verzameld. Verwijder dekube-systemnaamruimte uitexclude_namespacesin de configmap en pas de configmap toe om het verzamelen van deze logboeken in te schakelen. Zie Container Insights-gegevensverzameling configureren voor meer informatie.Haal de Log Analytics-resource-id op met behulp van de
az aks showopdracht.az aks show --resource-group myResourceGroup --name myManagedClusterNa enkele minuten retourneert de opdracht JSON-opgemaakte informatie over de oplossing, inclusief de resource-id van de werkruimte:
"addonProfiles": { "omsagent": { "config": { "logAnalyticsWorkspaceResourceID": "/subscriptions/<WorkspaceSubscription>/resourceGroups/<DefaultWorkspaceRG>/providers/Microsoft.OperationalInsights/workspaces/<defaultWorkspaceName>" }, "enabled": true } }Zoek in Azure Portal naar de resource-id van de werkruimte en selecteer vervolgens Logboeken.
Kopieer een van de volgende query's en plak deze in het queryvenster.
Gebruik de volgende query als uw cluster gebruikmaakt van het ContainerLogV2-schema. Als u nog steeds gebruikt
ContainerLog, moet u een upgrade uitvoeren naar ContainerlogV2.ContainerLogV2 | where PodName startswith "eraser-aks-" and PodNamespace == "kube-system" | project TimeGenerated, PodName, LogMessage, LogSourceAls u wilt blijven gebruiken
ContainerLog, gebruikt u in plaats daarvan de volgende query: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
Selecteer Uitvoeren. Verwijderde afbeeldingslogboeken worden weergegeven in het gebied Resultaten .