Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Pipeline'y są często używane do tworzenia i wdrażania obrazów w klastrach usługi Azure Kubernetes Service (AKS). Podczas tworzenia obrazów często nie są uwzględniane nieaktualne obrazy pozostawione w tle, co może prowadzić do nadmiaru obrazów na węzłach klastra. Te obrazy mogą zawierać luki w zabezpieczeniach, które mogą powodować problemy z zabezpieczeniami. Aby zredukować zagrożenia bezpieczeństwa w klastrach, możesz wyczyścić te nieodwołane 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 Eraser.
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ą Eraser
.
Wymagania wstępne
- Subskrypcja platformy Azure. Jeśli nie masz subskrypcji Azure, możesz utworzyć bezpłatne konto Azure.
- Interfejs wiersza polecenia platformy Azure w wersji 2.49.0 lub nowszej. Uruchom polecenie
az --version
, aby znaleźć swoją wersję. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
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.
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 | Wymagane |
---|---|---|
--enable-image-cleaner |
Włącz funkcję Czyszczenia obrazów w klastrze AKS | Tak, chyba że określono wyłączenie funkcji |
--disable-image-cleaner |
Wyłącz funkcję Image Cleaner dla klastra AKS | Tak, chyba że zostanie określona opcja Włącz |
--image-cleaner-interval-hours |
Ten parametr określa czas interwału (w godzinach), w którym Image Cleaner się uruchamia. Wartość domyślna interfejsu wiersza polecenia platformy Azure to tydzień, wartość minimalna to 24 godziny, a wartość maksymalna to trzy miesiące. | Nie jest wymagany dla Azure CLI, wymagany dla szablonu 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
pody robocze dla każdego węzła. - W każdym module roboczym znajdują się trzy kontenery:
- Moduł zbierający, który zbiera nieużywane obrazy.
- Trivy skaner, który wykorzystuje trivy do skanowania luk w zabezpieczeniach obrazów.
- Narzędzie do usuwania, które jest używane do usuwania nieużywanych obrazów z lukami w zabezpieczeniach.
- Po zakończeniu procesu oczyszczania moduł roboczy zostanie usunięty, a następne zaplanowane czyszczenie odbywa się zgodnie z ustalonym przez ciebie
--image-cleaner-interval-hours
.
Tryb ręczny
Czyszczenie można wyzwolić ręcznie, definiując obiekt CRD. Spowoduje, że eraser-contoller-manager
utworzy eraser-aks-xxxxx
zasobniki procesów roboczych dla każdego węzła i dokończy proces 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łącz Image Cleaner w klastrze AKS
Włączanie narzędzia Image Cleaner w nowym klastrze
Włącz narzędzie Image Cleaner na nowym klastrze AKS za pomocą polecenia
az aks create
i parametru--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 za pomocą polecenia
az aks update
.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ł programu 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ładziedocker.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 imagelist
elementu. Po usunięciu obrazu, imagelist
nie zostanie 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 imagelist
element .
Usuń istniejącą ImageList i utwórz nową
Usuń stary
imagelist
przy użyciukubectl delete
polecenia .kubectl delete ImageList imagelist
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 istniejący
imagelist
przy użyciu poleceniakubectl 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
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
Utwórz przykładowy plik JSON zawierający wykluczone obrazy.
cat > sample.json <<EOF {"excluded": ["excluded-image-name"]} EOF
Utwórz
configmap
przy użyciu przykładowego pliku JSON i następujących poleceńkubectl create
orazkubectl 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łącz narzędzie Image Cleaner
Wyłącz Image Cleaner w klastrze, używając polecenia
az aks update
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 wrażliwości oprócz trivy-scanner?
Nr
Czy mogę ustalić poziomy podatności dla obrazów do usunięcia?
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, które zostały oczyszczone przez program Image Cleaner?
Logi obrazów są przechowywane w zasobniku roboczym 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.
Upewnij się, że usługa Azure Monitoring jest włączona w klastrze. Aby uzyskać szczegółowe instrukcje, zobacz Włączanie Container Insights w klastrach AKS.
Dzienniki kontenerów uruchomionych w
kube-system
przestrzeni nazw nie są zbierane domyślnie.kube-system
Usuń przestrzeń nazw zexclude_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.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 } }
W witrynie Azure Portal wyszukaj identyfikator zasobu obszaru roboczego, a następnie wybierz pozycję Dzienniki.
Skopiuj jedno z poniższych zapytań i wklej je w oknie zapytania.
Użyj następującego zapytania, jeśli klaster używa schematu ContainerLogV2. Jeśli nadal używasz
ContainerLog
, powinieneś zaktualizować do ContainerlogV2.ContainerLogV2 | where PodName startswith "eraser-aks-" and PodNamespace == "kube-system" | project TimeGenerated, PodName, LogMessage, LogSource
Jeśli chcesz nadal używać
ContainerLog
, 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
Wybierz Uruchom. Wszystkie usunięte dzienniki obrazów są wyświetlane w obszarze Wyniki .
Azure Kubernetes Service