Delen via


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 Cleanerde 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.

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.

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 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 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

  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
    

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 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 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.

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

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

  4. 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
    
  5. Selecteer Uitvoeren. Verwijderde afbeeldingslogboeken worden weergegeven in het gebied Resultaten .