Vyčištění ohrožených zastaralých imagí v clusteru Azure Kubernetes Service (AKS) pomocí nástroje Image Cleaner
Ke sestavování a nasazování imagí v clusterech Azure Kubernetes Service (AKS) se běžně používají kanály. I když je tento proces skvělý pro vytváření imagí, často nezohlední zastaralé image, které zůstaly na uzlech clusteru, může vést k nafouknutí image. Tyto image můžou obsahovat ohrožení zabezpečení, což může způsobit problémy se zabezpečením. Pokud chcete odebrat rizika zabezpečení ve vašich clusterech, můžete tyto neodkazované image vyčistit. Ruční čištění obrázků může být časově náročné. Nástroj Image Cleaner provádí automatickou identifikaci a odebrání obrázků, což snižuje riziko zastaralých obrázků a zkracuje dobu potřebnou k jejich vyčištění.
Poznámka:
Image Cleaner je funkce založená na gumě.
V clusteru AKS je Image Cleaner
název funkce a název vlastnosti , zatímco názvy příslušných podů Image Cleaner obsahují Eraser
.
Požadavky
- Předplatné Azure. Pokud ještě nemáte předplatné Azure, můžete si vytvořit bezplatný účet.
- Azure CLI verze 2.49.0 nebo novější Spuštěním
az --version
vyhledejte svou verzi. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.
Omezení
Nástroj Image Cleaner zatím nepodporuje fondy uzlů Windows nebo virtuální uzly AKS.
Jak funguje Image Cleaner
Po povolení nástroje Image Cleaner se do vašeho clusteru nasadí pod správce kontroleru s názvem eraser-controller-manager
.
Pomocí nástroje Image Cleaner si můžete vybrat mezi ručním a automatickým režimem a následujícími možnostmi konfigurace:
Možnosti konfigurace
Název | Popis | Povinní účastníci |
---|---|---|
--enable-image-cleaner |
Povolení funkce Image Cleaner pro cluster AKS | Ano, pokud není zadán zákaz |
--disable-image-cleaner |
Zakázání funkce Image Cleaner pro cluster AKS | Ano, pokud není zadáno povolení |
--image-cleaner-interval-hours |
Tento parametr určuje dobu intervalu (v hodinách) Nástroj Image Cleaner, který se používá ke spuštění. Výchozí hodnota azure CLI je jeden týden, minimální hodnota je 24 hodin a maximum je tři měsíce. | Nevyžaduje se pro Azure CLI, vyžaduje se pro šablonu ARM nebo jiné klienty. |
Automatický režim
Po eraser-controller-manager
nasazení se automaticky provede následující kroky:
- Okamžitě spustí proces vyčištění a vytvoří
eraser-aks-xxxxx
pracovní pody pro každý uzel. - Každý pracovní pod obsahuje tři kontejnery:
- Kolektor, který shromažďuje nepoužívané image.
- Trivy-scanner, který využívá trivy ke kontrole ohrožení zabezpečení obrázků.
- Odstraňovač, který odebere nepoužívané image s ohroženími zabezpečení.
- Po dokončení procesu čištění se pracovní pod odstraní a podle vámi definované definice
--image-cleaner-interval-hours
proběhne další naplánované vyčištění.
Ruční režim
Vyčištění můžete aktivovat ručně definováním objektuImageList
CRD. Tím se aktivuje eraser-contoller-manager
vytvoření eraser-aks-xxxxx
pracovních podů pro každý uzel a dokončení ručního procesu odebrání.
Poznámka:
Po zakázání nástroje Image Cleaner stále existuje stará konfigurace. To znamená, že pokud funkci znovu povolíte bez explicitního předávání konfigurace, použije se stávající hodnota místo výchozí hodnoty.
Povolení funkce Image Cleaner v clusteru AKS
Povolení funkce Image Cleaner v novém clusteru
Povolte Nástroj Image Cleaner v novém clusteru AKS pomocí
az aks create
příkazu s parametrem--enable-image-cleaner
.az aks create \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner \ --generate-ssh-keys
Povolení funkce Image Cleaner v existujícím clusteru
Pomocí příkazu povolte nástroj Image Cleaner v existujícím clusteru
az aks update
AKS.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner
Aktualizace intervalu Čištění obrázků v novém nebo existujícím clusteru
Pomocí parametru
--image-cleaner-interval-hours
aktualizujte interval nástroje Image Cleaner na novém nebo existujícím clusteru AKS.# 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
Ruční odebrání obrázků pomocí nástroje Image Cleaner
Důležité
Možnost name
musí být nastavená na imagelist
.
Ručně odeberte obrázek pomocí následujícího
kubectl apply
příkazu. Tento příklad odeberedocker.io/library/alpine:3.7.3
image, pokud se nepoužívá.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
Ruční vyčištění je jednorázová operace a aktivuje se pouze v okamžiku, kdy se v existujícím imagelist
prostředí vytvoří nový imagelist
nebo se změní . Po odstranění imagelist
obrázku se neodstraní automaticky.
Pokud potřebujete aktivovat další ruční vyčištění, musíte vytvořit nový imagelist
nebo provést změny existujícího. Pokud chcete stejnou image znovu odebrat, musíte vytvořit novou imagelist
.
Odstranění existujícího imageListu a vytvoření nového
Pomocí příkazu odstraňte starou
imagelist
kubectl delete
verzi.kubectl delete ImageList imagelist
Vytvořte nový
imagelist
se stejným názvem image. Následující příklad používá stejný obrázek jako předchozí příklad.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
Úprava existujícího imageListu
Upravte existující
imagelist
pomocíkubectl edit
příkazu.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
Při použití ručního režimu se eraser-aks-xxxxx
pod odstraní do 10 minut po dokončení práce.
Seznam vyloučení obrázků
Image zadané v seznamu vyloučení se z clusteru neodeberou. Image Cleaner podporuje seznamy vyloučení definované systémem a uživatelem. Není podporováno úpravu seznamu vyloučení systému.
Kontrola seznamu vyloučení systému
Pomocí následujícího
kubectl get
příkazu zkontrolujte seznam vyloučení systému.kubectl get -n kube-system configmap eraser-system-exclusion -o yaml
Vytvoření seznamu vyloučení definovaných uživatelem
Vytvořte ukázkový soubor JSON, který bude obsahovat vyloučené obrázky.
cat > sample.json <<EOF {"excluded": ["excluded-image-name"]} EOF
Pomocí následujícího
kubectl create
příkazukubectl label
vytvořteconfigmap
ukázkový soubor JSON.kubectl create configmap excluded --from-file=sample.json --namespace=kube-system kubectl label configmap excluded eraser.sh/exclude.list=true -n kube-system
Zakázání čističe obrázků
Pomocí příkazu s parametrem
az aks update
zakažte nástroj Image Cleaner ve vašem clusteru--disable-image-cleaner
.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --disable-image-cleaner
Často kladené dotazy
Jak zjistím, jakou verzi Image Cleaner používá?
kubectl describe configmap -n kube-system eraser-manager-config | grep tag -C 3
Podporuje Image Cleaner jiné kontroly ohrožení zabezpečení než trivy-scanner?
Ne.
Můžu určit úrovně ohrožení zabezpečení pro vyčištění imagí?
Ne. Mezi výchozí nastavení úrovní ohrožení zabezpečení patří:
LOW
,MEDIUM
,HIGH
aCRITICAL
Výchozí nastavení nemůžete přizpůsobit.
Jak zkontrolovat obrázky byly vyčištěny nástrojem Image Cleaner?
Protokoly obrázků se ukládají do pracovního podu eraser-aks-xxxxx
. Pokud eraser-aks-xxxxx
je aktivní, můžete spuštěním následujících příkazů zobrazit protokoly odstranění:
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
Pod eraser-aks-xxxxx
se odstraní do 10 minut po dokončení práce. Tímto postupem povolíte doplněk Azure Monitor a použijete tabulku protokolů podů Container Insights. Potom se uloží historické protokoly a můžete je zkontrolovat i eraser-aks-xxxxx
vy.
Ujistěte se, že je ve vašem clusteru povolené monitorování Azure. Podrobný postup najdete v tématu Povolení služby Container Insights v clusterech AKS.
Protokoly pro kontejnery spuštěné v
kube-system
oboru názvů se ve výchozím nastavení neshromažďují.kube-system
Odeberte obor názvů zexclude_namespaces
objektu configmap a použijte mapu konfigurace pro povolení shromažďování těchto protokolů. Podrobnosti najdete v tématu Konfigurace shromažďování dat Container Insights.Pomocí příkazu získejte ID
az aks show
prostředku Log Analytics.az aks show --resource-group myResourceGroup --name myManagedCluster
Po několika minutách příkaz vrátí informace o řešení ve formátu JSON, včetně ID prostředku pracovního prostoru:
"addonProfiles": { "omsagent": { "config": { "logAnalyticsWorkspaceResourceID": "/subscriptions/<WorkspaceSubscription>/resourceGroups/<DefaultWorkspaceRG>/providers/Microsoft.OperationalInsights/workspaces/<defaultWorkspaceName>" }, "enabled": true } }
Na webu Azure Portal vyhledejte ID prostředku pracovního prostoru a pak vyberte Protokoly.
Zkopírujte jeden z následujících dotazů a vložte ho do okna dotazu.
Pokud váš cluster používá schéma ContainerLogV2, použijte následující dotaz. Pokud stále používáte
ContainerLog
, měli byste upgradovat na ContainerlogV2.ContainerLogV2 | where PodName startswith "eraser-aks-" and PodNamespace == "kube-system" | project TimeGenerated, PodName, LogMessage, LogSource
Pokud chcete pokračovat v používání
ContainerLog
, použijte místo toho následující dotaz: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
Vyberte Spustit. Všechny odstraněné protokoly obrázků se zobrazí v oblasti Výsledky .
Azure Kubernetes Service