تطبيق تحديثات الأمان وkernel على عقد Linux في Azure Kubernetes Service (AKS)

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

عملية الاحتفاظ بعقد نظام مجموعة Windows المحدثة مختلفة قليلاً. لا تتلقى عقد نظام مجموعة Windows تحديثات يومية. بدلاً من ذلك، يمكنك إجراء ترقية AKS نشر العقد الجديدة مع أحدث صورة "نظام مجموعة Windows" الأساسية والتصحيحات. بالنسبة إلى مجموعات AKS التي تستخدم أو عقد نظام مجموعة Windows، راجع ترقية تجمع عقدة في AKS.

يوضح هذا المقال كيفية استخدام kured مفتوحة المصدر (KUbernetes REboot Daemon) لمشاهدة عقد Linux التي تتطلب إعادة تشغيل ثم تلقائياً معالجة إعادة جدولة تشغيل المجموعات وعملية إعادة التشغيل العقد.

إشعار

Kured هو مشروع مفتوح المصدر في Cloud Native Computing Foundation. الرجاء توجيه المشكلات إلى kured GitHub. يمكن العثور على دعم إضافي في قناة #kured على CNCF Slack.

هام

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

على سبيل المثال، يصف مستودع GitHub الخاص ب Ray العديد من الأنظمة الأساسية التي تختلف في وقت الاستجابة والغرض ومستوى الدعم.

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

قبل البدء

تحتاج إلى تثبيت الإصدار 2.0.59 من Azure CLI أو إصدار أحدث وتكوينه. قم بتشغيل az --version للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

فهم تجربة تحديث عقدة AKS

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

تحديث عقدة AKS وعملية إعادة التشغيل باستخدام kured

تتطلب بعض تحديثات الأمان، مثل تحديثات kernel، إعادة تشغيل عقدة لإنهاء العملية. عقدة Linux التي تتطلب إعادة تمهيد بإنشاء ملف اسمه /var/run/reboot-required. لا تحدث عملية إعادة التشغيل هذه تلقائياً.

يمكنك استخدام سير العمل والعمليات الخاصة بك لمعالجة إعادة تشغيل العقدة أو استخدام kured لتنسيق العملية. مع kured، يتم توزيع DaemonSet الذي يشغل المجموعة على كل عقد Linux في مقطع التخزين. هذه المجموعات في DaemonSet تراقب وجود ملف /var/run/reboot-required ثم تبدأ عملية لإعادة تشغيل العقد.

ترقية صورة العقدة

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

بدلاً من ذلك، يمكنك استخدام ترقية صورة العقدة للتحقق من وجود صور العقدة المستخدمة من قبل نظام المجموعة وتحديثها. لمزيد من المعلومات حول ترقية صورة العقدة، راجع ترقية صورة عقدة خدمة Azure Kubernetes (AKS).

ترقيات العقد

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

  • يتم نشر عقدة جديدة مع أحدث تحديثات الأمان وتطبيق إصدار Kubernetes.
  • يتم تطويق عقدة قديمة واستنزافها.
  • تتم جدولة القرون على العقدة الجديدة.
  • تم حذف العقدة القديمة.

لا يمكنك البقاء على نفس إصدار Kubernetes أثناء حدث ترقية. يجب تحديد إصدار أحدث من Kubernetes. للترقية إلى أحدث إصدار من Kubernetes، يمكنك ترقية نظام مجموعة AKS الخاص بك.

توزيع kured في كتلة AKS

لتوزيع DaemonSet الخاص بـ kured، قم بتثبيت مخطط Kured Helm البياني الرسمي التالي. يؤدي هذا إلى إنشاء دور ودور نظام المجموعة والروابط وحساب خدمة، ثم يقوم بتوزيع DaemonSet باستخدام kured.

# Add the Kured Helm repository
helm repo add kubereboot https://kubereboot.github.io/charts/

# Update your local Helm chart repository cache
helm repo update

# Create a dedicated namespace where you would like to deploy kured into
kubectl create namespace kured

# Install kured in that namespace with Helm 3 (only on Linux nodes, kured is not working on Windows nodes)
helm install my-release kubereboot/kured --namespace kured --set controller.nodeSelector."kubernetes\.io/os"=linux

يمكنك أيضا تكوين معلمات إضافية ل kured، مثل التكامل مع Prometheus أو Slack. لمزيد من المعلومات حول معلمات التكوين، راجع مخطط Helm kured.

تحديث عقد المجموعة

افتراضيا، تحقق عقد Linux في AKS من وجود تحديثات كل مساء. إذا كنت لا تريد الانتظار، فيمكنك إجراء تحديث يدوياً للتحقق من أن kured يعمل بشكل صحيح. أولاً، اتبع الخطوات إلى SSH إلى إحدى عقد AKS. بمجرد أن يكون لديك اتصال SSH إلى عقدة Linux، تحقق من وجود تحديثات وتطبيقها على النحو التالي:

sudo apt-get update && sudo apt-get upgrade -y

إذا تم تطبيق التحديثات التي تتطلب إعادة تمهيد عقدة، فستتم كتابة ملف إلى /var/run/reboot-required. Kured يتحقق من العقد التي تتطلب إعادة تشغيل كل 60 دقيقة بشكل افتراضي.

مراقبة ومراجعة عملية إعادة التشغيل

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

يمكنك مراقبة حالة العقد باستخدام الأمر kubectl get nodes. يظهر الإخراج المثال التالي عقدة مع حالةSchedulingDisabled مع تحضير العقدة لعملية إعادة التمهيد:

NAME                       STATUS                     ROLES     AGE       VERSION
aks-nodepool1-28993262-0   Ready,SchedulingDisabled   agent     1h        v1.11.7

بمجرد اكتمال عملية التحديث، يمكنك عرض حالة العقد باستخدام الأمر kubectl get nodes باستخدام معلمة --output wide. يتيح لك هذا الإخراج رؤية فرق في KERNEL-VERSION للعقد الأساسية، كما هو موضح في إخراج المثال التالي. تم تحديث aks-nodepool1-28993262-0 في خطوة سابقة ويظهر إصدار kernel 4.15.0-1039-azure. العقدة aks-nodepool1-28993262-1 التي لم يتم تحديثها يظهر إصدار kernel 4.15.0-1037-azure.

NAME                       STATUS    ROLES     AGE       VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
aks-nodepool1-28993262-0   Ready     agent     1h        v1.11.7   10.240.0.4    <none>        Ubuntu 16.04.6 LTS   4.15.0-1039-azure   docker://3.0.4
aks-nodepool1-28993262-1   Ready     agent     1h        v1.11.7   10.240.0.5    <none>        Ubuntu 16.04.6 LTS   4.15.0-1037-azure   docker://3.0.4

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

هذه المقالة قد فصلت كيفية استخدام kured لإعادة تشغيل عقد Linux تلقائياً كجزء من عملية التحديث الأمني. للترقية إلى أحدث إصدار من Kubernetes، يمكنك ترقية نظام مجموعة AKS الخاص بك.

بالنسبة إلى مجموعات AKS التي تستخدم أو عقد نظام مجموعة Windows، راجع ترقية تجمع عقدة في AKS.

للحصول على مناقشة مفصلة حول أفضل ممارسات الترقية والاعتبارات الأخرى، راجع تصحيح AKS وإرشادات الترقية.