استخدام "منظف الصور" لتنظيف الصور التالفة الضعيفة على نظام مجموعة Azure Kubernetes Service (AKS)

من الشائع استخدام البنى الأساسية لبرنامج ربط العمليات التجارية لإنشاء الصور وتوزيعها على أنظمة مجموعات Azure Kubernetes Service (AKS). على الرغم من كونها رائعة لإنشاء الصور، فإن هذه العملية غالبًا لا تأخذ في الحسبان الصور القديمة المتبقية، ويمكن أن تؤدي إلى تضخم الصورة على عقد نظام المجموعة. قد تحتوي هذه الصور على نقاط ضعف، مما قد يؤدي إلى حدوث مشكلات أمنية. لإزالة مخاطر الأمان في مجموعاتك، يمكنك تنظيف هذه الصور غير المستنتجة. يمكن أن يكون تنظيف الصور يدويا وقتا مكثفا. يقوم "منظف الصور" بتعريف الصور وإزالتها تلقائيا، ما يخفف من مخاطر الصور القديمة ويقلل من الوقت المطلوب لتنظيفها.

إشعار

Image Cleaner هي ميزة تستند إلى الممحاة. في نظام مجموعة AKS، اسم الميزة واسم الخاصية هو Image Cleaner، بينما تحتوي أسماء pods منظف الصور ذات الصلة على Eraser.

المتطلبات الأساسية

  • اشتراك Azure. إذا لم يكن لديك اشتراك Azure، يمكنك إنشاء حساب مجاني.
  • الإصدار 2.49.0 من Azure CLI أو أحدث. شغّل az --version للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

القيود

لا يدعم "منظف الصور" بعد تجمعات عقد Windows أو العقد الظاهرية ل AKS.

كيف يعمل منظف الصور

بعد تمكين Image Cleaner، سيكون هناك جراب مدير وحدة تحكم يسمى eraser-controller-manager تم نشره في مجموعتك.

لقطة شاشة لرسم تخطيطي يظهر سير عمل ImageCleaner. يمكن أن تنشئ pods ImageCleaner التي تعمل على نظام المجموعة ImageList، أو يمكن توفير إدخال يدوي.

باستخدام Image Cleaner، يمكنك الاختيار بين الوضع اليدوي والتلقائي وخيارات التكوين التالية:

خيارات الإعداد

Name ‏‏الوصف مطلوب
--enable-image-cleaner تمكين ميزة Image Cleaner لنظام مجموعة AKS نعم، ما لم يتم تحديد «تعطيل»
--disable-image-cleaner تعطيل ميزة Image Cleaner لنظام مجموعة AKS نعم، ما لم يتم تحديد «تمكين»
--image-cleaner-interval-hours تحدد هذه المعلمة وقت الفاصل الزمني (بالساعات) الذي يستخدمه منظف الصور للتشغيل. القيمة الافتراضية ل Azure CLI هي أسبوع واحد، والحد الأدنى للقيمة هو 24 ساعة والحد الأقصى هو ثلاثة أشهر. غير مطلوب ل Azure CLI، مطلوب لقالب ARM أو عملاء آخرين

الوضع التلقائي

بمجرد eraser-controller-manager النشر، سيتم اتخاذ الخطوات التالية تلقائيا:

  • يبدأ على الفور عملية التنظيف وينشئ eraser-aks-xxxxx وحدات الجراب العاملة لكل عقدة.
  • هناك ثلاث حاويات في كل حاوية عاملة:
    • مجمع، يجمع الصور غير المستخدمة
    • ماسح ضوئي ثلاثي، والذي يستفيد من التفاهة لفحص الثغرات الأمنية للصورة.
    • مزيل، الذي يزيل الصور غير المستخدمة مع الثغرات الأمنية.
  • بعد اكتمال عملية التنظيف، يتم حذف جراب العامل ويتم التنظيف المجدول التالي وفقا لما تحدده --image-cleaner-interval-hours .

الوضع اليدوي

يمكنك تشغيل التنظيف يدويا عن طريق تعريف كائن CRD،ImageList . eraser-contoller-manager يؤدي هذا إلى إنشاء eraser-aks-xxxxx وحدات الجراب العاملة لكل عقدة وإكمال عملية الإزالة اليدوية.

إشعار

بعد تعطيل Image Cleaner، لا يزال التكوين القديم موجودا. وهذا يعني أنه إذا قمت بتمكين الميزة مرة أخرى دون تمرير التكوين بشكل صريح، استخدام القيمة الموجودة بدلا من القيمة الافتراضية.

تمكين Image Cleaner على نظام مجموعة AKS

تمكين Image Cleaner على نظام مجموعة جديد

  • تمكين Image Cleaner على نظام مجموعة AKS جديد باستخدام az aks create الأمر مع المعلمة --enable-image-cleaner .

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

تمكين Image Cleaner على نظام مجموعة موجود

  • تمكين Image Cleaner على مجموعة AKS موجودة باستخدام az aks update الأمر .

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

تحديث الفاصل الزمني ل Image Cleaner على نظام مجموعة جديد أو موجود

  • تحديث الفاصل الزمني ل Image Cleaner على نظام مجموعة AKS جديد أو موجود باستخدام المعلمة --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
    

إزالة الصور يدويا باستخدام "منظف الصور"

هام

name يجب تعيين إلى imagelist.

  • قم بإزالة صورة يدويا باستخدام الأمر التالي kubectl apply . يزيل docker.io/library/alpine:3.7.3 هذا المثال الصورة إذا لم تكن مستخدمة.

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

التنظيف اليدوي هو عملية لمرة واحدة ويتم تشغيله فقط عند إنشاء جديد imagelist أو إجراء تغييرات على الموجود imagelist. بعد حذف الصورة، imagelist لن يتم حذف تلقائيا.

إذا كنت بحاجة إلى تشغيل تنظيف يدوي آخر، يجب عليك إنشاء جديد imagelist أو إجراء تغييرات على تنظيف موجود. إذا كنت تريد إزالة الصورة نفسها مرة أخرى، فستحتاج إلى إنشاء جديد imagelist.

حذف ImageList موجودة وإنشاء قائمة جديدة

  1. احذف القديم imagelist باستخدام kubectl delete الأمر .

    kubectl delete ImageList imagelist
    
  2. إنشاء جديد imagelist بنفس اسم الصورة. يستخدم المثال التالي نفس الصورة مثل المثال السابق.

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

تعديل قائمة صور موجودة

  • تعديل الموجود imagelist باستخدام kubectl 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
    

عند استخدام الوضع اليدوي، eraser-aks-xxxxx يحذف pod في غضون 10 دقائق بعد الانتهاء من العمل.

قائمة استبعاد الصور

لا تتم إزالة الصور المحددة في قائمة الاستبعاد من نظام المجموعة. يدعم Image Cleaner النظام وقوائم الاستبعاد المعرفة من قبل المستخدم. لا يتم دعم تحرير قائمة استبعاد النظام.

التحقق من قائمة استبعاد النظام

  • تحقق من قائمة استبعاد النظام باستخدام الأمر التالي kubectl get .

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

إنشاء قائمة استبعاد معرفة من قبل المستخدم

  1. إنشاء نموذج ملف JSON لاحتواء الصور المستبعدة.

    cat > sample.json <<EOF
    {"excluded": ["excluded-image-name"]}
    EOF
    
  2. configmap أنشئ باستخدام نموذج ملف JSON باستخدام الأمرين التاليين kubectl create و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
    

تعطيل منظف الصور

  • تعطيل Image Cleaner على نظام المجموعة باستخدام az aks update الأمر مع المعلمة --disable-image-cleaner .

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

الأسئلة المتداولة

كيف يمكنني التحقق من الإصدار الذي يستخدمه Image Cleaner؟

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

هل يدعم "منظف الصور" الماسحات الضوئية الأخرى للثغرات الأمنية إلى جانب الماسح الضوئي الثلاثي؟

‏‏لا.

هل يمكنني تحديد مستويات الثغرات الأمنية لتنظيف الصور؟

‏‏لا. تتضمن الإعدادات الافتراضية لمستويات الثغرات الأمنية ما يلي:

  • LOW,
  • MEDIUM,
  • HIGHو
  • CRITICAL

لا يمكنك تخصيص الإعدادات الافتراضية.

كيفية مراجعة الصور التي تم تنظيفها بواسطة Image Clean؟

يتم تخزين سجلات الصور في جراب eraser-aks-xxxxx العامل. عندما eraser-aks-xxxxx يكون على قيد الحياة، يمكنك تشغيل الأوامر التالية لعرض سجلات الحذف:

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

يتم حذف الجراب eraser-aks-xxxxx في غضون 10 دقائق بعد الانتهاء من العمل. يمكنك اتباع هذه الخطوات لتمكين الوظيفة الإضافية Azure Monitor واستخدام جدول سجل حاوية Insights pod. بعد ذلك، سيتم تخزين السجلات التاريخية ويمكنك مراجعتها حتى eraser-aks-xxxxx يتم حذفها.

  1. تأكد من تمكين Azure Monitoring على مجموعتك. للحصول على خطوات مفصلة، راجع تمكين نتائج تحليلات الحاوية على مجموعات AKS.

  2. احصل على معرف مورد Log Analytics باستخدام az aks show الأمر .

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

    بعد بضع دقائق، يقوم الأمر بإرجاع معلومات بتنسيق JSON حول الحل، بما في ذلك معرف مورد مساحة العمل:

    "addonProfiles": {
      "omsagent": {
        "config": {
          "logAnalyticsWorkspaceResourceID": "/subscriptions/<WorkspaceSubscription>/resourceGroups/<DefaultWorkspaceRG>/providers/Microsoft.OperationalInsights/workspaces/<defaultWorkspaceName>"
        },
        "enabled": true
      }
    }
    
  3. في مدخل Microsoft Azure، ابحث عن معرف مورد مساحة العمل، ثم حدد Logs.

  4. انسخ الاستعلام التالي في الجدول، مع استبدال ب name eraser-aks-xxxxx (اسم جراب العامل):

    let startTimestamp = ago(1h);
    KubePodInventory
    | where TimeGenerated > startTimestamp
    | project ContainerID, PodName=Name, Namespace
    | where PodName contains "name" and Namespace startswith "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
    
  5. حدد تشغيل. تظهر أي سجلات صور محذوفة في منطقة النتائج .

    لقطة شاشة تعرض سجلات الصور المحذوفة في مدخل Microsoft Azure.