Megosztás a következőn keresztül:


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

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.

Képernyőkép az ImageCleaner munkafolyamatát bemutató diagramról. A fürtön futó ImageCleaner-podok létrehozhatnak egy ImageListet, vagy manuális bemenetet is megadhatnak.

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 a docker.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

  1. Törölje a régit imagelist a kubectl delete paranccsal.

    kubectl delete ImageList imagelist
    
  2. 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 a kubectl 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

  1. Hozzon létre egy JSON-mintafájlt kizárt képek tárolásához.

    cat > sample.json <<EOF
    {"excluded": ["excluded-image-name"]}
    EOF
    
  2. Hozzon létre egy configmap JSON-mintafájlt az alábbi kubectl create és kubectl 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 és
  • CRITICAL

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 .

  1. 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.

  2. A névtérben kube-system futó tárolók naplói alapértelmezés szerint nem lesznek összegyűjtve. Távolítsa el a kube-system névteret a konfigurációtérképen exclude_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.

  3. 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
      }
    }
    
  4. Az Azure Portalon keresse meg a munkaterület erőforrás-azonosítóját, majd válassza a Naplók lehetőséget.

  5. Másolja ki az alábbi lekérdezések egyikét, és illessze be a lekérdezési ablakba.

    1. 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
      
    2. Ha továbbra is használni ContainerLogszeretné, 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
      
  6. Válassza a Futtatás lehetőséget. A törölt képnaplók megjelennek az Eredmények területen.