توسيع نطاق تطبيقاتك بأمان باستخدام هوية الوظيفة الإضافية وعبء العمل KEDA على خدمة Azure Kubernetes (AKS)
توضح لك هذه المقالة كيفية توسيع نطاق تطبيقاتك بأمان باستخدام الوظيفة الإضافية للتحجيم التلقائي (KEDA) المستندة إلى أحداث Kubernetes وهوية حمل العمل على خدمة Azure Kubernetes (AKS).
هام
يحدد إصدار نظام المجموعة Kubernetes إصدار KEDA الذي سيتم تثبيته على نظام مجموعة AKS. لمعرفة إصدار KEDA الذي يعين إلى كل إصدار AKS، راجع عمود الوظائف الإضافية المدارة AKS لجدول إصدار مكون Kubernetes.
بالنسبة لإصدارات GA Kubernetes، تقدم AKS دعما كاملا للإصدار الثانوي المقابل ل KEDA في الجدول. تتم تغطية إصدارات معاينة Kubernetes وأحدث تصحيح KEDA جزئيا من خلال دعم العملاء على أساس أفضل جهد. على هذا النحو، هذه الميزات ليست مخصصة للاستخدام الإنتاجي. لمزيد من المعلومات، يُرجي الاطلاع على مقالات الدعم الآتية:
قبل البدء
- تحتاج إلى شتراك Azure. إذا لم يكن لديك اشتراك Azure، يمكنك إنشاء حساب مجاني.
- تحتاج إلى تثبيت Azure CLI.
- تأكد من تكوين قواعد جدار الحماية للسماح بالوصول إلى خادم Kubernetes API. لمزيد من المعلومات، راجع قواعد الشبكة الصادرة وFQDN لمجموعات خدمة Azure Kubernetes (AKS).
إنشاء مجموعة موارد
إنشاء مجموعة موارد باستخدام
az group create
الأمر . تأكد من استبدال قيم العنصر النائب بقيمك الخاصة.LOCATION=<azure-region> RG_NAME=<resource-group-name> az group create --name $RG_NAME --location $LOCATION
إنشاء نظام مجموعة AKS
أنشئ مجموعة AKS مع تمكين الوظيفة الإضافية KEDA وهوية حمل العمل ومصدر OIDC باستخدام
az aks create
الأمر مع--enable-workload-identity
--enable-keda
العلامات و و--enable-oidc-issuer
. تأكد من استبدال قيمة العنصر النائب بقيمتك الخاصة.AKS_NAME=<cluster-name> az aks create \ --name $AKS_NAME \ --resource-group $RG_NAME \ --enable-workload-identity \ --enable-oidc-issuer \ --enable-keda \ --generate-ssh-keys
تحقق من نجاح النشر وتأكد من تمكين KEDA وهوية حمل العمل ومصدر OIDC باستخدام
az aks show
الأمر مع تعيين العلامة--query
إلى"[workloadAutoScalerProfile, securityProfile, oidcIssuerProfile]"
.az aks show \ --name $AKS_NAME \ --resource-group $RG_NAME \ --query "[workloadAutoScalerProfile, securityProfile, oidcIssuerProfile]"
الاتصال بالمجموعة باستخدام
az aks get-credentials
الأمر .az aks get-credentials \ --name $AKS_NAME \ --resource-group $RG_NAME \ --overwrite-existing
إنشاء ناقل خدمة Azure
إنشاء مساحة اسم ناقل خدمة Azure باستخدام
az servicebus namespace create
الأمر . تأكد من استبدال قيمة العنصر النائب بقيمتك الخاصة.SB_NAME=<service-bus-name> SB_HOSTNAME="${SB_NAME}.servicebus.windows.net" az servicebus namespace create \ --name $SB_NAME \ --resource-group $RG_NAME \ --disable-local-auth
إنشاء قائمة انتظار ناقل خدمة Azure باستخدام
az servicebus queue create
الأمر . تأكد من استبدال قيمة العنصر النائب بقيمتك الخاصة.SB_QUEUE_NAME=<service-bus-queue-name> az servicebus queue create \ --name $SB_QUEUE_NAME \ --namespace $SB_NAME \ --resource-group $RG_NAME
إنشاء هوية مدارة
إنشاء هوية مدارة
az identity create
باستخدام الأمر . تأكد من استبدال قيمة العنصر النائب بقيمتك الخاصة.MI_NAME=<managed-identity-name> MI_CLIENT_ID=$(az identity create \ --name $MI_NAME \ --resource-group $RG_NAME \ --query "clientId" \ --output tsv)
احصل على عنوان URL لمصدر OIDC باستخدام
az aks show
الأمر مع تعيين العلامة--query
إلىoidcIssuerProfile.issuerUrl
.AKS_OIDC_ISSUER=$(az aks show \ --name $AKS_NAME \ --resource-group $RG_NAME \ --query oidcIssuerProfile.issuerUrl \ --output tsv)
إنشاء بيانات اعتماد موحدة بين الهوية المدارة ومساحة الاسم وحساب الخدمة المستخدم من قبل حمل العمل باستخدام
az identity federated-credential create
الأمر . تأكد من استبدال قيمة العنصر النائب بقيمتك الخاصة.FED_WORKLOAD=<federated-credential-workload-name> az identity federated-credential create \ --name $FED_WORKLOAD \ --identity-name $MI_NAME \ --resource-group $RG_NAME \ --issuer $AKS_OIDC_ISSUER \ --subject system:serviceaccount:default:$MI_NAME \ --audience api://AzureADTokenExchange
إنشاء بيانات اعتماد موحدة ثانية بين الهوية المدارة ومساحة الاسم وحساب الخدمة المستخدم من قبل عامل تشغيل keda باستخدام
az identity federated-credential create
الأمر . تأكد من استبدال قيمة العنصر النائب بقيمتك الخاصة.FED_KEDA=<federated-credential-keda-name> az identity federated-credential create \ --name $FED_KEDA \ --identity-name $MI_NAME \ --resource-group $RG_NAME \ --issuer $AKS_OIDC_ISSUER \ --subject system:serviceaccount:kube-system:keda-operator \ --audience api://AzureADTokenExchange
إنشاء تعيينات الأدوار
احصل على معرف الكائن للهوية المدارة
az identity show
باستخدام الأمر مع تعيين العلامة--query
إلى"principalId"
.MI_OBJECT_ID=$(az identity show \ --name $MI_NAME \ --resource-group $RG_NAME \ --query "principalId" \ --output tsv)
احصل على معرف مورد مساحة اسم ناقل خدمة Microsoft Azure باستخدام
az servicebus namespace show
الأمر مع تعيين العلامة--query
إلى"id"
.SB_ID=$(az servicebus namespace show \ --name $SB_NAME \ --resource-group $RG_NAME \ --query "id" \ --output tsv)
تعيين دور مالك البيانات ناقل خدمة Azure إلى الهوية المدارة
az role assignment create
باستخدام الأمر .az role assignment create \ --role "Azure Service Bus Data Owner" \ --assignee-object-id $MI_OBJECT_ID \ --assignee-principal-type ServicePrincipal \ --scope $SB_ID
تمكين هوية حمل العمل على عامل تشغيل KEDA
بعد إنشاء بيانات الاعتماد الموحدة
keda-operator
ل ServiceAccount، ستحتاج إلى إعادة تشغيلkeda-operator
القرون يدويا لضمان إدخال متغيرات بيئة هوية حمل العمل في الجراب.kubectl rollout restart deploy keda-operator -n kube-system
تأكيد إعادة تشغيل pods لعامل تشغيل keda
kubectl get pod -n kube-system -lapp=keda-operator -w
بمجرد تأكيد انتهاء pods keda-operator من الضغط
Ctrl+c
المتداول لكسر أمر الساعة السابق، تأكد من إدخال متغيرات بيئة هوية حمل العمل.KEDA_POD_ID=$(kubectl get po -n kube-system -l app.kubernetes.io/name=keda-operator -ojsonpath='{.items[0].metadata.name}') kubectl describe po $KEDA_POD_ID -n kube-system
يجب أن تشاهد إخراجا مشابها للآتي ضمن البيئة.
--- AZURE_CLIENT_ID: AZURE_TENANT_ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx AZURE_FEDERATED_TOKEN_FILE: /var/run/secrets/azure/tokens/azure-identity-token AZURE_AUTHORITY_HOST: https://login.microsoftonline.com/ ---
نشر مورد KEDA TriggerAuthentication الذي يتضمن معرف عميل الهوية المدارة المعين من قبل المستخدم.
kubectl apply -f - <<EOF apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: azure-servicebus-auth namespace: default # this must be same namespace as the ScaledObject/ScaledJob that will use it spec: podIdentity: provider: azure-workload identityId: $MI_CLIENT_ID EOF
إشعار
مع وضع TriggerAuthentication في مكانه، سيتمكن KEDA من المصادقة عبر هوية حمل العمل.
keda-operator
تستخدمidentityId
Pods للمصادقة مقابل موارد Azure عند تقييم مشغلات التحجيم.
نشر الرسائل إلى ناقل خدمة Azure
في هذه المرحلة يتم تكوين كل شيء للتحجيم باستخدام KEDA وMicrosoft Entra Workload Identity. سنختبر هذا من خلال نشر أحمال عمل المنتج والمستهلك.
إنشاء ServiceAccount جديد لأحمال العمل.
kubectl apply -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: $MI_CLIENT_ID name: $MI_NAME EOF
نشر مهمة لنشر 100 رسالة.
kubectl apply -f - <<EOF apiVersion: batch/v1 kind: Job metadata: name: myproducer spec: template: metadata: labels: azure.workload.identity/use: "true" spec: serviceAccountName: $MI_NAME containers: - image: ghcr.io/azure-samples/aks-app-samples/servicebusdemo:latest name: myproducer resources: {} env: - name: OPERATION_MODE value: "producer" - name: MESSAGE_COUNT value: "100" - name: AZURE_SERVICEBUS_QUEUE_NAME value: $SB_QUEUE_NAME - name: AZURE_SERVICEBUS_HOSTNAME value: $SB_HOSTNAME restartPolicy: Never EOF
استهلاك الرسائل من ناقل خدمة Azure
الآن بعد أن نشرنا رسائل إلى قائمة انتظار ناقل خدمة Azure، سننشر ScaledJob لاستهلاك الرسائل. سيستخدم ScaledJob مورد KEDA TriggerAuthentication للمصادقة مقابل قائمة انتظار ناقل خدمة Azure باستخدام هوية حمل العمل وتوسيع نطاق كل 10 رسائل.
نشر مورد ScaledJob لاستهلاك الرسائل. سيتم تكوين مشغل المقياس لتوسيع نطاق كل 10 رسائل. سيقوم متدرج KEDA بإنشاء 10 وظائف لاستهلاك 100 رسالة.
kubectl apply -f - <<EOF apiVersion: keda.sh/v1alpha1 kind: ScaledJob metadata: name: myconsumer-scaledjob spec: jobTargetRef: template: metadata: labels: azure.workload.identity/use: "true" spec: serviceAccountName: $MI_NAME containers: - image: ghcr.io/azure-samples/aks-app-samples/servicebusdemo:latest name: myconsumer env: - name: OPERATION_MODE value: "consumer" - name: MESSAGE_COUNT value: "10" - name: AZURE_SERVICEBUS_QUEUE_NAME value: $SB_QUEUE_NAME - name: AZURE_SERVICEBUS_HOSTNAME value: $SB_HOSTNAME restartPolicy: Never triggers: - type: azure-servicebus metadata: queueName: $SB_QUEUE_NAME namespace: $SB_NAME messageCount: "10" authenticationRef: name: azure-servicebus-auth EOF
إشعار
ينشئ ScaledJob مورد مهمة Kubernetes كلما حدث تغيير الحجم وبالتالي يجب تمرير قالب الوظيفة عند إنشاء المورد. عند إنشاء وظائف جديدة، سيتم نشر Pods مع وحدات بت هوية حمل العمل لاستهلاك الرسائل.
تحقق من أن متدرج KEDA يعمل على النحو المنشود.
kubectl describe scaledjob myconsumer-scaledjob
يجب أن تشاهد أحداثا مشابهة للأحداث التالية.
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal KEDAScalersStarted 10m scale-handler Started scalers watch Normal ScaledJobReady 10m keda-operator ScaledJob is ready for scaling Warning KEDAScalerFailed 10m scale-handler context canceled Normal KEDAJobsCreated 10m scale-handler Created 10 jobs
تنظيف الموارد
بعد التحقق من نجاح النشر، يمكنك تنظيف الموارد لتجنب تكبد تكاليف Azure.
احذف مجموعة موارد Azure وجميع الموارد الموجودة فيها باستخدام الأمر [
az group delete
][az-group-delete].az group delete --name $RG_NAME --yes --no-wait
الخطوات التالية
توضح لك هذه المقالة كيفية توسيع نطاق تطبيقاتك بأمان باستخدام هوية الوظيفة الإضافية وعبء العمل KEDA في AKS.
للحصول على معلومات حول استكشاف أخطاء KEDA وإصلاحها، راجع استكشاف أخطاء الوظيفة الإضافية للتحجيم التلقائي (KEDA) المستندة إلى أحداث Kubernetes وإصلاحها.
لمعرفة المزيد حول KEDA، راجع مستندات KEDA الأولية.
Azure Kubernetes Service