استخدام ضمانات التوزيع لفرض أفضل الممارسات في خدمة Azure Kubernetes (AKS) (معاينة)

توضح هذه المقالة كيفية استخدام ضمانات التوزيع لفرض أفضل الممارسات على نظام مجموعة Azure Kubernetes Service (AKS).

نظرة عامة

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

توفر ضمانات التوزيع مستويين من التكوين:

  • Warning: يعرض رسائل تحذير في المحطة الطرفية للتعليمات البرمجية لتنبيهك بأي تكوينات نظام مجموعة غير متوافقة ولكنه لا يزال يسمح للطلب بالمرور.
  • Enforcement: يفرض التكوينات المتوافقة عن طريق رفض عمليات النشر وتحورها إذا لم تتبع أفضل الممارسات.

بعد تكوين ضمانات التوزيع ل "تحذير" أو "إنفاذ"، تقوم حماية التوزيع بتقييم مجموعاتك برمجيا عند الإنشاء أو تحديث وقت التوافق. تعرض ضمانات التوزيع أيضا معلومات التوافق المجمعة عبر أحمال العمل الخاصة بك على مستوى كل مورد عبر لوحة معلومات التوافق الخاصة بنهج Azure في مدخل Microsoft Azure أو في CLI أو المحطة الطرفية. يشير تشغيل حمل عمل غير متوافق إلى أن نظام المجموعة لا يتبع أفضل الممارسات وأن أحمال العمل على نظام المجموعة الخاصة بك معرضة لخطر مواجهة المشكلات الناجمة عن تكوين نظام المجموعة الخاص بك.

هام

تتوفر ميزات معاينة AKS على أساس الخدمة الذاتية والاشتراك. يتم توفير المعاينات "كما هي" و"كما هي متوفرة"، ويتم استبعادها من اتفاقيات مستوى الخدمة والضمان المحدود. تتم تغطية معاينات AKS جزئيًا بواسطة دعم العملاء على أساس بذل أفضل الجهود. على هذا النحو، هذه الميزات ليست مخصصة للاستخدام الإنتاجي. لمزيد من المعلومات، يُرجي الاطلاع على مقالات الدعم الآتية:

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

  • تحتاج إلى تمكين الوظيفة الإضافية لنهج Azure ل AKS. لمزيد من المعلومات، راجع تمكين نهج Azure على نظام مجموعة AKS.

  • لتكوين ضمانات التوزيع، يجب أن يكون لديك إصدار 2.0.0b1 أو أحدث من الملحق aks-preview . لتثبيت الملحق، راجع تثبيت ملحق aks-preview CLI. نوصي أيضا بتحديث Azure CLI للتأكد من تثبيت أحدث إصدار.

  • لإنشاء وتعديل التكوين لضمانات التوزيع، تحتاج إلى اشتراك مع الأذونات التالية على نظام مجموعة AKS الخاص بك:

    • Microsoft.Authorization/policyAssignments/write
    • Microsoft.Authorization/policyAssignments/read
  • تحتاج إلى تسجيل علامة ميزة حماية التوزيع. لتسجيل علامة الميزة، راجع تسجيل علامة الميزة لضمانات التوزيع.

تثبيت ملحق aks-preview لواجهة سطر الأوامر

  1. aks-preview تثبيت ملحق CLI باستخدام az extension add الأمر .

    az extension add --name aks-preview
    
  2. قم بتحديث الملحق للتأكد من تثبيت أحدث إصدار باستخدام az extension update الأمر .

    az extension update --name aks-preview
    

تسجيل علامة ميزة ضمانات التوزيع

  1. تسجيل علامة الميزة SafeguardsPreview باستخدام az feature register الأمر .

    az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
    

    يستغرق الأمر بضع دقائق حتى تظهر الحالة مُسجل.

  2. تحقق من حالة التسجيل باستخدام az feature show الأمر .

    az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
    
  3. عندما تعكس الحالة Registered، قم بتحديث تسجيل موفر موارد Microsoft.ContainerService باستخدام az provider register الأمر .

    az provider register --namespace Microsoft.ContainerService
    

نهج حماية التوزيع

إشعار

ReadOnlyRootFilesystem النهج و RootfilesystemInitContainers متاحة حاليا فقط على Linux.

يسرد الجدول التالي النهج التي تصبح نشطة وموارد Kubernetes التي تستهدفها عند تمكين ضمانات التوزيع. يمكنك عرض ضمانات النشر المتوفرة حاليا في مدخل Microsoft Azure كتعريف نهج Azure أو في تعريفات نهج Azure المضمنة لخدمة Azure Kubernetes. الهدف من وراء هذه المجموعة هو إنشاء قائمة شائعة وعامة بأفضل الممارسات المطبقة على معظم المستخدمين وحالات الاستخدام.

نهج حماية التوزيع مورد Kubernetes المستهدف نتيجة الطفرة إذا كانت متوفرة
[معاينة]: لا يمكن تحرير العقد الفردية العقدة ‏‫غير متوفر‬
يجب ألا تتجاوز حاويات نظام مجموعة Kubernetes وحدة المعالجة المركزية وحدود موارد الذاكرة الحدود المحددة وحدة تعيين حدود موارد وحدة المعالجة المركزية إلى 500m إذا لم يتم تعيينها وتعيين حدود الذاكرة إلى 500Mi إذا لم يكن هناك مسار
[معاينة]: يجب أن يكون لديك مجموعة قواعد عدم الترابط التوزيع، StatefulSet، ReplicationController، ReplicaSet ‏‫غير متوفر‬
[معاينة]: لا توجد تسميات محددة ل AKS التوزيع، StatefulSet، مجموعة النسخ المتماثلة ‏‫غير متوفر‬
يجب أن تستخدم حاويات المجموعة Kubernetes الصور المسموح بها فقط وحدة ‏‫غير متوفر‬
[معاينة]: تصبغات تجمع النظام المحجوزة العقدة إزالة الصبغة CriticalAddonsOnly من تجمع عقدة مستخدم إذا لم يتم تعيينها. تستخدم AKS الصبغة CriticalAddonsOnly للحفاظ على الحاويات العميلة بعيدا عن تجمع النظام. يضمن هذا التكوين فصلا واضحا بين مكونات AKS وحجيرات العملاء ويمنع إخلاء جرابات العملاء التي لا تتسامح مع الصبغة CriticalAddonsOnly .
تأكد من أن حاويات نظام مجموعة بها مجسات استعداد أو حيوية تم تكوينها وحدة ‏‫غير متوفر‬
يجب أن تستخدم مجموعات Kubernetes برنامج تشغيل Container Storage Interface (CSI) StorageClass فئة التخزين ‏‫غير متوفر‬
[معاينة]: يجب أن تسحب حاويات نظام مجموعة Kubernetes الصور فقط عند وجود أسرار سحب الصور وحدة ‏‫غير متوفر‬
[معاينة]: يجب أن تنفذ مجموعة Kubernetes ميزانيات دقيقة لتعطل الجراب النشر، مجموعة النسخ المتماثلة، StatefulSet يعين maxUnavailable في مورد PodDisruptionBudget إلى 1.
[معاينة]: يجب أن تستخدم خدمات نظام مجموعة Kubernetes محددات فريدة الخدمة ‏‫غير متوفر‬
[معاينة]: ReadOnlyRootFilesystem في مواصفات الجراب يتم تعيين إلى صحيح وحدة يعين readOnlyRootFilesystem في مواصفات Pod إلى true إذا لم يتم تعيينه. يمنع هذا التكوين الحاويات من الكتابة إلى نظام ملفات الجذر.
[معاينة]: RootfilesystemInitContainers في مواصفات الجراب يتم تعيين إلى صحيح وحدة يعين rootFilesystemInitContainers في مواصفات Pod إلى true إذا لم يتم تعيينه.
[معاينة]: يجب ألا تتضمن صور حاوية نظام مجموعة Kubernetes أحدث علامة صورة التوزيع، StatefulSet، ReplicationController، ReplicaSet ‏‫غير متوفر‬
[معاينة]: يجب أن تتضمن صور حاوية مجموعة Kubernetes خطاف preStop التوزيع، StatefulSet، ReplicationController، ReplicaSet ‏‫غير متوفر‬

إذا كنت ترغب في إرسال فكرة أو طلب ضمانات النشر، فافتح مشكلة في مستودع AKS GitHub وأضف [deployment safeguards request] إلى بداية العنوان.

تمكين ضمانات التوزيع

إشعار

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

يعني استخدام مستوى ضمانات Enforcement التوزيع أنك تختار عمليات النشر التي يتم حظرها وتحورها. يرجى مراعاة كيفية عمل هذه النهج مع نظام مجموعة AKS قبل تمكين Enforcement.

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

تمكين ضمانات النشر على نظام مجموعة جديد باستخدام az aks create الأمر مع --safeguards-level علامات و --safeguards-version .

إذا كنت ترغب في تلقي تحذيرات بعدم التوافق، فقم بتعيين --safeguards-level إلى Warning. إذا كنت تريد رفض أو تغيير كافة عمليات النشر غير المتوافقة، فقم بتعيينها إلى Enforcement. لتلقي التحذيرات، قم بتعيين --safeguards-level إلى "تحذير". لرفض أو تغيير جميع عمليات التوزيع التي لا تلتزم بضمانات التوزيع، قم بتعيين --safeguards-level إلى "فرض". لتعيين إصدار حماية التوزيع، استخدم العلامة --safeguards-version . حاليا، الإصدار 2.0.0 هو أحدث إصدار من ضمانات التوزيع.

az aks create \
    --name myAKSCluster \
    --resource-group myResourceGroup \
    --enable-addons azure-policy \
    --safeguards-level Warning \
    --safeguards-version v2.0.0 \
    --generate-ssh-keys

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

تمكين ضمانات النشر على نظام مجموعة موجود تم تمكين الوظيفة الإضافية لنهج Azure باستخدام az aks update الأمر مع --safeguards-level علامات و --safeguards-version . إذا كنت ترغب في تلقي تحذيرات بعدم التوافق، فقم بتعيين --safeguards-level إلى Warning. إذا كنت تريد رفض أو تغيير كافة عمليات النشر غير المتوافقة، فقم بتعيينها إلى Enforcement.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement --safeguards-version v2.0.0

إذا كنت ترغب في تحديث مستوى ضمانات التوزيع لمجموعة موجودة، فاستخدم az aks update الأمر مع تعيين العلامة --safeguards-level إلى Warning أو Enforcement.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement

باستثناء مساحات الأسماء

يمكنك أيضا استبعاد مساحات أسماء معينة من ضمانات التوزيع. عند استبعاد مساحة اسم، لا يتأثر النشاط في مساحة الاسم هذه بتحذيرات حماية التوزيع أو الإنفاذ.

على سبيل المثال، لاستبعاد مساحات ns1 الأسماء و ns2، استخدم قائمة مفصولة بفواصل من مساحات الأسماء مع العلامة --safeguards-excluded-ns ، كما هو موضح في المثال التالي:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Warning --safeguards-version v2.0.0 --safeguards-excluded-ns ns1,ns2 

تحديث إصدار حماية التوزيع

إشعار

الإصدار 2.0.0 هو أحدث إصدار من ضمانات التوزيع.

قم بتحديث إصدار حماية التوزيع باستخدام az aks update الأمر مع تعيين العلامة --safeguards-version إلى الإصدار الجديد. يحدث المثال التالي مجموعة موجودة لاستخدام الإصدار 2.0.0:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-version v2.0.0

التحقق من التوافق عبر المجموعات

بعد نشر بيان Kubernetes، سترى تحذيرات أو رسالة رفض محتملة في CLI أو المحطة الطرفية إذا لم تكن المجموعة متوافقة مع ضمانات التوزيع، كما هو موضح في الأمثلة التالية:

التحذير

$ kubectl apply -f pod.yml
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
Warning: [azurepolicy-k8sazurev3containerlimits-a8754961dbd4c1d8b49d] container <my-container> has no resource limits
Warning: [azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
pod/my-pod created

انفاذ

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

$ kubectl apply -f pod.yml
Error from server (Forbidden): error when creating ".\pod.yml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerallowedimag-1ff6d14b2f8da22019d7] Container image my-image for container my-container has not been allowed.
[azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
[azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.

إذا كانت موارد Kubernetes الخاصة بك تتوافق مع ضمانات الطفرة المطبقة وتلبية جميع متطلبات الحماية الأخرى، نشرها بنجاح، كما هو موضح في المثال التالي:

$ kubectl apply -f pod.yml
pod/my-pod created

التحقق من التوافق عبر المجموعات باستخدام لوحة معلومات Azure Policy

للتحقق من تطبيق ضمانات التوزيع وللتحقق من توافق نظام المجموعة، انتقل إلى صفحة مدخل Azure لنظام المجموعة وحدد النهج، ثم حدد الانتقال إلى نهج Azure.

من قائمة النهج والمبادرات، حدد المبادرة المرتبطة بضمانات النشر. ترى لوحة معلومات تعرض حالة التوافق عبر نظام مجموعة AKS.

إشعار

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

تعطيل ضمانات التوزيع

تعطيل ضمانات التوزيع على نظام المجموعة باستخدام az aks update الأمر وتعيين --safeguards-level إلى Off.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Off

--

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

لقد قمت بتمكين ضمانات النشر باستخدام Azure Policy للمرة الأولى. لماذا لا أرى أي تحذيرات؟ لماذا لا يتم رفض القرون الخاصة بي؟

قد يستغرق Azure Policy ما يصل إلى 35 دقيقة للمزامنة مع نظام المجموعة بعد تمكينه للمرة الأولى.

لقد بدلت للتو من "تحذير" إلى "الإنفاذ" هل سيدخل هذا حيز التنفيذ على الفور؟

عند تبديل مستويات حماية التوزيع، قد تحتاج إلى الانتظار لمدة تصل إلى 15 دقيقة حتى يدخل المستوى الجديد حيز التنفيذ.

هل يمكنني إنشاء الطفرات الخاصة بي؟

‏‏لا. إذا كانت لديك فكرة عن الحماية، فافتح مشكلة في مستودع AKS GitHub وأضف [deployment safeguards request] إلى بداية العنوان.

هل يمكنني اختيار واختيار الطفرات التي أريدها في الإنفاذ؟

‏‏لا. ضمانات التوزيع كلها أو لا شيء. بمجرد تشغيل التحذير أو الإنفاذ، ستكون جميع الضمانات نشطة.

لماذا تم قبول مورد النشر الخاص بي على الرغم من أنه لم يكن يتبع أفضل الممارسات؟

تفرض ضمانات التوزيع معايير أفضل الممارسات من خلال عناصر تحكم Azure Policy ولها نهج تحقق من صحة موارد Kubernetes. لتقييم مكونات نظام المجموعة وفرضها، يقوم نهج Azure بتوسيع Gatekeeper. كما يعمل تطبيق Gatekeeper حاليا في نموذجfail-open. نظرا لعدم وجود ضمان بأن Gatekeeper سيستجيب لاستدعاء الشبكة لدينا، فإننا نتأكد من أنه في هذه الحالة، يتم تخطي التحقق من الصحة بحيث لا يمنع الرفض عمليات النشر الخاصة بك.

لمعرفة المزيد، راجع التحقق من صحة حمل العمل في Gatekeeper.

الخطوات التالية