Pod Sandboxing (معاينة) مع خدمة Azure Kubernetes (AKS)
للمساعدة في تأمين أحمال عمل الحاوية وحمايتها من التعليمات البرمجية غير الموثوق بها أو التي يحتمل أن تكون ضارة، تتضمن AKS الآن آلية تسمى Pod Sandboxing (معاينة). يوفر Pod Sandboxing حد عزل بين تطبيق الحاوية، والنواة المشتركة وموارد الحساب لمضيف الحاوية. على سبيل المثال وحدة المعالجة المركزية والذاكرة والشبكات. تكمل Pod Sandboxing إجراءات الأمان الأخرى أو عناصر التحكم في حماية البيانات بالهيكل العام لمساعدتك على تلبية متطلبات الامتثال التنظيمية أو الصناعية أو الحوكمية لتأمين المعلومات الحساسة.
تساعدك هذه المقالة على فهم هذه الميزة الجديدة وكيفية تنفيذها.
المتطلبات الأساسية
الإصدار 2.44.1 من Azure CLI أو أحدث. قم بتشغيل
az --version
للعثور على الإصدار، ثم قم بتشغيلaz upgrade
لترقية الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.aks-preview
إصدار ملحق Azure CLI 0.5.123 أو أحدث.تسجيل الميزة
KataVMIsolationPreview
في اشتراك Azure الخاص بك.يدعم AKS Pod Sandboxing (معاينة) على الإصدار 1.24.0 والإصدارات الأحدث مع جميع المكونات الإضافية لشبكة AKS.
لإدارة مجموعة Kubernetes، استخدم عميل سطر أوامر Kubernetes kubectl. يأتي Azure Cloud Shell مع
kubectl
. يمكنك تثبيت kubectl محليا باستخدام الأمر az aks install-cli .
تثبيت ملحق aks-preview Azure CLI
هام
تتوفر ميزات معاينة AKS على أساس الخدمة الذاتية والاشتراك. يتم توفير المعاينات "كما هي" و"كما هي متوفرة"، ويتم استبعادها من اتفاقيات مستوى الخدمة والضمان المحدود. تتم تغطية معاينات AKS جزئيًا بواسطة دعم العملاء على أساس بذل أفضل الجهود. على هذا النحو، هذه الميزات ليست مخصصة للاستخدام الإنتاجي. لمزيد من المعلومات، يُرجي الاطلاع على مقالات الدعم الآتية:
لتثبيت ملحق aks-preview، قم بتشغيل الأمر التالي:
az extension add --name aks-preview
قم بتشغيل الأمر التالي للتحديث إلى أحدث إصدار من الملحق الذي تم إصداره:
az extension update --name aks-preview
تسجيل علامة ميزة KataVMIsolationPreview
قم بتسجيلKataVMIsolationPreview
ميزة الإشارة باستخدامتسجيل ميزة az كما هو موضح في المثال التالي:
az feature register --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"
يستغرق الأمر بضع دقائق حتى تظهر الحالة مُسجل. تحقق من حالة التسجيل باستخدام الأمر az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"
عندما تعكس الحالة Registered، قم بتحديث تسجيل موفر موارد Microsoft.ContainerService باستخدام الأمر az provider register:
az provider register --namespace "Microsoft.ContainerService"
القيود
فيما يلي قيود مع هذه المعاينة ل Pod Sandboxing (معاينة):
قد لا تصل حاويات Kata إلى حدود أداء IOPS التي يمكن أن تصل إليها الحاويات التقليدية على Azure Files وSSD المحلي عالي الأداء.
لا يدعم Microsoft Defender for Containers تقييم حاويات وقت تشغيل Kata.
شبكة مضيف Kata غير مدعومة.
لا يدعم AKS برامج تشغيل واجهة تخزين الحاويات وبرنامج تشغيل Secrets Store CSI في إصدار المعاينة هذا.
طريقة العمل
لتحقيق هذه الوظيفة على AKS، توفر حاويات Kata التي تعمل على مضيف حاوية Azure Linux لمكدس AKS عزلا مفروضا من الأجهزة. Pod Sandboxing يوسع فوائد عزل الأجهزة مثل نواة منفصلة لكل حاوية Kata. يخصص عزل الأجهزة موارد لكل جراب ولا يشاركها مع حاويات Kata الأخرى أو حاويات مساحة الاسم التي تعمل على نفس المضيف.
تستند بنية الحل إلى المكونات التالية:
- مضيف حاوية Azure Linux ل AKS
- Microsoft Hyper-V Hypervisor
- Azure-tuned Dom0 Linux Kernel
- Cloud-Hypervisor Virtual Machine Monitor (VMM) مفتوح المصدر
- التكامل مع إطار عمل حاوية Kata
يشبه نشر Pod Sandboxing باستخدام حاويات Kata سير العمل القياسي الحاوية لنشر الحاويات. يتضمن النشر خيارات وقت تشغيل kata التي يمكنك تعريفها في قالب pod.
لاستخدام هذه الميزة مع جراب، الفرق الوحيد هو إضافة runtimeClassName kata-mshv-vm-isolation إلى مواصفات الجراب.
عندما يستخدم جراب kata-mshv-vm-isolation runtimeClass، فإنه ينشئ جهازا ظاهريا ليكون بمثابة بيئة الاختبار المعزولة للحاويات لاستضافة الحاويات. الذاكرة الافتراضية للجهاز الظاهري هي 2 غيغابايت، والمعالج الافتراضي هو ذاكرة أساسية واحدة إذا لم يحدد بيان مورد الحاوية (containers[].resources.limits
) حدا لوحدة المعالجة المركزية والذاكرة. عند تحديد حد لوحدة المعالجة المركزية أو الذاكرة في بيان مورد الحاوية، يحتوي containers[].resources.limits.cpu
الجهاز الظاهري مع 1
الوسيطة لاستخدام واحد + xCPU، ومع containers[].resources.limits.memory
الوسيطة 2
لتحديد 2 غيغابايت + yMemory. يمكن للحاويات استخدام وحدة المعالجة المركزية والذاكرة فقط إلى حدود الحاويات. containers[].resources.requests
يتم تجاهل في هذه المعاينة بينما نعمل على تقليل حمل وحدة المعالجة المركزية والذاكرة.
نشر نظام مجموعة جديد
نفذ الخطوات التالية لنشر نظام مجموعة Azure Linux AKS باستخدام Azure CLI.
إنشاء نظام مجموعة AKS باستخدام الأمر az aks create وتحديد المعلمات التالية:
- --workload-runtime: حدد KataMshvVmIsolation لتمكين ميزة Pod Sandboxing على تجمع العقدة. مع هذه المعلمة، يجب أن تفي هذه المعلمات الأخرى بالمتطلبات التالية. وإلا، يفشل الأمر ويبلغ عن مشكلة في المعلمة (المعلمات) المقابلة.
- --os-sku: AzureLinux. يدعم Azure Linux os-sku فقط هذه الميزة في إصدار المعاينة هذا.
- --node-vm-size: أي حجم Azure VM هو الجيل 2 VM ويدعم أعمال الظاهرية المتداخلة. على سبيل المثال، Dsv3 VMs.
ينشئ المثال التالي مجموعة تسمى myAKSCluster مع عقدة واحدة في myResourceGroup:
az aks create --name myAKSCluster \ --resource-group myResourceGroup \ --os-sku AzureLinux \ --workload-runtime KataMshvVmIsolation \ --node-vm-size Standard_D4s_v3 \ --node-count 1 \ --generate-ssh-keys
قم بتشغيل الأمر التالي للحصول على بيانات اعتماد الوصول لمجموعة Kubernetes. استخدم الأمر az aks get-credentials واستبدل قيم اسم نظام المجموعة واسم مجموعة الموارد.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
سرد كافة Pods في جميع مساحات الأسماء باستخدام الأمر kubectl get pods .
kubectl get pods --all-namespaces
التوزيع إلى نظام مجموعة موجود
لاستخدام هذه الميزة مع نظام مجموعة AKS موجود، يجب استيفاء المتطلبات التالية:
- اتبع الخطوات لتسجيل علامة ميزة KataVMIsolationPreview .
- تحقق من تشغيل نظام المجموعة للإصدار 1.24.0 من Kubernetes والإصدارات الأحدث.
استخدم الأمر التالي لتمكين Pod Sandboxing (معاينة) عن طريق إنشاء تجمع عقدة لمضيفه.
أضف تجمع عقدة إلى نظام مجموعة AKS باستخدام الأمر az aks nodepool add . حدد المعلمات التالية:
- --resource-group: أدخل اسم مجموعة موارد موجودة لإنشاء نظام مجموعة AKS فيها.
- --cluster-name: أدخل اسما فريدا لمجموعة AKS، مثل myAKSCluster.
- --name: أدخل اسما فريدا لتجمع عقدة المجموعات، مثل nodepool2.
- --workload-runtime: حدد KataMshvVmIsolation لتمكين ميزة Pod Sandboxing على تجمع العقدة. جنبا إلى جنب مع المعلمة
--workload-runtime
، يجب أن تفي هذه المعلمات الأخرى بالمتطلبات التالية. وإلا، يفشل الأمر ويبلغ عن مشكلة في المعلمة (المعلمات) المقابلة.- --os-sku: AzureLinux. يدعم Azure Linux os-sku فقط هذه الميزة في إصدار المعاينة.
- --node-vm-size: أي حجم Azure VM هو الجيل 2 VM ويدعم أعمال الظاهرية المتداخلة. على سبيل المثال، Dsv3 VMs.
يضيف المثال التالي تجمع عقدة إلى myAKSCluster مع عقدة واحدة في nodepool2 في myResourceGroup:
az aks nodepool add --cluster-name myAKSCluster --resource-group myResourceGroup --name nodepool2 --os-sku AzureLinux --workload-runtime KataMshvVmIsolation --node-vm-size Standard_D4s_v3
قم بتشغيل الأمر az aks update لتمكين بيئة الاختبار المعزولة للجراب (معاينة) على نظام المجموعة.
az aks update --name myAKSCluster --resource-group myResourceGroup
نشر تطبيق موثوق به
لإظهار نشر تطبيق موثوق به على النواة المشتركة في نظام مجموعة AKS، قم بتنفيذ الخطوات التالية.
أنشئ ملفا باسم trusted-app.yaml لوصف جراب موثوق به، ثم الصق البيان التالي.
kind: Pod apiVersion: v1 metadata: name: trusted spec: containers: - name: trusted image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
انشر جراب Kubernetes عن طريق تشغيل الأمر kubectl apply وحدد ملف trusted-app.yaml الخاص بك:
kubectl apply -f trusted-app.yaml
إخراج الأمر يشبه المثال التالي:
pod/trusted created
نشر تطبيق غير موثوق به
لإثبات نشر تطبيق غير موثوق به في بيئة الاختبار المعزولة للجراب على نظام مجموعة AKS، قم بتنفيذ الخطوات التالية.
أنشئ ملفا باسم untrusted-app.yaml لوصف جراب غير موثوق به، ثم الصق البيان التالي.
kind: Pod apiVersion: v1 metadata: name: untrusted spec: runtimeClassName: kata-mshv-vm-isolation containers: - name: untrusted image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
قيمة runtimeClassNameSpec هي
kata-mhsv-vm-isolation
.انشر جراب Kubernetes عن طريق تشغيل الأمر kubectl apply وحدد ملف untrusted-app.yaml الخاص بك:
kubectl apply -f untrusted-app.yaml
إخراج الأمر يشبه المثال التالي:
pod/untrusted created
التحقق من تكوين عزل Kernel
للوصول إلى حاوية داخل نظام مجموعة AKS، ابدأ جلسة shell عن طريق تشغيل الأمر kubectl exec . في هذا المثال، تقوم بالوصول إلى الحاوية داخل الحاوية غير الموثوق بها .
kubectl exec -it untrusted -- /bin/bash
يتصل Kubectl بالمجموعة الخاصة بك، ويعمل
/bin/sh
داخل الحاوية الأولى داخل الحاوية غير الموثوق بها ، وإعادة توجيه تدفقات الإدخال والإخراج الخاصة بالمحطة الطرفية إلى عملية الحاوية. يمكنك أيضا بدء جلسة عمل shell إلى الحاوية التي تستضيف الجراب الموثوق به .بعد بدء جلسة عمل shell إلى حاوية pod غير الموثوق بها ، يمكنك تشغيل الأوامر للتحقق من تشغيل الحاوية غير الموثوق بها في بيئة الاختبار المعزولة للحاوية. ستلاحظ أنه يحتوي على إصدار نواة مختلف مقارنة بالحاوية الموثوق بها خارج بيئة الاختبار المعزولة.
لمشاهدة إصدار kernel، قم بتشغيل الأمر التالي:
uname -r
يشبه المثال التالي الإخراج من نواة بيئة الاختبار المعزولة للجراب:
root@untrusted:/# uname -r 5.15.48.1-8.cm2
ابدأ جلسة عمل shell إلى حاوية الحاوية الموثوق بها للتحقق من إخراج kernel:
kubectl exec -it trusted -- /bin/bash
لمشاهدة إصدار kernel، قم بتشغيل الأمر التالي:
uname -r
يشبه المثال التالي الإخراج من الجهاز الظاهري الذي يقوم بتشغيل الجراب الموثوق به ، وهو نواة مختلفة عن الجراب غير الموثوق به الذي يعمل داخل بيئة الاختبار المعزولة للجراب:
5.15.80.mshv2-hvl1.m2
التنظيف
عند الانتهاء من تقييم هذه الميزة، لتجنب رسوم Azure، قم بتنظيف الموارد غير الضرورية. إذا قمت بنشر مجموعة جديدة كجزء من التقييم أو الاختبار، يمكنك حذف نظام المجموعة باستخدام الأمر az aks delete .
az aks delete --resource-group myResourceGroup --name myAKSCluster
إذا قمت بتمكين Pod Sandboxing (معاينة) على مجموعة موجودة، يمكنك إزالة pod(s) باستخدام الأمر kubectl delete pod .
kubectl delete pod pod-name
الخطوات التالية
تعرف على المزيد حول مضيفي Azure Dedicated للعقد مع نظام مجموعة AKS لاستخدام عزل الأجهزة والتحكم في أحداث صيانة النظام الأساسي ل Azure.
Azure Kubernetes Service