Image Cleaner gebruiken om kwetsbare verouderde installatiekopieën op te schonen in uw AKS-cluster (Azure Kubernetes Service)
Het is gebruikelijk om pijplijnen te gebruiken voor het bouwen en implementeren van installatiekopieën in AKS-clusters (Azure Kubernetes Service). Hoewel dit proces ideaal is voor het maken van afbeeldingen, is dit proces vaak niet verantwoordelijk voor de verouderde installatiekopieën die achterblijven en kan dit leiden tot afbeeldingsbloat op clusterknooppunten. Deze installatiekopieën kunnen beveiligingsproblemen bevatten, waardoor beveiligingsproblemen kunnen ontstaan. Als u beveiligingsrisico's in uw clusters wilt verwijderen, kunt u deze niet-deductieafbeeldingen opschonen. Het handmatig opschonen van afbeeldingen kan tijdrovend zijn. Image Cleaner voert automatische installatiekopieënidentificatie en verwijdering uit, waardoor het risico op verouderde installatiekopieën wordt beperkt en de tijd wordt beperkt die nodig is om ze op te schonen.
Notitie
Image Cleaner is een functie op basis van Gum.
In een AKS-cluster zijn Image Cleaner
de naam en eigenschapsnaam van de functie, terwijl de relevante pods van Image Cleaner de namen bevatten Eraser
.
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 --version
om 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 controllerbeheerpod geïmplementeerd eraser-controller-manager
in uw cluster.
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
de implementatie is uitgevoerd, worden de volgende stappen automatisch uitgevoerd:
- Het opschoonproces wordt onmiddellijk gestart en werkpods
eraser-aks-xxxxx
voor elk knooppunt gemaakt. - 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, waarmee ongebruikte installatiekopieën met beveiligingsproblemen worden verwijderd.
- Nadat het opschoningsproces is voltooid, wordt de werkrolpod verwijderd en vindt de volgende geplande opschoonbewerking plaats volgens de
--image-cleaner-interval-hours
door 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 create
opdracht met de--enable-image-cleaner
parameter.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 update
opdracht.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-hours
parameter.# 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 apply
opdracht. In dit voorbeeld wordt dedocker.io/library/alpine:3.7.3
afbeelding 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 imagelist
maken.
Een bestaande ImageList verwijderen en een nieuwe maken
Verwijder het oude
imagelist
met behulp van dekubectl delete
opdracht.kubectl delete ImageList imagelist
Maak een nieuwe
imagelist
met 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
imagelist
met behulp van dekubectl edit
opdracht.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 pod binnen 10 minuten na voltooiing van het eraser-aks-xxxxx
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 get
opdracht.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"]} EOF
Maak een
configmap
met behulp van het JSON-voorbeeldbestand met behulp van de volgendekubectl create
enkubectl label
opdracht.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 update
opdracht met de--disable-image-cleaner
parameter.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
enCRITICAL
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
werkrolpod. 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 zelfs eraser-aks-xxxxx
verwijderen.
Zorg ervoor dat Azure Monitoring is ingeschakeld op uw cluster. Zie Container Insights inschakelen op AKS-clusters voor gedetailleerde stappen.
Haal de Log Analytics-resource-id op met behulp van de
az aks show
opdracht.az aks show --resource-group myResourceGroup --name myManagedCluster
Na 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 de volgende query naar de tabel en vervang deze
name
eraser-aks-xxxxx
door (naam werkpod):let startTimestamp = ago(1h); KubePodInventory | where TimeGenerated > startTimestamp | project ContainerID, PodName=Name, Namespace | where PodName contains "name" and Namespace startswith "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 .
Azure Kubernetes Service