Bereinigen risikobehafteter, veralteter Images in Ihrem AKS-Cluster (Azure Kubernetes Service) mithilfe von Image Cleaner

Gilt für: ✔️ AKS Automatic ✔️ AKS Standard

Für die Erstellung und Bereitstellung von Images in AKS-Clustern (Azure Kubernetes Service) werden häufig Pipelines verwendet. Dieser Prozess eignet sich zwar sehr gut für die Imageerstellung, vernachlässigt aber die zurückbleibenden veralteten Images und kann zu einer Überfrachtung von Images auf Clusterknoten führen. Diese Images könnten Sicherheitsrisiken enthalten, die zu Sicherheitsproblemen führen könnten. Um Sicherheitsrisiken in Ihren Clustern zu beseitigen, können Sie diese nicht referenzierten Images bereinigen. Das manuelle Bereinigen von Images kann zeitintensiv sein. Image Cleaner führt die automatische Imageerkennung und -entfernung durch, sodass das Risiko veralteter Images verringert und die Zeit für das Bereinigen reduziert wird.

AKS Automatic ist die empfohlene, produktionsreife Standardeinstellung für die meisten AKS-Workloads. Image Cleaner ist auf AKS Automatic-Clustern standardmäßig vorkonfiguriert, um nicht verwendete Images mit Sicherheitsrisiken zu entfernen.

Auf AKS Standard-Clustern ist Image Cleaner optional, und Sie aktivieren es explizit.

Weitere Informationen zu AKS Automatic finden Sie unter Was ist Azure Kubernetes Service (AKS) Automatisch?

Hinweis

Image Cleaner ist ein Feature, das auf Eraser basiert. Bei AKS lauten der Funktionsname und der Eigenschaftsname Image Cleaner, während die Namen der entsprechenden Image-Cleaner-Pods Eraser enthalten.

Verhalten von AKS Automatic und AKS Standard

Voraussetzungen

  • Ein Azure-Abonnement. Falls Sie über kein Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen.
  • Für die AKS Standard-Konfiguration über Azure CLI ist Azure CLI, Version 2.49.0 oder höher, erforderlich. Führen Sie az --version aus, um Ihre Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.

Begrenzungen

Image Cleaner unterstützt noch keine Windows-Knotenpools oder virtuelle AKS-Knoten.

So funktioniert Image Cleaner

Wenn Sie Image Cleaner auf Ihrem Cluster aktivieren, wird ein Controller-Manager-Pod mit dem Namen eraser-controller-manager bereitgestellt.

Screenshot eines Diagramms, das den Workflow von Image Cleaner zeigt. Die im Cluster ausgeführten Image Cleaner-Pods können eine Imageliste generieren. Alternativ kann eine manuelle Eingabe bereitgestellt werden.

Image Cleaner unterstützt automatische und manuelle Bereinigungsmodi.

Konfigurationsoptionen für AKS Standard

Verwenden Sie diese Optionen beim Konfigurieren von Image Cleaner auf AKS Standard mit Azure CLI.

Name BESCHREIBUNG Erforderlich
--enable-image-cleaner Aktivieren von Image Cleaner für einen AKS-Cluster Ja, es sei denn, Sie geben an:
--disable-image-cleaner Deaktivieren des Bildreinigers für einen AKS-Cluster Ja, es sei denn, Sie geben „enable“ an.
--image-cleaner-interval-hours Intervall in Stunden für zeitgesteuerte Ausführungen deaktivieren. Azure CLI Standard ist eine Woche. Der Mindestwert beträgt 24 Stunden. Maximal drei Monate. Nicht erforderlich für Azure CLI; erforderlich für ARM-Vorlage oder andere Clients

Hinweis

Wenn Sie Image Cleaner deaktivieren und später erneut aktivieren, ohne die Konfiguration explizit zu übergeben, wird der vorherige Konfigurationswert wiederverwendet.

Automatischer Modus

Wenn Sie eraser-controller-manager bereitstellen, führt Image Cleaner automatisch die folgenden Aktionen aus:

  • Startet die Bereinigung und erstellt eraser-aks-xxxxx Worker-Pods für jeden Knoten.
  • Verwendet einen Sammelcontainer zum Sammeln nicht verwendeter Images.
  • Verwendet einen Trivy-Scannercontainer , um Sicherheitsrisiken mit Trivy zu scannen.
  • Verwendet einen Remover-Container , um nicht verwendete Images mit Sicherheitsrisiken zu entfernen.
  • Löscht den Worker-Pod nach Abschluss.
  • Plant die nächste Bereinigung gemäß --image-cleaner-interval-hours.

Manueller Modus

Sie können die Bereinigung auch manuell auslösen, indem Sie ein CRD-Objekt (ImageList) definieren. Dadurch wird eraser-contoller-manager ausgelöst, um eraser-aks-xxxxx-Workerpods für jeden Knoten zu erstellen und den manuellen Entfernungsprozess abzuschließen.

Hinweis

Nach dem Deaktivieren von Image Cleaner ist die alte Konfiguration weiterhin vorhanden. Bei der erneuten Aktivierung des Features ohne explizites Übergeben einer Konfiguration wird somit der vorhandene Wert anstelle des Standardwerts verwendet.

Verwenden von Image Cleaner auf AKS Automatic und AKS Standard

AKS Automatik

Image Cleaner ist auf AKS Automatic Clusters vorkonfiguriert, die für die meisten AKS-Workloads die empfohlene produktionsbereite Standardeinstellung sind. Sie müssen keinen separaten Aktivierungsbefehl ausführen.

Informationen zum Erstellen eines automatischen AKS-Clusters finden Sie unter Erstellen eines automatischen AKS-Clusters.

Verwenden Sie die Anleitungen zur manuellen Bereinigung und Überwachung in diesem Artikel, wenn Sie eine gezielte Korrektur oder betriebstechnische Überprüfung wünschen.

AKS Standard: in einem neuen Cluster aktivieren

Aktivieren Sie Image Cleaner auf einem neuen AKS Standard-Cluster mithilfe des az aks create Befehls mit dem --enable-image-cleaner Parameter.

az aks create \
    --resource-group myResourceGroup \
    --name myManagedCluster \
    --enable-image-cleaner \
    --generate-ssh-keys

AKS Standard: Aktivieren eines vorhandenen Clusters

Aktivieren Sie Image Cleaner auf einem vorhandenen AKS Standard-Cluster mithilfe des az aks update Befehls.

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

AKS Standard: Updateintervall für einen neuen oder vorhandenen Cluster

Aktualisieren Sie das Image Cleaner-Intervall für einen neuen oder vorhandenen AKS Standardcluster mithilfe des --image-cleaner-interval-hours Parameters.

# 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

Manuelles Entfernen von Images mithilfe von Image Cleaner

Wichtig

name muss auf imagelist festgelegt werden.

Entfernen Sie ein Abbild manuell mithilfe des folgenden kubectl apply-Befehls. In diesem Beispiel wird das Image docker.io/library/alpine:3.7.3 entfernt, wenn es nicht verwendet wird.

cat <<EOF | kubectl apply -f -
apiVersion: eraser.sh/v1
kind: ImageList
metadata:
  name: imagelist
spec:
  images:
    - docker.io/library/alpine:3.7.3
EOF

Die manuelle Bereinigung ist ein einmaliger Vorgang und wird nur ausgelöst, wenn eine neue imagelist erstellt wird oder an der vorhandenen imagelist Änderungen vorgenommen werden. Nach dem Löschen des Images wird imagelist nicht automatisch gelöscht.

Wenn Sie eine weitere manuelle Bereinigung auslösen möchten, müssen Sie ein neues imagelist erstellen oder ein vorhandenes imagelist ändern. Wenn Sie dasselbe Bild noch einmal entfernen möchten, müssen Sie ein neues imagelist erstellen.

Löschen Sie eine vorhandene ImageList, und erstellen Sie eine neue.

  1. Löschen Sie das alte imagelist mit dem Befehl kubectl delete.

    kubectl delete ImageList imagelist
    
  2. Erstellen Sie ein neues imagelist mit demselben Image-Namen. Im folgenden Beispiel wird das gleiche Image wie im vorherigen Beispiel verwendet:

    cat <<EOF | kubectl apply -f -
    apiVersion: eraser.sh/v1
    kind: ImageList
    metadata:
      name: imagelist
    spec:
      images:
        - docker.io/library/alpine:3.7.3
    EOF
    

Vorhandene Bildliste ändern

Ändern Sie die vorhandene imagelist mit dem Befehl kubectl 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

Bei Verwendung des manuellen Modus wird der eraser-aks-xxxxx-Pod innerhalb von 10 Minuten nach Abschluss des Vorgangs gelöscht.

Liste ausgeschlossener Bilder

Images, die in der Ausschlussliste angegeben sind, werden nicht aus dem Cluster entfernt. Image Cleaner unterstützt systemseitige und benutzerdefinierte Ausschlusslisten. Das Bearbeiten der Systemausschlussliste wird nicht unterstützt.

Überprüfen der Systemausschlussliste

Überprüfen Sie die Systemausschlussliste mit dem folgenden kubectl get-Befehl.

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

Erstellen einer benutzerdefinierten Ausschlussliste

  1. Erstellen Sie eine JSON-Beispieldatei, die ausgeschlossene Images enthält.

    cat > sample.json <<EOF
    {"excluded": ["excluded-image-name"]}
    EOF
    
  2. Erstellen Sie mithilfe der JSON-Beispieldatei ein configmap mit dem folgenden kubectl create- und kubectl label-Befehl.

    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 auf AKS Standard deaktivieren

Deaktivieren Sie "Image Cleaner" auf einem AKS Standard-Cluster mithilfe des az aks update Befehls mit dem --disable-image-cleaner Parameter.

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

Häufig gestellte Fragen (FAQs)

Ist "Image Cleaner" standardmäßig auf AKS Automatic aktiviert?

Ja. Image Cleaner ist auf AKS Automatic Clusters vorkonfiguriert.

Muss ich für Image Cleaner in AKS Automatic Befehle zum Aktivieren ausführen?

Nein. Verwenden Sie die Aktivierungsbefehle für AKS Standard.

Wie kann ich überprüfen, welche Version Image Cleaner verwendet?

kubectl describe configmap -n kube-system eraser-manager-config | grep tag -C 3

Unterstützt Image Cleaner neben dem Trivy-Scanner noch weitere Tools zum Überprüfen auf Sicherheitsrisiken?

Nein.

Kann ich Sicherheitsrisikostufen angeben, nach denen Images bereinigt werden?

Nein. Zu den Standardeinstellungen für Sicherheitsrisikostufen gehören folgende:

  • LOW,
  • MEDIUM,
  • HIGH, und
  • CRITICAL

Sie können die Standardeinstellungen nicht anpassen.

Wie überprüfe ich, ob Images von Image Cleaner bereinigt wurden?

Image-Logs werden im eraser-aks-xxxxx-Worker-Pod gespeichert. Wenn eraser-aks-xxxxx aktiv ist, können Sie die folgenden Befehle ausführen, um Löschprotokolle anzuzeigen:

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

Der eraser-aks-xxxxx-Pod wird innerhalb von 10 Minuten nach Abschluss der Arbeit gelöscht. Sie können die folgenden Schritte ausführen, um das Azure Monitor-Add-On zu aktivieren und die Podprotokolltabelle von Container Insights zu verwenden. Danach werden Verlaufsprotokolle gespeichert, und Sie können sie auch überprüfen, wenn eraser-aks-xxxxx gelöscht wird.

  1. Stellen Sie sicher, dass Azure Monitor auf Ihrem Cluster aktiviert ist. Eine ausführliche Anleitung finden Sie unter Aktivieren von Container Insights auf AKS-Clustern.

  2. Standardmäßig werden Protokolle für die im Namespace kube-system ausgeführten Container nicht erfasst. Entfernen Sie den kube-system Namespace aus exclude_namespaces in der Konfigurationszuordnung, und wenden Sie die Konfigurationszuordnung an, um die Sammlung dieser Protokolle zu aktivieren. Weitere Informationen finden Sie unter Konfigurieren der Datensammlung in Container Insights.

  3. Rufen Sie die Log Analytics-Ressourcen-ID mit dem Befehl az aks show ab.

      az aks show --resource-group myResourceGroup --name myManagedCluster
    

    Nach wenigen Minuten gibt der Befehl Informationen zur Lösung im JSON-Format, einschließlich der Ressourcen-ID des Arbeitsbereichs, zurück:

    "addonProfiles": {
      "omsagent": {
        "config": {
          "logAnalyticsWorkspaceResourceID": "/subscriptions/<WorkspaceSubscription>/resourceGroups/<DefaultWorkspaceRG>/providers/Microsoft.OperationalInsights/workspaces/<defaultWorkspaceName>"
        },
        "enabled": true
      }
    }
    
  4. Suchen Sie im Azure-Portal nach der Arbeitsbereichsressourcen-ID, und wählen Sie dann "Protokolle" aus.

  5. Kopieren Sie eine der folgenden Abfragen, und fügen Sie sie in das Abfragefenster ein.

    • Verwenden Sie die folgende Abfrage, wenn Ihr Cluster das ContainerLogV2-Schema verwendet. Wenn Sie weiterhin verwenden ContainerLog, führen Sie ein Upgrade auf ContainerLogV2 durch.

      ContainerLogV2
      | where PodName startswith "eraser-aks-" and PodNamespace == "kube-system"
      | project TimeGenerated, PodName, LogMessage, LogSource
      
    • Wenn Sie die Verwendung ContainerLogfortsetzen möchten, verwenden Sie stattdessen die folgende Abfrage:

      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. Klicken Sie auf Ausführen. Alle Protokolle zu gelöschten Images werden im Bereich Ergebnisse angezeigt.