استخدام "منظف الصور" لتنظيف الصور التالفة الضعيفة على نظام مجموعة 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
تم نشره في مجموعتك.
باستخدام 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 موجودة وإنشاء قائمة جديدة
احذف القديم
imagelist
باستخدامkubectl delete
الأمر .kubectl delete ImageList imagelist
إنشاء جديد
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
إنشاء قائمة استبعاد معرفة من قبل المستخدم
إنشاء نموذج ملف JSON لاحتواء الصور المستبعدة.
cat > sample.json <<EOF {"excluded": ["excluded-image-name"]} EOF
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
يتم حذفها.
تأكد من تمكين Azure Monitoring على مجموعتك. للحصول على خطوات مفصلة، راجع تمكين نتائج تحليلات الحاوية على مجموعات AKS.
لا يتم تجميع سجلات الحاويات التي تعمل في
kube-system
مساحة الاسم بشكل افتراضي.kube-system
إزالة مساحة الاسم منexclude_namespaces
في configmap وتطبيق خريطة التكوين لتمكين مجموعة من هذه السجلات. راجع تكوين جمع بيانات نتائج تحليلات الحاوية للحصول على التفاصيل.احصل على معرف مورد 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 } }
في مدخل Microsoft Azure، ابحث عن معرف مورد مساحة العمل، ثم حدد Logs.
انسخ أحد الاستعلامات التالية والصقها في نافذة الاستعلام.
استخدم الاستعلام التالي إذا كان نظام المجموعة الخاص بك يستخدم مخطط ContainerLogV2. إذا كنت لا تزال تستخدم
ContainerLog
، يجب الترقية إلى ContainerlogV2.ContainerLogV2 | where PodName startswith "eraser-aks-" and PodNamespace == "kube-system" | project TimeGenerated, PodName, LogMessage, LogSource
إذا كنت تريد الاستمرار في استخدام
ContainerLog
، فاستخدم الاستعلام التالي بدلا من ذلك: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
حدد تشغيل. تظهر أي سجلات صور محذوفة في منطقة النتائج .
Azure Kubernetes Service