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 (معاينة):

كيفية عمله

لتحقيق هذه الوظيفة على AKS، توفر حاويات Kata التي تعمل على مضيف حاوية Azure Linux لمكدس AKS عزلا مفروضا من الأجهزة. Pod Sandboxing يوسع فوائد عزل الأجهزة مثل نواة منفصلة لكل حاوية Kata. يخصص عزل الأجهزة موارد لكل جراب ولا يشاركها مع حاويات Kata الأخرى أو حاويات مساحة الاسم التي تعمل على نفس المضيف.

تستند بنية الحل إلى المكونات التالية:

يشبه نشر Pod Sandboxing باستخدام حاويات Kata سير العمل القياسي الحاوية لنشر الحاويات. يتضمن النشر خيارات وقت تشغيل kata التي يمكنك تعريفها في قالب pod.

لاستخدام هذه الميزة مع جراب، الفرق الوحيد هو إضافة runtimeClassNamekata-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.

  1. إنشاء نظام مجموعة 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
    
  2. قم بتشغيل الأمر التالي للحصول على بيانات اعتماد الوصول لمجموعة Kubernetes. استخدم الأمر az aks get-credentials واستبدل قيم اسم نظام المجموعة واسم مجموعة الموارد.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. سرد كافة Pods في جميع مساحات الأسماء باستخدام الأمر kubectl get pods .

    kubectl get pods --all-namespaces
    

التوزيع إلى نظام مجموعة موجود

لاستخدام هذه الميزة مع نظام مجموعة AKS موجود، يجب استيفاء المتطلبات التالية:

استخدم الأمر التالي لتمكين Pod Sandboxing (معاينة) عن طريق إنشاء تجمع عقدة لمضيفه.

  1. أضف تجمع عقدة إلى نظام مجموعة 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
    
  2. قم بتشغيل الأمر az aks update لتمكين بيئة الاختبار المعزولة للجراب (معاينة) على نظام المجموعة.

    az aks update --name myAKSCluster --resource-group myResourceGroup
    

نشر تطبيق موثوق به

لإظهار نشر تطبيق موثوق به على النواة المشتركة في نظام مجموعة AKS، قم بتنفيذ الخطوات التالية.

  1. أنشئ ملفا باسم 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"]
    
  2. انشر جراب Kubernetes عن طريق تشغيل الأمر kubectl apply وحدد ملف trusted-app.yaml الخاص بك:

    kubectl apply -f trusted-app.yaml
    

    إخراج الأمر يشبه المثال التالي:

    pod/trusted created
    

نشر تطبيق غير موثوق به

لإثبات نشر تطبيق غير موثوق به في بيئة الاختبار المعزولة للجراب على نظام مجموعة AKS، قم بتنفيذ الخطوات التالية.

  1. أنشئ ملفا باسم 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.

  2. انشر جراب Kubernetes عن طريق تشغيل الأمر kubectl apply وحدد ملف untrusted-app.yaml الخاص بك:

    kubectl apply -f untrusted-app.yaml
    

    إخراج الأمر يشبه المثال التالي:

    pod/untrusted created
    

التحقق من تكوين عزل Kernel

  1. للوصول إلى حاوية داخل نظام مجموعة AKS، ابدأ جلسة shell عن طريق تشغيل الأمر kubectl exec . في هذا المثال، تقوم بالوصول إلى الحاوية داخل الحاوية غير الموثوق بها .

    kubectl exec -it untrusted -- /bin/bash
    

    يتصل Kubectl بالمجموعة الخاصة بك، ويعمل /bin/sh داخل الحاوية الأولى داخل الحاوية غير الموثوق بها ، وإعادة توجيه تدفقات الإدخال والإخراج الخاصة بالمحطة الطرفية إلى عملية الحاوية. يمكنك أيضا بدء جلسة عمل shell إلى الحاوية التي تستضيف الجراب الموثوق به .

  2. بعد بدء جلسة عمل shell إلى حاوية pod غير الموثوق بها ، يمكنك تشغيل الأوامر للتحقق من تشغيل الحاوية غير الموثوق بها في بيئة الاختبار المعزولة للحاوية. ستلاحظ أنه يحتوي على إصدار نواة مختلف مقارنة بالحاوية الموثوق بها خارج بيئة الاختبار المعزولة.

    لمشاهدة إصدار kernel، قم بتشغيل الأمر التالي:

    uname -r
    

    يشبه المثال التالي الإخراج من نواة بيئة الاختبار المعزولة للجراب:

    root@untrusted:/# uname -r
    5.15.48.1-8.cm2
    
  3. ابدأ جلسة عمل 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.