مشاركة عبر


توسيع نطاق تطبيقاتك بأمان باستخدام هوية الوظيفة الإضافية وعبء العمل KEDA على خدمة Azure Kubernetes (AKS)

توضح لك هذه المقالة كيفية توسيع نطاق تطبيقاتك بأمان باستخدام الوظيفة الإضافية للتحجيم التلقائي (KEDA) المستندة إلى أحداث Kubernetes وهوية حمل العمل على خدمة Azure Kubernetes (AKS).

هام

يحدد إصدار نظام المجموعة Kubernetes إصدار KEDA الذي سيتم تثبيته على نظام مجموعة AKS. لمعرفة إصدار KEDA الذي يعين إلى كل إصدار AKS، راجع عمود الوظائف الإضافية المدارة AKS لجدول إصدار مكون Kubernetes.

بالنسبة لإصدارات GA Kubernetes، تقدم AKS دعما كاملا للإصدار الثانوي المقابل ل KEDA في الجدول. تتم تغطية إصدارات معاينة Kubernetes وأحدث تصحيح KEDA جزئيا من خلال دعم العملاء على أساس أفضل جهد. على هذا النحو، هذه الميزات ليست مخصصة للاستخدام الإنتاجي. لمزيد من المعلومات، يُرجي الاطلاع على مقالات الدعم الآتية:

قبل البدء

إنشاء مجموعة موارد

  • إنشاء مجموعة موارد باستخدام az group create الأمر . تأكد من استبدال قيم العنصر النائب بقيمك الخاصة.

    LOCATION=<azure-region>
    RG_NAME=<resource-group-name>
    
    az group create --name $RG_NAME --location $LOCATION
    

إنشاء نظام مجموعة AKS

  1. أنشئ مجموعة 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 
    
  2. تحقق من نجاح النشر وتأكد من تمكين KEDA وهوية حمل العمل ومصدر OIDC باستخدام az aks show الأمر مع تعيين العلامة --query إلى "[workloadAutoScalerProfile, securityProfile, oidcIssuerProfile]".

    az aks show \
        --name $AKS_NAME \
        --resource-group $RG_NAME \
        --query "[workloadAutoScalerProfile, securityProfile, oidcIssuerProfile]"
    
  3. الاتصال بالمجموعة باستخدام az aks get-credentials الأمر .

    az aks get-credentials \
        --name $AKS_NAME \
        --resource-group $RG_NAME \
        --overwrite-existing
    

إنشاء ناقل خدمة Azure

  1. إنشاء مساحة اسم ناقل خدمة 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
    
  2. إنشاء قائمة انتظار ناقل خدمة 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
    

إنشاء هوية مدارة

  1. إنشاء هوية مدارة 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)
    
  2. احصل على عنوان 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)
    
  3. إنشاء بيانات اعتماد موحدة بين الهوية المدارة ومساحة الاسم وحساب الخدمة المستخدم من قبل حمل العمل باستخدام 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
    
  4. إنشاء بيانات اعتماد موحدة ثانية بين الهوية المدارة ومساحة الاسم وحساب الخدمة المستخدم من قبل عامل تشغيل 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
    

إنشاء تعيينات الأدوار

  1. احصل على معرف الكائن للهوية المدارة az identity show باستخدام الأمر مع تعيين العلامة --query إلى "principalId".

    MI_OBJECT_ID=$(az identity show \
        --name $MI_NAME \
        --resource-group $RG_NAME \
        --query "principalId" \
        --output tsv)
    
  2. احصل على معرف مورد مساحة اسم ناقل خدمة 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)
    
  3. تعيين دور مالك البيانات ناقل خدمة 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

  1. بعد إنشاء بيانات الاعتماد الموحدة keda-operator ل ServiceAccount، ستحتاج إلى إعادة تشغيل keda-operator القرون يدويا لضمان إدخال متغيرات بيئة هوية حمل العمل في الجراب.

    kubectl rollout restart deploy keda-operator -n kube-system
    
  2. تأكيد إعادة تشغيل pods لعامل تشغيل keda

    kubectl get pod -n kube-system -lapp=keda-operator -w
    
  3. بمجرد تأكيد انتهاء 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
    
  4. يجب أن تشاهد إخراجا مشابها للآتي ضمن البيئة.

    ---
    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/
    ---
    
  5. نشر مورد 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. سنختبر هذا من خلال نشر أحمال عمل المنتج والمستهلك.

  1. إنشاء ServiceAccount جديد لأحمال العمل.

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        azure.workload.identity/client-id: $MI_CLIENT_ID
      name: $MI_NAME
    EOF
    
  2. نشر مهمة لنشر 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 رسائل.

  1. نشر مورد 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 مع وحدات بت هوية حمل العمل لاستهلاك الرسائل.

  2. تحقق من أن متدرج KEDA يعمل على النحو المنشود.

    kubectl describe scaledjob myconsumer-scaledjob
    
  3. يجب أن تشاهد أحداثا مشابهة للأحداث التالية.

    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.

  1. احذف مجموعة موارد Azure وجميع الموارد الموجودة فيها باستخدام الأمر [az group delete][az-group-delete].

    az group delete --name $RG_NAME --yes --no-wait
    

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

توضح لك هذه المقالة كيفية توسيع نطاق تطبيقاتك بأمان باستخدام هوية الوظيفة الإضافية وعبء العمل KEDA في AKS.

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

لمعرفة المزيد حول KEDA، راجع مستندات KEDA الأولية.