Az Image Cleaner használatával megtisztíthatja a sebezhető elavult lemezképeket az Azure Kubernetes Service-fürtön (AKS)
Gyakran használunk folyamatokat a rendszerképek Azure Kubernetes Service-fürtökön való létrehozására és üzembe helyezésére. Bár kiválóan alkalmas a rendszerképek létrehozására, ez a folyamat gyakran nem veszi figyelembe a hátrahagyott elavult képeket, és a fürtcsomópontokon képblobhoz vezethet. Ezek a képek biztonsági réseket tartalmazhatnak, amelyek biztonsági problémákat eredményezhetnek. A fürtök biztonsági kockázatainak eltávolításához törölheti ezeket a nem hivatkozott lemezképeket. A képek manuális tisztítása időt igényelhet. Az Image Cleaner automatikus képazonosítást és eltávolítást végez, amely csökkenti az elavult képek kockázatát, és csökkenti a törléshez szükséges időt.
Feljegyzés
Az Image Cleaner a Radíron alapuló funkció.
Egy AKS-fürtben a szolgáltatásnév és a tulajdonságnév Image Cleaner
, míg a megfelelő Képtisztító podok nevei tartalmazzák Eraser
.
Előfeltételek
- Azure-előfizetés. Ha nem rendelkezik Azure-előfizetéssel, létrehozhat egy ingyenes fiókot.
- Az Azure CLI 2.49.0-s vagy újabb verziója. Futtassa
az --version
a verziót. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.
Korlátozások
Az Image Cleaner még nem támogatja a Windows-csomópontkészleteket vagy az AKS virtuális csomópontokat.
Az Image Cleaner működése
Az Image Cleaner engedélyezése után egy vezérlőkezelő pod eraser-controller-manager
lesz üzembe helyezve a fürtön.
A Képtisztítóval a manuális és az automatikus mód, valamint a következő konfigurációs beállítások közül választhat:
Konfigurációs lehetőségek
Név | Leírás | Kötelező |
---|---|---|
--enable-image-cleaner |
Képtisztító funkció engedélyezése AKS-fürtökhöz | Igen, kivéve, ha a letiltás meg van adva |
--disable-image-cleaner |
Az AKS-fürt Képtisztító funkciójának letiltása | Igen, kivéve, ha az engedélyezés meg van adva |
--image-cleaner-interval-hours |
Ez a paraméter határozza meg a futtatáshoz használt időközt (órákban). Az Azure CLI alapértelmezett értéke egy hét, a minimális érték 24 óra, a maximum három hónap. | Az Azure CLI-hez nem szükséges, ARM-sablonhoz vagy más ügyfelekhez szükséges |
Automatikus mód
Az üzembe helyezés után eraser-controller-manager
a rendszer automatikusan elvégzi a következő lépéseket:
- Azonnal elindítja a törlési folyamatot, és munkavégző podokat hoz létre
eraser-aks-xxxxx
az egyes csomópontokhoz. - Mindegyik munkavégző podban három tároló található:
- Egy gyűjtő, amely nem használt képeket gyűjt.
- Egy trivy-scanner, amely a kép biztonsági réseinek vizsgálatára használja a trivy-t .
- Eltávolító, amely eltávolítja a biztonsági résekkel rendelkező nem használt képeket.
- A tisztítási folyamat befejezése után a munkavégző pod törlődik, és a következő ütemezett törlés az
--image-cleaner-interval-hours
Ön által megadottak szerint történik.
Manuális mód
A törlést manuálisan is aktiválhatja egy CRD-objektumImageList
definiálásával. Ez aktiválja a eraser-contoller-manager
munkavégző podok létrehozását eraser-aks-xxxxx
az egyes csomópontokhoz, és végrehajtja a manuális eltávolítási folyamatot.
Feljegyzés
Az Image Cleaner letiltása után a régi konfiguráció továbbra is létezik. Ez azt jelenti, hogy ha a konfiguráció explicit átadása nélkül ismét engedélyezi a funkciót, a rendszer a meglévő értéket használja az alapértelmezett helyett.
Képtisztító engedélyezése az AKS-fürtön
Képtisztító engedélyezése új fürtön
Engedélyezze az Image Cleanert egy új AKS-fürtön a
az aks create
paraméterrel rendelkező--enable-image-cleaner
paranccsal.az aks create \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner \ --generate-ssh-keys
Image Cleaner engedélyezése meglévő fürtön
Engedélyezze az Image Cleanert egy meglévő AKS-fürtön a
az aks update
paranccsal.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-image-cleaner
Az Image Cleaner időközének frissítése új vagy meglévő fürtön
Frissítse az Image Cleaner időközt egy új vagy meglévő AKS-fürtön a
--image-cleaner-interval-hours
paraméter használatával.# 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
Képek manuális eltávolítása a Képtisztítóval
Fontos
A(z) name
beállítása a következő legyen: imagelist
.
A következő
kubectl apply
paranccsal távolítsa el manuálisan a rendszerképet. Ez a példa eltávolítja adocker.io/library/alpine:3.7.3
képet, ha nincs használatban.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
A manuális törlés egyszeri művelet, és csak akkor aktiválódik, ha újat imagelist
hoz létre, vagy módosítja a meglévőt imagelist
. A rendszerkép törlése után a imagelist
rendszer nem törli automatikusan a rendszerképet.
Ha egy másik manuális törlést kell aktiválnia, létre kell hoznia egy újat imagelist
, vagy módosítania kell egy meglévőt. Ha ismét el szeretné távolítani ugyanazt a képet, létre kell hoznia egy újat imagelist
.
Meglévő ImageList törlése és új létrehozása
Törölje a régit
imagelist
akubectl delete
paranccsal.kubectl delete ImageList imagelist
Hozzon létre egy újat
imagelist
ugyanazzal a képnévvel. Az alábbi példa ugyanazt a képet használja, mint az előző példában.cat <<EOF | kubectl apply -f - apiVersion: eraser.sh/v1 kind: ImageList metadata: name: imagelist spec: images: - docker.io/library/alpine:3.7.3 EOF
Meglévő ImageList módosítása
Módosítsa a meglévőt
imagelist
akubectl edit
paranccsal.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
Manuális mód használatakor a pod a eraser-aks-xxxxx
munka befejezése után 10 percen belül törlődik.
Képkizárási lista
A kizárási listában megadott képek nem törlődnek a fürtből. Az Image Cleaner támogatja a rendszer- és felhasználó által definiált kizárási listákat. A rendszerkizárási lista szerkesztése nem támogatott.
A rendszerkizárási lista ellenőrzése
Ellenőrizze a rendszerkizárási listát az alábbi
kubectl get
paranccsal.kubectl get -n kube-system configmap eraser-system-exclusion -o yaml
Felhasználó által definiált kizárási lista létrehozása
Hozzon létre egy JSON-mintafájlt kizárt képek tárolásához.
cat > sample.json <<EOF {"excluded": ["excluded-image-name"]} EOF
Hozzon létre egy
configmap
JSON-mintafájlt az alábbikubectl create
éskubectl label
a parancs használatával.kubectl create configmap excluded --from-file=sample.json --namespace=kube-system kubectl label configmap excluded eraser.sh/exclude.list=true -n kube-system
Képtisztító letiltása
Tiltsa le az Image Cleanert a fürtben a
az aks update
paraméterrel rendelkező--disable-image-cleaner
paranccsal.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --disable-image-cleaner
GYIK
Hogyan ellenőrizhetim, hogy az Image Cleaner melyik verziót használja?
kubectl describe configmap -n kube-system eraser-manager-config | grep tag -C 3
Támogatja az Image Cleaner a trivy-scanneren kívül más biztonságirés-szkennereket is?
Szám
Megadhatok biztonsági résszinteket a tisztítandó képekhez?
Szám A biztonságirés-szintek alapértelmezett beállításai a következők:
LOW
,MEDIUM
,HIGH
ésCRITICAL
Az alapértelmezett beállítások nem szabhatók testre.
Hogyan tekintheti át a képeket a Képtisztító megtisztítva?
A rendszerképnaplókat a eraser-aks-xxxxx
munkavégző pod tárolja. Ha eraser-aks-xxxxx
még él, a törlési naplók megtekintéséhez futtassa a következő parancsokat:
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
A eraser-aks-xxxxx
pod a munka befejezése után 10 percen belül törlődik. Ezeket a lépéseket követve engedélyezheti az Azure Monitor bővítményt , és használhatja a Container Insights podnapló-táblát. Ezután a rendszer tárolja az előzménynaplókat, és áttekintheti őket még a törlésükkor is eraser-aks-xxxxx
.
Győződjön meg arról, hogy az Azure Monitoring engedélyezve van a fürtön. Részletes lépésekért tekintse meg a Container Insights engedélyezése AKS-fürtökön című témakört.
A névtérben
kube-system
futó tárolók naplói alapértelmezés szerint nem lesznek összegyűjtve. Távolítsa el akube-system
névteret a konfigurációtérképenexclude_namespaces
, és alkalmazza a konfigurációs térképet a naplók gyűjteményének engedélyezéséhez. Részletekért lásd a Container Insights adatgyűjtésének konfigurálását ismertető cikket.Kérje le a Log Analytics erőforrás-azonosítóját a
az aks show
paranccsal.az aks show --resource-group myResourceGroup --name myManagedCluster
Néhány perc elteltével a parancs JSON formátumú információkat ad vissza a megoldásról, beleértve a munkaterület erőforrás-azonosítóját:
"addonProfiles": { "omsagent": { "config": { "logAnalyticsWorkspaceResourceID": "/subscriptions/<WorkspaceSubscription>/resourceGroups/<DefaultWorkspaceRG>/providers/Microsoft.OperationalInsights/workspaces/<defaultWorkspaceName>" }, "enabled": true } }
Az Azure Portalon keresse meg a munkaterület erőforrás-azonosítóját, majd válassza a Naplók lehetőséget.
Másolja ki az alábbi lekérdezések egyikét, és illessze be a lekérdezési ablakba.
Használja a következő lekérdezést, ha a fürt a ContainerLogV2 sémát használja. Ha továbbra is használja
ContainerLog
, frissítsen a ContainerlogV2-re.ContainerLogV2 | where PodName startswith "eraser-aks-" and PodNamespace == "kube-system" | project TimeGenerated, PodName, LogMessage, LogSource
Ha továbbra is használni
ContainerLog
szeretné, használja inkább a következő lekérdezést: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
Válassza a Futtatás lehetőséget. A törölt képnaplók megjelennek az Eredmények területen.
Azure Kubernetes Service