Udostępnij za pośrednictwem


Czyszczenie nieaktywnych obrazów w klastrze usługi Azure Kubernetes Service (AKS) przy użyciu narzędzia Image Cleaner

Potoki są często używane do kompilowania i wdrażania obrazów w klastrach usługi Azure Kubernetes Service (AKS). Podczas tworzenia obrazów ten proces często nie uwzględnia nieaktualnych obrazów pozostawionych w tyle i może prowadzić do wzdęć obrazu w węzłach klastra. Te obrazy mogą zawierać luki w zabezpieczeniach, które mogą powodować problemy z zabezpieczeniami. Aby usunąć zagrożenia bezpieczeństwa w klastrach, możesz wyczyścić te nieużywane obrazy. Ręczne czyszczenie obrazów może być czasochłonne. Narzędzie Image Cleaner wykonuje automatyczną identyfikację i usuwanie obrazów, co zmniejsza ryzyko nieaktualnych obrazów i skraca czas potrzebny do ich wyczyszczenia.

Uwaga

Image Cleaner to funkcja oparta na gumce. W klastrze usługi AKS nazwa funkcji i nazwa właściwości to Image Cleaner, a odpowiednie nazwy zasobników narzędzia Image Cleaner zawierają Eraserwartość .

Wymagania wstępne

Ograniczenia

Narzędzie Image Cleaner nie obsługuje jeszcze pul węzłów systemu Windows ani węzłów wirtualnych usługi AKS.

Jak działa narzędzie Image Cleaner

Po włączeniu narzędzia Image Cleaner będzie dostępny zasobnik menedżera kontrolerów o nazwie eraser-controller-manager wdrożony w klastrze.

Zrzut ekranu przedstawiający diagram przedstawiający przepływ pracy usługi ImageCleaner. Zasobniki ImageCleaner uruchomione w klastrze mogą generować element ImageList lub można podać ręczne dane wejściowe.

Za pomocą narzędzia Image Cleaner można wybrać tryb ręczny i automatyczny oraz następujące opcje konfiguracji:

Opcje konfiguracji

Nazwa/nazwisko opis Wymagania
--enable-image-cleaner Włączanie funkcji Czyszczenia obrazów dla klastra usługi AKS Tak, chyba że określono wyłączenie
--disable-image-cleaner Wyłączanie funkcji narzędzia Image Cleaner dla klastra usługi AKS Tak, chyba że zostanie określona opcja Włącz
--image-cleaner-interval-hours Ten parametr określa czas interwału (w godzinach) narzędzia Image Cleaner używane do uruchomienia. Wartość domyślna interfejsu wiersza polecenia platformy Azure to tydzień, wartość minimalna to 24 godziny, a wartość maksymalna to trzy miesiące. Interfejs wiersza polecenia platformy Azure nie jest wymagany w przypadku szablonu usługi ARM lub innych klientów

Tryb automatyczny

Po eraser-controller-manager wdrożeniu zostaną wykonane następujące czynności automatycznie:

  • Natychmiast rozpoczyna proces oczyszczania i tworzy eraser-aks-xxxxx zasobniki procesu roboczego dla każdego węzła.
  • W każdym zasobniku procesu roboczego znajdują się trzy kontenery:
    • Moduł zbierający, który zbiera nieużywane obrazy.
    • Trywialny skaner, który wykorzystuje proste skanowanie luk w zabezpieczeniach obrazów.
    • Usuwanie, które usuwa nieużywane obrazy z lukami w zabezpieczeniach.
  • Po zakończeniu procesu oczyszczania zasobnik procesu roboczego zostanie usunięty, a następne zaplanowane czyszczenie odbywa się zgodnie z definicją --image-cleaner-interval-hours .

Tryb ręczny

Czyszczenie można wyzwolić ręcznie, definiując obiektImageList CRD. Spowoduje to wyzwolenie eraser-contoller-manager elementu w celu utworzenia eraser-aks-xxxxx zasobników procesów roboczych dla każdego węzła i ukończenia procesu ręcznego usuwania.

Uwaga

Po wyłączeniu narzędzia Image Cleaner stara konfiguracja nadal istnieje. Oznacza to, że jeśli funkcja zostanie ponownie włączona bez jawnego przekazywania konfiguracji, istniejąca wartość jest używana zamiast wartości domyślnej.

Włączanie narzędzia Image Cleaner w klastrze usługi AKS

Włączanie narzędzia Image Cleaner w nowym klastrze

  • Włącz narzędzie Image Cleaner w nowym klastrze usługi AKS przy użyciu az aks create polecenia z parametrem --enable-image-cleaner .

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

Włączanie narzędzia Image Cleaner w istniejącym klastrze

  • Włącz narzędzie Image Cleaner w istniejącym klastrze usługi AKS przy użyciu az aks update polecenia .

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

Aktualizowanie interwału narzędzia Image Cleaner w nowym lub istniejącym klastrze

  • Zaktualizuj interwał narzędzia Image Cleaner dla nowego lub istniejącego klastra usługi AKS przy użyciu parametru --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
    

Ręczne usuwanie obrazów przy użyciu narzędzia Image Cleaner

Ważne

Parametr name musi mieć wartość imagelist.

  • Ręcznie usuń obraz przy użyciu następującego kubectl apply polecenia. W tym przykładzie docker.io/library/alpine:3.7.3 obraz jest usuwany, jeśli jest on nieużywany.

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

Czyszczenie ręczne jest jednorazową operacją i jest wyzwalane tylko wtedy, gdy zostanie utworzony nowy imagelist lub zmiany zostaną wprowadzone do istniejącego imagelistelementu . Po usunięciu imagelist obrazu nie zostanie on usunięty automatycznie.

Jeśli musisz wyzwolić inne ręczne czyszczenie, musisz utworzyć nowe imagelist lub wprowadzić zmiany w istniejącym. Jeśli chcesz ponownie usunąć ten sam obraz, musisz utworzyć nowy imagelistelement .

Usuń istniejącą listę ObrazList i utwórz nową

  1. Usuń stary imagelist przy użyciu kubectl delete polecenia .

    kubectl delete ImageList imagelist
    
  2. Utwórz nowy imagelist o tej samej nazwie obrazu. W poniższym przykładzie użyto tego samego obrazu co w poprzednim przykładzie.

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

Modyfikowanie istniejącej listy obrazów

  • Zmodyfikuj kubectl edit istniejący imagelist przy użyciu polecenia .

    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
    

W przypadku korzystania z trybu eraser-aks-xxxxx ręcznego zasobnik zostanie usunięty w ciągu 10 minut po zakończeniu pracy.

Lista wykluczeń obrazów

Obrazy określone na liście wykluczeń nie są usuwane z klastra. Narzędzie Image Cleaner obsługuje listy wykluczeń zdefiniowanych przez użytkownika i systemowych. Edytowanie listy wykluczeń systemu nie jest obsługiwane.

Sprawdzanie listy wykluczeń systemu

  • Sprawdź listę wykluczeń systemu przy użyciu następującego kubectl get polecenia.

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

Tworzenie listy wykluczeń zdefiniowanych przez użytkownika

  1. Utwórz przykładowy plik JSON zawierający wykluczone obrazy.

    cat > sample.json <<EOF
    {"excluded": ["excluded-image-name"]}
    EOF
    
  2. configmap Utwórz obiekt przy użyciu przykładowego pliku JSON przy użyciu następującego kubectl create polecenia i kubectl label .

    kubectl create configmap excluded --from-file=sample.json --namespace=kube-system
    kubectl label configmap excluded eraser.sh/exclude.list=true -n kube-system
    

Wyłączanie narzędzia Image Cleaner

  • Wyłącz narzędzie Image Cleaner w klastrze przy użyciu az aks update polecenia z parametrem --disable-image-cleaner .

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

Często zadawane pytania

Jak sprawdzić, której wersji używa narzędzie Image Cleaner?

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

Czy narzędzie Image Cleaner obsługuje inne skanery luk w zabezpieczeniach oprócz prostego skanera?

L.p.

Czy mogę określić poziomy luk w zabezpieczeniach dla obrazów do czyszczenia?

L.p. Domyślne ustawienia poziomów luk w zabezpieczeniach obejmują:

  • LOW,
  • MEDIUM,
  • HIGH i
  • CRITICAL

Nie można dostosować ustawień domyślnych.

Jak przeglądać obrazy zostały oczyszczone przez program Image Cleaner?

Dzienniki obrazów są przechowywane w zasobniku procesu roboczego eraser-aks-xxxxx . Gdy eraser-aks-xxxxx jest aktywny, możesz uruchomić następujące polecenia, aby wyświetlić dzienniki usuwania:

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

Zasobnik eraser-aks-xxxxx zostanie usunięty w ciągu 10 minut po zakończeniu pracy. Możesz wykonać następujące kroki, aby włączyć dodatek usługi Azure Monitor i użyć tabeli dzienników zasobników usługi Container Insights. Następnie dzienniki historyczne będą przechowywane i można je przejrzeć nawet eraser-aks-xxxxx po usunięciu.

  1. Upewnij się, że usługa Azure Monitoring jest włączona w klastrze. Aby uzyskać szczegółowe instrukcje, zobacz Włączanie usługi Container Insights w klastrach usługi AKS.

  2. Dzienniki kontenerów uruchomionych w kube-system przestrzeni nazw nie są zbierane domyślnie. kube-system Usuń przestrzeń nazw z exclude_namespaces w mapie konfiguracji i zastosuj mapę konfiguracji, aby włączyć zbieranie tych dzienników. Aby uzyskać szczegółowe informacje, zobacz Konfigurowanie zbierania danych usługi Container Insights.

  3. Pobierz identyfikator zasobu usługi Log Analytics przy użyciu az aks show polecenia .

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

    Po kilku minutach polecenie zwraca informacje o rozwiązaniu w formacie JSON, w tym identyfikator zasobu obszaru roboczego:

    "addonProfiles": {
      "omsagent": {
        "config": {
          "logAnalyticsWorkspaceResourceID": "/subscriptions/<WorkspaceSubscription>/resourceGroups/<DefaultWorkspaceRG>/providers/Microsoft.OperationalInsights/workspaces/<defaultWorkspaceName>"
        },
        "enabled": true
      }
    }
    
  4. W witrynie Azure Portal wyszukaj identyfikator zasobu obszaru roboczego, a następnie wybierz pozycję Dzienniki.

  5. Skopiuj jedno z poniższych zapytań i wklej je w oknie zapytania.

    1. Użyj następującego zapytania, jeśli klaster używa schematu ContainerLogV2. Jeśli nadal używasz programu ContainerLog, należy przeprowadzić uaktualnienie do klasy ContainerlogV2.

      ContainerLogV2
      | where PodName startswith "eraser-aks-" and PodNamespace == "kube-system"
      | project TimeGenerated, PodName, LogMessage, LogSource
      
    2. Jeśli chcesz nadal używać ContainerLogpolecenia , użyj następującego zapytania:

      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. Wybierz Uruchom. Wszystkie usunięte dzienniki obrazów są wyświetlane w obszarze Wyniki .