Aracılığıyla paylaş


Azure Kubernetes Service'te (AKS) KEDA eklentisini ve iş yükü kimliğini kullanarak uygulamalarınızı güvenli bir şekilde ölçeklendirme

Bu makalede, Azure Kubernetes Service'te (AKS) Kubernetes Event-driven Autoscaling (KEDA) eklentisi ve iş yükü kimliğiyle uygulamalarınızı güvenli bir şekilde ölçeklendirme adımları gösterilmektedir.

Önemli

Kümenizin Kubernetes sürümü, AKS kümenize hangi KEDA sürümünün yükleneceğini belirler. Hangi KEDA sürümünün her AKS sürümüne eşleneceğini görmek için Kubernetes bileşen sürümü tablosunun AKS tarafından yönetilen eklentiler sütununa bakın.

GA Kubernetes sürümleri için AKS, tablodaki ilgili KEDA ikincil sürümü için tam destek sunar. Kubernetes önizleme sürümleri ve en son KEDA düzeltme eki, müşteri desteği kapsamındadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

Başlamadan önce

  • Azure aboneliğine ihtiyacınız var. Azure aboneliğiniz yoksa ücretsiz hesap oluşturabilirsiniz.
  • Azure CLI'nın yüklü olması gerekir.
  • Kubernetes API sunucusuna erişime izin verecek şekilde yapılandırılmış güvenlik duvarı kurallarınız olduğundan emin olun. Daha fazla bilgi için bkz . Azure Kubernetes Service (AKS) kümeleri için giden ağ ve FQDN kuralları.

Kaynak grubu oluşturma

  • komutunu kullanarak az group create bir kaynak grubu oluşturun. Yer tutucu değerlerini kendi değerlerinizle değiştirdiğinizden emin olun.

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

AKS kümesi oluşturma

  1. , --enable-kedave --enable-oidc-issuer bayraklarıyla komutunu --enable-workload-identitykullanarak az aks create KEDA eklentisi, iş yükü kimliği ve OIDC verenin etkinleştirildiği bir AKS kümesi oluşturun. Yer tutucu değerini kendi değerinizle değiştirdiğinizden emin olun.

    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. Dağıtımın başarılı olduğunu doğrulayın ve bayrağı olarak ayarlanmış "[workloadAutoScalerProfile, securityProfile, oidcIssuerProfile]"komutunu kullanarak kümede KEDA, iş yükü kimliği ve OIDC verenin az aks show etkinleştirildiğinden --query emin olun.

    az aks show \
        --name $AKS_NAME \
        --resource-group $RG_NAME \
        --query "[workloadAutoScalerProfile, securityProfile, oidcIssuerProfile]"
    
  3. komutunu kullanarak kümeye bağlanın az aks get-credentials .

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

Azure Service Bus oluşturma

  1. komutunu kullanarak az servicebus namespace create bir Azure Service Bus ad alanı oluşturun. Yer tutucu değerini kendi değerinizle değiştirdiğinden emin olun.

    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. komutunu kullanarak az servicebus queue create bir Azure Service Bus kuyruğu oluşturun. Yer tutucu değerini kendi değerinizle değiştirdiğinden emin olun.

    SB_QUEUE_NAME=<service-bus-queue-name>
    
    az servicebus queue create \
        --name $SB_QUEUE_NAME \
        --namespace $SB_NAME \
        --resource-group $RG_NAME
    

Yönetilen kimlik oluşturma

  1. komutunu kullanarak az identity create yönetilen kimlik oluşturun. Yer tutucu değerini kendi değerinizle değiştirdiğinden emin olun.

    MI_NAME=<managed-identity-name>
    
    MI_CLIENT_ID=$(az identity create \
        --name $MI_NAME \
        --resource-group $RG_NAME \
        --query "clientId" \
        --output tsv)
    
  2. bayrağı olarak ayarlanmış komutunu kullanarak az aks show OIDC veren URL'sini --query oidcIssuerProfile.issuerUrlalın.

    AKS_OIDC_ISSUER=$(az aks show \
        --name $AKS_NAME \
        --resource-group $RG_NAME \
        --query oidcIssuerProfile.issuerUrl \
        --output tsv)
    
  3. komutunu kullanarak az identity federated-credential create yönetilen kimlik ile iş yükü tarafından kullanılan ad alanı ve hizmet hesabı arasında federasyon kimlik bilgileri oluşturun. Yer tutucu değerini kendi değerinizle değiştirdiğinden emin olun.

    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. komutunu kullanarak az identity federated-credential create keda-operator tarafından kullanılan ad alanı ve hizmet hesabı ile yönetilen kimlik arasında ikinci bir federasyon kimlik bilgisi oluşturun. Yer tutucu değerini kendi değerinizle değiştirdiğinden emin olun.

    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
    

Rol atamaları oluşturma

  1. bayrağı olarak ayarlanmış "principalId"komutunu kullanarak az identity show yönetilen kimliğin --query nesne kimliğini alın.

    MI_OBJECT_ID=$(az identity show \
        --name $MI_NAME \
        --resource-group $RG_NAME \
        --query "principalId" \
        --output tsv)
    
  2. bayrağı olarak ayarlanmış "id"komutunu --query kullanarak az servicebus namespace show Service Bus ad alanı kaynak kimliğini alın.

    SB_ID=$(az servicebus namespace show \
        --name $SB_NAME \
        --resource-group $RG_NAME \
        --query "id" \
        --output tsv)
    
  3. komutunu kullanarak yönetilen kimliğe Azure Service Bus Veri Sahibi rolünü atayın 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 operatöründe İş Yükü Kimliğini etkinleştirme

  1. ServiceAccount için federasyon kimlik bilgilerini oluşturduktan sonra, İş Yükü Kimliği ortam değişkenlerinin pod'a eklendiğinden keda-operator emin olmak için keda-operator podları el ile yeniden başlatmanız gerekir.

    kubectl rollout restart deploy keda-operator -n kube-system
    
  2. Keda-operator podlarının yeniden başlat olduğunu onaylayın

    kubectl get pod -n kube-system -lapp=keda-operator -w
    
  3. Önceki izleme komutunu kesmek için keda-operator podlarının sıralı isabeti Ctrl+c tamamladığını onayladıktan sonra İş Yükü Kimliği ortam değişkenlerinin eklenmiş olduğunu onaylayın.

    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. Ortam altında aşağıdakine benzer bir çıktı görmeniz gerekir.

    ---
    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. Kullanıcı Tarafından Atanan Yönetilen Kimliğin İstemci Kimliğini içeren bir KEDA Tetikleyici Kimlik Doğrulama kaynağı dağıtın.

    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
    

    Not

    TriggerAuthentication etkinken, KEDA iş yükü kimliği aracılığıyla kimlik doğrulaması yapabilir. keda-operator Podlar, ölçeklendirme tetikleyicilerini değerlendirirken Azure kaynaklarında kimlik doğrulaması yapmak için öğesini identityId kullanır.

Azure Service Bus'ta ileti yayımlama

Bu noktada her şey KEDA ve Microsoft Entra İş Yükü Kimliği ile ölçeklendirme için yapılandırılır. Üretici ve tüketici iş yüklerini dağıtarak bunu test edeceğiz.

  1. İş yükleri için yeni bir ServiceAccount oluşturun.

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        azure.workload.identity/client-id: $MI_CLIENT_ID
      name: $MI_NAME
    EOF
    
  2. 100 ileti yayımlamak için bir İş dağıtın.

    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 Service Bus'tan iletileri kullanma

Azure Service Bus kuyruğunda iletileri yayımladığımıza göre, iletileri kullanmak için bir ScaledJob dağıtacağız. Bu ScaledJob, iş yükü kimliğini kullanarak Azure Service Bus kuyruğunda kimlik doğrulaması yapmak ve her 10 iletinin ölçeğini genişletmek için KEDA TriggerAuthentication kaynağını kullanır.

  1. İletileri kullanmak için bir ScaledJob kaynağı dağıtın. Ölçek tetikleyicisi her 10 iletide bir ölçeği genişletecek şekilde yapılandırılır. KEDA ölçeklendiricisi, 100 iletiyi kullanmak için 10 iş oluşturur.

    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
    

    Not

    ScaledJob her ölçeklendirme olayı gerçekleştiğinde bir Kubernetes İş kaynağı oluşturur ve bu nedenle kaynak oluşturulurken bir İş şablonunun geçirilmesi gerekir. Yeni İşler oluşturulduktan sonra, podlar iletileri kullanmak için iş yükü kimlik bitleriyle dağıtılır.

  2. KEDA ölçeklendiricisinin beklendiği gibi çalıştığını doğrulayın.

    kubectl describe scaledjob myconsumer-scaledjob
    
  3. Aşağıdakine benzer olaylar görmeniz gerekir.

    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
    

Kaynakları temizleme

Dağıtımın başarılı olduğunu doğruladıktan sonra, Azure maliyetlerinin oluşmasını önlemek için kaynakları temizleyebilirsiniz.

  1. [az group delete][az-group-delete] komutunu kullanarak Azure kaynak grubunu ve içindeki tüm kaynakları silin.

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

Sonraki adımlar

Bu makalede, AKS'de KEDA eklentisini ve iş yükü kimliğini kullanarak uygulamalarınızı nasıl güvenli bir şekilde ölçeklendirdiğiniz gösterildi.

KEDA sorunlarını giderme hakkında bilgi için bkz . Kubernetes Olay Odaklı Otomatik Ölçeklendirme (KEDA) eklentisinin sorunlarını giderme.

KEDA hakkında daha fazla bilgi edinmek için yukarı akış KEDA belgelerine bakın.