تطبيق ترقيات الأمان التلقائية على عقد Azure Kubernetes Service (AKS) باستخدام GitHub Actions
تعد تحديثات الأمان جزءًا أساسيًّا من الحفاظ على أمان نظام مجموعة AKS الخاصة بك والتوافق مع أحدث الإصلاحات لنظام التشغيل الأساسي. تتضمن هذه التحديثات إصلاحات أمان نظام التشغيل أو تحديثات النواة. تتطلب بعض التحديثات إعادة تشغيل عقدة ما لإكمال العملية.
توضح هذه المقالة كيف يمكنك أتمتة عملية تحديث عقد AKS باستخدام GitHub Actions وAzure CLI لإنشاء مهمة تحديث استنادا cron
إلى تلك التي تعمل تلقائيا.
إشعار
يمكنك أيضا إجراء ترقيات صورة العقدة تلقائيا وجدولة هذه الترقيات باستخدام الصيانة المخطط لها. لمزيد من المعلومات، راجع ترقية صور العقدة تلقائيا.
قبل البدء
- تفترض هذه المقالة أن لديك مجموعة AKS موجودة. إذا كنت بحاجة إلى نظام مجموعة AKS، قم بإنشاء مجموعة باستخدام Azure CLI أو Azure PowerShell أو مدخل Microsoft Azure.
- تفترض هذه المقالة أيضا أن لديك حساب GitHub ومستودع ملف تعريف لاستضافة إجراءاتك. إذا لم يكن لديك مستودع، فبادر بإنشاء مستودع بنفس اسم مستخدم GitHub الخاص بك.
- تحتاج إلى تثبيت الإصدار 2.0.59 من Azure CLI أو إصدار أحدث وتكوينه. قم بتشغيل
az --version
للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.
تحديث العقد باستخدام az aks upgrade
az aks upgrade
يمنحك الأمر طريقة صفر للتعطل لتطبيق التحديثات. ينفذ الأمر الإجراءات التالية:
- تطبيق آخر التحديثات على جميع عقد نظام المجموعة.
- التطويق (يجعل العقدة غير متوفرة لجدولة أحمال العمل الجديدة) ويصرف (ينقل أحمال العمل الموجودة إلى عقدة أخرى) حركة المرور إلى العقد.
- إعادة تشغيل العقد.
- تمكين العقد المحدثة من تلقي نسبة استخدام الشبكة مرة أخرى.
لا تعيد AKS تشغيل العقد تلقائيا إذا قمت بتحديثها باستخدام أسلوب مختلف.
إشعار
يعمل التشغيل az aks upgrade
مع العلامة --node-image-only
فقط على ترقية صور العقدة. يؤدي تشغيل الأمر بدون العلامة إلى ترقية كل من صور العقدة وإصدار وحدة التحكم Kubernetes. لمزيد من المعلومات، راجع مستندات الترقيات المدارة على العقد ومستندات ترقيات نظام المجموعة.
تعمل جميع عقد Kubernetes في جهاز ظاهري Azure (VM) يستند إلى Windows أو Linux. تستخدم الأجهزة الظاهرية المستندة إلى Linux صورة Ubuntu مع نظام التشغيل الذي تم تكوينه للتحقق تلقائيا من وجود تحديثات كل ليلة.
عند استخدام az aks upgrade
الأمر ، ينشئ Azure CLI زيادة في العقد الجديدة بأحدث تحديثات الأمان والنواة. يتم تطويق هذه العقد الجديدة في البداية لمنع جدولة أي تطبيقات إليها حتى يكتمل التحديث. بعد اكتمال التحديث، يطوق Azure العقد القديمة ويستنزفها ويفك تسجيل العقد الجديدة، وينقل جميع التطبيقات المجدولة إلى العقد الجديدة.
هذه العملية أفضل من تحديث نواة نظام Linux يدويًّا لأن Linux يتطلب إعادة تشغيل عند تثبيت تحديث نواة جديد. إذا قمت بتحديث نظام التشغيل يدويًّا، تحتاج أيضًا إلى إعادة تشغيل الجهاز الظاهري، وتطويق جميع التطبيقات وتصريفها يدويًّا.
إنشاء إجراء GitHub موقوت
cron
هي أداة مساعدة تسمح لك بتشغيل مجموعة من الأوامر أو المهام، على جدول تلقائي. لإنشاء وظيفة لتحديث عقد AKS الخاصة بك على جدول تلقائي، تحتاج إلى مستودع لاستضافة إجراءاتك. عادة ما يتم تكوين إجراءات GitHub في نفس المستودع مثل التطبيق الخاص بك، ولكن يمكنك استخدام أي مستودع.
انتقل إلى المستودع الخاص بك على GitHub.
حدد الإجراءات.
حدد سير عمل>جديد إعداد سير عمل بنفسك.
إنشاء إجراء GitHub يسمى ترقية صور عقدة نظام المجموعة مع مشغل جدول زمني للتشغيل كل 15 يوما في الساعة 3 صباحا. انسخ التعليمات البرمجية التالية في YAML:
name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *'
إنشاء مهمة تسمى upgrade-node التي تعمل على عامل Ubuntu وتتصل بحساب Azure CLI لتنفيذ أمر ترقية العقدة. انسخ التعليمات البرمجية التالية في YAML تحت
on
المفتاح :jobs: upgrade-node: runs-on: ubuntu-latest
إعداد Azure CLI في سير العمل
في شريط Search Marketplace for Actions ، ابحث عن Azure Login.
حدد تسجيل الدخول إلى Azure.
ضمن Installation، حدد إصدارا، مثل v1.4.6، وانسخ قصاصة التعليمات البرمجية للتثبيت.
steps
أضف المفتاح والمعلومات التالية من قصاصة التعليمات البرمجية للتثبيت إلى YAML:name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' jobs: upgrade-node: runs-on: ubuntu-latest steps: - name: Azure Login uses: Azure/login@v1.4.6 with: creds: ${{ secrets.AZURE_CREDENTIALS }}
إنشاء بيانات اعتماد ل Azure CLI
في نافذة متصفح جديدة، قم بإنشاء كيان خدمة جديد باستخدام
az ad sp create-for-rbac
الأمر . تأكد من استبدال*{subscriptionID}*
بمعرف الاشتراك الخاص بك.إشعار
ينشئ
Contributor
هذا المثال الدور في نطاق الاشتراك . يمكنك توفير الدور والنطاق الذي يلبي احتياجاتك. لمزيد من المعلومات، راجع أدوار Azure المضمنة ومستويات نطاق Azure RBAC.az ad sp create-for-rbac --role Contributor --scopes /subscriptions/{subscriptionID} -o json
يجب أن يكون الإخراج مشابها لإخراج المثال التالي:
{ "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "displayName": "xxxxx-xxx-xxxx-xx-xx-xx-xx-xx", "password": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx", "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
انسخ الإخراج وانتقل إلى مستودع GitHub الخاص بك.
حدد Settings>Secrets and variables>Actions>New repository secret.
لـ الاسم، أدخل
AZURE_CREDENTIALS
.بالنسبة إلى البيانات السرية، انسخ محتويات الإخراج الذي تلقيته عند إنشاء كيان الخدمة.
حدد إضافة سر.
إنشاء الخطوات لتنفيذ أوامر Azure CLI
انتقل إلى نافذتك باستخدام YAML لسير العمل.
في شريط Search Marketplace for Actions ، ابحث عن إجراء Azure CLI.
حدد إجراء Azure CLI.
ضمن Installation، حدد إصدارا، مثل v1.0.8، وانسخ قصاصة التعليمات البرمجية للتثبيت.
الصق محتويات الإجراء في YAML أسفل
*Azure Login*
الخطوة، على غرار المثال التالي:name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' jobs: upgrade-node: runs-on: ubuntu-latest steps: - name: Azure Login uses: Azure/login@v1.4.6 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Upgrade node images uses: Azure/cli@v1.0.8 with: inlineScript: az aks upgrade --resource-group <resourceGroupName> --name <aksClusterName> --node-image-only --yes
تلميح
يمكنك فصل
--resource-group
المعلمات و--name
عن الأمر عن طريق إنشاء أسرار مستودع جديدة كما فعلت لAZURE_CREDENTIALS
.إذا قمت بإنشاء أسرار لهذه المعلمات، تحتاج إلى استبدال العناصر النائبة
<resourceGroupName>
و<aksClusterName>
بنظيرتها السرية. على سبيل المثال،${{secrets.RESOURCE_GROUP_NAME}}
و${{secrets.AKS_CLUSTER_NAME}}
أعد تسمية YAML إلى
upgrade-node-images.yml
.حدد Commit changes...، وأضف رسالة تثبيت، ثم حدد Commit changes.
تشغيل إجراء GitHub يدويًّا
يمكنك تشغيل سير العمل يدويا بالإضافة إلى التشغيل المجدول عن طريق إضافة مشغل جديد on
يسمى workflow_dispatch
.
إشعار
إذا كنت ترغب في ترقية تجمع عقدة واحدة بدلا من كافة تجمعات العقد على نظام المجموعة، أضف المعلمة --name
az aks nodepool upgrade
إلى الأمر لتحديد اسم تجمع العقدة. على سبيل المثال:
az aks nodepool upgrade --resource-group <resourceGroupName> --cluster-name <aksClusterName> --name <nodePoolName> --node-image-only
أضف المشغل
workflow_dispatch
أسفلon
المفتاح:name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' workflow_dispatch:
يجب أن يبدو YAML مشابها للمثال التالي:
name: Upgrade cluster node images on: schedule: - cron: '0 3 */15 * *' workflow_dispatch: jobs: upgrade-node: runs-on: ubuntu-latest steps: - name: Azure Login uses: Azure/login@v1.4.6 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Upgrade node images uses: Azure/cli@v1.0.8 with: inlineScript: az aks upgrade -g {resourceGroupName} -n {aksClusterName} --node-image-only --yes # Code for upgrading one or more node pools
الخطوات التالية
لمزيد من المعلومات حول ترقيات AKS، راجع المقالات والموارد التالية:
للحصول على مناقشة مفصلة حول أفضل ممارسات الترقية والاعتبارات الأخرى، راجع تصحيح AKS وإرشادات الترقية.
Azure Kubernetes Service