مشاركة عبر


تطبيق ترقيات الأمان التلقائية على عقد 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 الأمر يعطيك طريقة بدون توقف لتطبيق التحديثات. يقوم الأمر بتنفيذ الإجراءات التالية:

  1. يطبق أحدث التحديثات على جميع عقد العنقود.
  2. القيود (تجعل العقدة غير متاحة لجدولة الأحمال الجديدة) وتحرك حركة المرور (تنقل الأحمال الموجودة إلى عقد أخرى) إلى العقد.
  3. تعيد تشغيل العقد.
  4. يتيح للعقد المحدثة استقبال حركة المرور مرة أخرى.

AKS لا يعيد تشغيل العقد تلقائيا إذا قمت بتحديثها بطريقة مختلفة.

إشعار

التشغيل az aks upgrade مع العلم --node-image-only يرفع فقط صور العقد. تشغيل الأمر بدون العلم يطور كل من صور العقد ونسخة مستوى التحكم في Kubernetes. لمزيد من المعلومات، راجع المستندات الخاصة بالترقيات المدارة على العقدوالمستندات الخاصة بترقيات العنقود.

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

عند استخدام الأمر az aks upgrade ، يقوم Azure CLI بإنشاء تدفق من العقد الجديدة مع أحدث تحديثات الأمان والنواة. يتم تقييد هذه العقد الجديدة في البداية لمنع جدولة أي تطبيقات لها حتى اكتمال التحديث. بعد اكتمال التحديث، يقوم Azure بإغلاق وتفريغ العقد القديمة وإلغاء العقد الجديدة، وينقل جميع التطبيقات المجدولة إلى العقد الجديدة.

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

إنشاء إجراء مؤقت على GitHub

cron هي أداة تتيح لك تشغيل مجموعة من الأوامر، أو الوظائف، وفق جدول آلي. لإنشاء مهمة لتحديث عقد AKS الخاصة بك على جدول آلي، تحتاج إلى مستودع لاستضافة إجراءاتك. عادة ما يتم تكوين عمليات GitHub في نفس المستودع الذي تنظمه تطبيقك، لكن يمكنك استخدام أي مستودع.

  1. انتقل إلى مستودعك على GitHub.

  2. حدد الإجراءات.

  3. اختر سير عمل> جديدوقم بإعداد سير عمل بنفسك.

  4. أنشئ إجراء على GitHub باسم Upgrade cluster node صور مع جدول زمني ينفذ كل 15 يوما الساعة 3 صباحا. انسخ الرمز التالي إلى YAML:

    name: Upgrade cluster node images
    on:
      schedule:
        - cron: '0 3 */15 * *'
    
  5. أنشئ مهمة باسم upgrade-node تعمل على وكيل أوبونتو وتتصل بحساب Azure CLI الخاص بك لتنفيذ أمر ترقية العقدة. انسخ الرمز التالي إلى YAML تحت المفتاح on :

    jobs:
      upgrade-node:
        runs-on: ubuntu-latest
    

إعداد واجهة زر زر Azure في سير العمل

  1. في شريط البحث عن الأفعال ، ابحث عن Azure Login.

  2. اختر تسجيل الدخول إلى Azure.

    نتائج البحث تظهر سطرين، الإجراء الأول يسمى 'تسجيل الدخول إلى أزر' والثاني 'تسجيل حاويات أزر'

  3. تحت قسم التثبيت، اختر إصدارا، مثل v1.4.6، وانسخ مقطع رمز التثبيت.

  4. أضف المفتاح 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

  1. في نافذة متصفح جديدة، أنشئ مدير خدمة جديد باستخدام az ad sp create-for-rbac الأمر. تأكد من استبدال *{subscriptionID}* معرف الاشتراك الخاص بك.

    إشعار

    هذا المثال ينشئ الدور Contributor عند نطاق الاشتراك . يمكنك توفير الدور والنطاق الذي يلبي احتياجاتك. لمزيد من المعلومات، انظر Azure -built-in rolesومستويات نطاق 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"
    }
    
  2. انسخ الإخراج وانتقل إلى مستودع GitHub الخاص بك.

  3. اختر الإعدادات>الأسرار والمتغيرات>الإجراءات> سرمستودع جديد.

  4. بالنسبة إلى الاسم، أدخل AZURE_CREDENTIALS.

  5. بالنسبة ل Secret، انسخ محتوى الإخراج الذي استلمته عند إنشاء أصل الخدمة.

  6. اختر إضافة سر.

إنشاء الخطوات اللازمة لتنفيذ أوامر Azure CLI

  1. انتقل إلى نافذتك باستخدام سير العمل YAML.

  2. في شريط البحث عن Actions في سوق البحث ، ابحث عن Azure CLI Action.

  3. اختر Azure CLI Action.

    نتيجة البحث عن 'Azure CLI Action' مع ظهور النتيجة الأولى كما تم إنشاؤها بواسطة Azure

  4. تحت التثبيت، اختر إصدارا، مثل v1.0.8، وانسخ مقتطف رمز التثبيت.

  5. قم بلصق محتوى الإجراء في 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
    

    Tip

    يمكنك فصل معلمات --resource-group و --name عن الأمر عن طريق إنشاء أسرار مستودعات جديدة كما فعلت في AZURE_CREDENTIALS.

    إذا أنشأت أسرار لهذه المعايير، عليك استبدال <resourceGroupName> ال و <aksClusterName> البدائل المؤقتة بنظيراتها السرية. على سبيل المثال، ${{secrets.RESOURCE_GROUP_NAME}} و ${{secrets.AKS_CLUSTER_NAME}}

  6. أعد تسمية YAML إلى upgrade-node-images.yml.

  7. اختر التزام التغييرات...، أضف رسالة التزام، ثم اختر الالتزام بالتغييرات.

تشغيل إجراء 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 وإرشادات الترقية.