Certificate rotation في خدمة Azure Kubernetes (AKS)

تستخدم خدمة Azure Kubernetes (AKS) شهادات المصادقة مع العديد من مكوناتها. يتم تمكين المجموعات الممكنة ل RBAC التي تم إنشاؤها بعد مارس 2022 مع التدوير التلقائي للشهادة. قد تحتاج إلى تدوير هذه الشهادات بشكل دوري لأسباب تتعلق بالأمان أو النهج. فعلى سبيل المثال، قد يكون لديك نهج لتدوير جميع الشهادات الخاصة بك كل 90 يوماً.

إشعار

يتم تمكين التدوير التلقائي للشهادة بشكل افتراضي فقط لمجموعات AKS الممكنة ل RBAC.

توضح لك هذه المقالة كيفية عمل تدوير الشهادة في نظام مجموعة "AKS".

قبل البدء

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

شهادات AKS وصلاحيات الشهادات وحسابات الخدمة

تقوم AKS بإنشاء واستخدام الشهادات التالية، المراجع المصدقة (CA)، وحسابات الخدمة (SA):

  • ينشئ خادم AKS API مرجعا مصدقا يسمى المرجع المصدق للمجموعة.
  • يمتلك خادم API CA شهادة Cluster CA الذي يوقع على الشهادات لاتصال أحادي الاتجاه من خادم API إلى kubelets.
  • ينشئ كل kubelet طلب توقيع شهادة (CSR)، الذي يوقعه المرجع المصدق للمجموعة، للاتصال من kubelet إلى خادم API.
  • يستخدم مجمع API شهادات Cluster CA لإصدار شهادات الاتصال مع واجهات برمجة التطبيقات الأخرى. يمكن لمجمع API أن يحصل أيضاً على شهادة CA الخاصة به، لإصدار تلك الشهادات، لكنه في الوقت الحالي يستخدم Cluster CA.
  • تستخدم كل عقدة رمز SA المميز، الذي يوقعه المرجع المصدق للمجموعة.
  • لدى العميل kubectl شهادة للاتصال مع نظام مجموعة AKS.

تحتفظ Microsoft بكافة الشهادات المذكورة في هذا القسم، باستثناء شهادة نظام المجموعة.

إشعار

  • تحتوي مجموعات AKS التي تم إنشاؤها قبل مايو 2019 على شهادات تنتهي صلاحيتها بعد عامين.
  • تحتوي مجموعات AKS التي تم إنشاؤها بعد مايو 2019 على شهادات المرجع المصدق للمجموعة التي تنتهي صلاحيتها بعد 30 عاما.

يمكنك التحقق من وقت إنشاء نظام المجموعة الخاص بك باستخدام kubectl get nodes الأمر ، والذي يظهر لك عمر تجمعات العقدة الخاصة بك.

التحقق من تواريخ انتهاء صلاحية الشهادة

التحقق من تاريخ انتهاء صلاحية شهادة نظام المجموعة

  • تحقق من تاريخ انتهاء صلاحية شهادة نظام المجموعة باستخدام kubectl config view الأمر .

    kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
    

التحقق من تاريخ انتهاء صلاحية شهادة خادم API

  • تحقق من تاريخ انتهاء صلاحية شهادة خادم API باستخدام الأمر التالي curl .

    curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
    

التحقق من تاريخ انتهاء صلاحية شهادة عقدة عامل VMAS

  • تحقق من تاريخ انتهاء صلاحية شهادة عقدة عامل VMAS باستخدام az vm run-command invoke الأمر .

    az vm run-command invoke --resource-group MC_rg_myAKSCluster_region --name vm-name --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"
    

تحقق من تاريخ انتهاء صلاحية شهادة عقدة عامل مجموعة مقياس الجهاز الظاهري

  • تحقق من تاريخ انتهاء صلاحية شهادة عقدة عامل مجموعة مقياس الجهاز الظاهري باستخدام az vm run-command invoke الأمر .

    az vmss run-command invoke --resource-group "MC_rg_myAKSCluster_region" --name "vmss-name" --command-id RunShellScript --instance-id 1 --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate" --query "value[0].message"
    

التدوير التلقائي للشهادة

لكي تقوم AKS بتدوير الشهادات غير CA تلقائيا، يجب أن تحتوي المجموعة على TLS Bootstrapping، والذي يتم تمكينه افتراضيا في جميع مناطق Azure.

إشعار

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

بالنسبة لأي مجموعات AKS تم إنشاؤها أو ترقيتها بعد مارس 2022، تقوم Azure Kubernetes Service تلقائيا بتدوير الشهادات غير CA على كل من وحدة التحكم وعقد العامل في غضون 80٪ من الوقت الصالح لشهادة العميل قبل انتهاء صلاحيتها مع عدم وجود وقت تعطل للمجموعة.

كيف أتحقق من تمكين بروتوكول أمان طبقة النقل لنظام تمهيد تشغيل الكمبيوتر في تجمع عقدة العامل الحالي؟

  1. تحقق مما إذا كان نظام المجموعة الخاص بك قد تم تمكين TLS Bootstrapping من خلال الاستعراض إلى واحد إلى المسارات التالية:

    • على عقدة Linux: /var/lib/kubelet/bootstrap-kubeconfig أو /host/var/lib/kubelet/bootstrap-kubeconfig
    • على عقدة Windows: C:\k\bootstrap-config

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

    إشعار

    قد يتغير مسار الملف مع تطور إصدارات Kubernetes.

  2. بمجرد تكوين منطقة، قم بإنشاء نظام مجموعة جديد أو ترقية نظام مجموعة موجود لتعيين التدوير التلقائي لشهادة نظام المجموعة. تحتاج إلى ترقية وحدة التحكم وتجمع العقدة لتمكين هذه الميزة.

تدوير شهادات نظام المجموعة يدوياً

تحذير

يؤدي تدوير الشهادات باستخدام az aks rotate-certs إلى إعادة إنشاء جميع العقد ومجموعات مقياس الجهاز الظاهري والأقراص ويمكن أن يتسبب في ما يصل إلى 30 دقيقة من وقت التعطل لنظام مجموعة AKS.

  1. الاتصال إلى نظام المجموعة باستخدام az aks get-credentials الأمر .

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
    
  2. قم بتدوير جميع الشهادات وCAs وSAs على نظام المجموعة باستخدام az aks rotate-certs الأمر .

    az aks rotate-certs --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
    

    هام

    قد يستغرق الأمر حوالي 30 دقيقة لإكمال az aks rotate-certs. إذا فشل الأمر قبل الإكمال، فاستخدم az aks show للتحقق من أن حالة نظام المجموعة هي Certificate Rotating. إذا كان نظام المجموعة في حالة الفشل، فأعد تشغيل az aks rotate-certs لتدوير الشهادات الخاصة بك مرة أخرى.

  3. تحقق من أن الشهادات القديمة لم تعد صالحة باستخدام أي kubectl أمر، مثل kubectl get nodes.

    kubectl get nodes
    

    إذا لم تكن قد قمت بتحديث الشهادات المستخدمة من قبل kubectl، فسترى خطأ مشابها لإخراج المثال التالي:

    Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "ca")
    
  4. تحديث الشهادة المستخدمة kubectl باستخدام az aks get-credentials الأمر مع العلامة --overwrite-existing .

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --overwrite-existing
    
  5. تحقق من تحديث الشهادات باستخدام kubectl get الأمر .

    kubectl get nodes
    

    إشعار

    إذا كان لديك أي خدمات تعمل أعلى AKS، فقد تحتاج إلى تحديث شهاداتها.

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

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