Image Cleaner gebruiken om kwetsbare verouderde installatiekopieën op te schonen in uw AKS-cluster (Azure Kubernetes Service)

Van toepassing op: ✔️ AKS Automatic ✔️ AKS Standard

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.

AKS Automatic is de aanbevolen standaardinstelling die gereed is voor productie voor de meeste AKS-workloads. Image Cleaner is standaard geconfigureerd op AKS Automatic-clusters om ongebruikte containerimages met beveiligingsproblemen te verwijderen.

Op AKS Standard-clusters is Image Cleaner optioneel en moet u deze expliciet inschakelen.

Zie Wat is Azure Kubernetes Service (AKS) Automatic? voor meer informatie over AKS Automatic.

Notitie

"Image Cleaner" is een functie, gebaseerd op "Eraser". In AKS zijn Image Cleaner de functienaam en de eigenschapsnaam, terwijl de namen van de relevante Image Cleaner-pods Eraser bevatten.

Gedrag van AKS Automatic en AKS Standard

Vereisten

  • Een Azure-abonnement. Als u geen Azure-abonnement hebt, kunt u een gratis account maken.
  • Voor AKS Standard-configuratie via Azure CLI 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

Wanneer u Image Cleaner op uw cluster activeert, wordt er een controllerbeheerpod met de naam eraser-controller-managergeïmplementeerd.

Schermopname van een diagram met de werkstroom van ImageCleaner. De ImageCleaner-pods die op het cluster worden uitgevoerd, kunnen een ImageList genereren of handmatige invoer worden opgegeven.

Image Cleaner ondersteunt automatische en handmatige opschoningsmodi.

Configuratieopties voor AKS Standard

Gebruik deze opties bij het configureren van Image Cleaner op AKS Standard met Azure CLI.

Name Beschrijving Vereist
--enable-image-cleaner Image Cleaner inschakelen voor een AKS-cluster Ja, tenzij u 'disable' opgeeft.
--disable-image-cleaner Image Cleaner uitschakelen voor een AKS-cluster Ja, tenzij u 'enable' opgeeft
--image-cleaner-interval-hours Interval in uren tussen geplande uitvoeringen. Azure CLI standaard is één week. Het minimum is 24 uur. Maximum is drie maanden. Niet vereist voor Azure CLI; vereist voor ARM-sjabloon of andere clients

Notitie

Als u Image Cleaner uitschakelt en deze later opnieuw kunt in- en uitschakelen zonder de configuratie expliciet door te geven, wordt de vorige configuratiewaarde opnieuw gebruikt.

Automatische modus

Wanneer u implementeert eraser-controller-manager, voert Image Cleaner automatisch deze acties uit:

  • Start de opschoning en maakt voor elk knooppunt eraser-aks-xxxxx workerpods.
  • Gebruikt een collector-container om ongebruikte images te verzamelen.
  • Maakt gebruik van een trivy-scannercontainer om beveiligingsproblemen met trivy te scannen.
  • Maakt gebruik van een verwijdercontainer om ongebruikte images die kwetsbaarheden bevatten te verwijderen.
  • Verwijdert de workerpod na voltooiing.
  • Plant de volgende opschoonactie volgens --image-cleaner-interval-hours.

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 gebruiken op AKS Automatic en AKS Standard

AKS Automatisch

Image Cleaner is vooraf geconfigureerd op automatische AKS-clusters. Dit is de aanbevolen standaardinstelling die gereed is voor productie voor de meeste AKS-workloads. U hoeft geen aparte inschakelopdracht uit te voeren.

Zie Een automatisch AKS-cluster maken.

Gebruik de richtlijnen voor handmatig opschonen en bewaken in dit artikel wanneer u gerichte herstel- of operationele verificatie wilt.

AKS Standard: inschakelen op een nieuw cluster

Schakel Image Cleaner in op een nieuw AKS Standard-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

AKS Standard: inschakelen op een bestaand cluster

Schakel Image Cleaner in op een bestaand AKS Standard-cluster met behulp van de az aks update opdracht.

az aks update \
  --resource-group myResourceGroup \
  --name myManagedCluster \
  --enable-image-cleaner

AKS Standard: update-interval op een nieuw of bestaand cluster

Werk het Image Cleaner-interval bij op een nieuw of bestaand AKS Standard-cluster met de parameter --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

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 de docker.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 imagelistmaken.

Een bestaande ImageList verwijderen en een nieuwe maken

  1. Verwijder het oude imagelist met behulp van de kubectl delete opdracht.

    kubectl delete ImageList imagelist
    
  2. 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 de kubectl 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 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 get opdracht.

kubectl get -n kube-system configmap eraser-system-exclusion -o yaml

Een door de gebruiker gedefinieerde uitsluitingslijst maken

  1. Maak een JSON-voorbeeldbestand dat uitgesloten afbeeldingen bevat.

    cat > sample.json <<EOF
    {"excluded": ["excluded-image-name"]}
    EOF
    
  2. Maak een configmap met behulp van het JSON-voorbeeldbestand met behulp van de volgende kubectl create en kubectl 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
    

Image Cleaner uitschakelen op AKS Standard

Schakel Image Cleaner uit op een AKS Standard-cluster 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 (FAQ's)

Is Image Cleaner standaard ingeschakeld op AKS Automatic?

Ja. Image Cleaner is vooraf geconfigureerd op AKS Automatic-clusters.

Moet ik opdrachten voor het inschakelen van de Image Cleaner uitvoeren op AKS Automatic?

Nee Gebruik de inschakelopdrachten voor AKS Standard.

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.

  1. Zorg ervoor dat Azure Monitor is ingeschakeld op uw cluster. Zie Container Insights inschakelen op AKS-clusters voor gedetailleerde stappen.

  2. Logboeken voor de containers die in de kube-system naamruimte worden uitgevoerd, worden standaard niet verzameld. Verwijder de kube-system naamruimte uit exclude_namespaces de configuratietoewijzing en pas de configuratietoewijzing toe om het verzamelen van deze logboeken in te schakelen. Zie Container Insights-gegevensverzameling configureren voor meer informatie.

  3. 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
      }
    }
    
  4. Zoek in de Azure-portal naar de resource-id van de werkruimte en selecteer vervolgens Logboeken.

  5. 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, voert u een upgrade uit naar ContainerLogV2.

      ContainerLogV2
      | where PodName startswith "eraser-aks-" and PodNamespace == "kube-system"
      | project TimeGenerated, PodName, LogMessage, LogSource
      
    • Als u wilt doorgaan met het gebruik 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
       ```
      
      
  6. Selecteer Uitvoeren. Verwijderde afbeeldingslogboeken worden weergegeven in het gebied Resultaten .