Dela via


Dapr-komponenter i Azure Container Apps

Dapr använder en modulär design där funktioner levereras som en komponent. Användningen av Dapr-komponenter är valfri och styrs uteslutande av programmets behov.

Dapr-komponenter i containerappar är resurser på miljönivå som:

  • Kan tillhandahålla en anslutningsbar abstraktionsmodell för anslutning till externa tjänster.
  • Kan delas mellan containerappar eller begränsas till specifika containerappar.
  • Kan använda Dapr-hemligheter för att på ett säkert sätt hämta konfigurationsmetadata.

I den här guiden får du lära dig hur du konfigurerar Dapr-komponenter för dina Azure Container Apps-tjänster.

Komponentschema

I Dapr-projektet med öppen källkod följer alla komponenter följande grundläggande schema.

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: [COMPONENT-NAME]
  namespace: [COMPONENT-NAMESPACE]
spec:
  type: [COMPONENT-TYPE]
  version: v1
  initTimeout: [TIMEOUT-DURATION]
  ignoreErrors: [BOOLEAN]
  metadata:
    - name: [METADATA-NAME]
      value: [METADATA-VALUE]

I Azure Container Apps är schemat ovan något förenklat för att stödja Dapr-komponenter och ta bort onödiga fält, inklusive apiVersion, kindoch redundanta metadata och specifikationsegenskaper.

componentType: [COMPONENT-TYPE]
version: v1
initTimeout: [TIMEOUT-DURATION]
ignoreErrors: [BOOLEAN]
metadata:
  - name: [METADATA-NAME]
    value: [METADATA-VALUE]

Komponentomfattningar

Som standard läser alla Dapr-aktiverade containerappar i samma miljö in hela uppsättningen distribuerade komponenter. För att säkerställa att endast lämpliga containerappar läser in komponenter vid körning bör programomfattningar användas. I följande exempel läses komponenten bara in av de två Dapr-aktiverade containerapparna med Dapr-program-ID:t APP-ID-1 och APP-ID-2:

componentType: [COMPONENT-TYPE]
version: v1
initTimeout: [TIMEOUT-DURATION]
ignoreErrors: [BOOLEAN]
metadata:
  - name: [METADATA-NAME]
    value: [METADATA-VALUE]
scopes:
  - [APP-ID-1]
  - [APP-ID-2]

Kommentar

Dapr-komponentomfång motsvarar Dapr-program-ID:t för en containerapp, inte namnet på containerappen.

Ansluta till externa tjänster via Dapr

Det finns några metoder som stöds i containerappar för att upprätta anslutningar till externa tjänster för Dapr-komponenter på ett säkert sätt.

  1. Använda hanterad identitet
  2. Använd en dapr-komponentreferens för hemligt arkiv genom att skapa något av följande:

Använda hanterad identitet

För Azure-värdbaserade tjänster kan Dapr använda den hanterade identiteten för de begränsade containerapparna för att autentisera till serverdelstjänstleverantören. När du använder hanterad identitet behöver du inte inkludera hemlig information i ett komponentmanifest. Att använda hanterad identitet är att föredra eftersom det eliminerar lagring av känsliga indata i komponenter och kräver inte hantering av ett hemligt arkiv.

Kommentar

Metadatafältet azureClientId (klient-ID för den hanterade identiteten) krävs för alla komponenter som autentiserar med användartilldelad hanterad identitet.

Använda en dapr-referens för hemlig lagringskomponent

När du skapar Dapr-komponenter för tjänster som inte är Entra-ID-aktiverade kräver vissa metadatafält känsliga indatavärden. Den rekommenderade metoden för att hämta dessa hemligheter är att referera till en befintlig Dapr-komponent för hemligt arkiv som på ett säkert sätt kommer åt hemlig information.

Så här konfigurerar du en referens:

  1. Skapa en Dapr secret store-komponent med hjälp av Azure Container Apps-schemat. Komponenttypen för alla Dapr-hemlighetslager som stöds börjar med secretstores..
  2. Skapa extra komponenter (efter behov) som refererar till dapr-hemlighetsarkivkomponenten som du skapade för att hämta indata för känsliga metadata.

Skapa en Dapr-komponent för hemligt arkiv

När du skapar en hemlig butikskomponent i Azure Container Apps kan du ange känslig information i metadataavsnittet på något av följande sätt:

Hemliga Azure Key Vault-butiker

Följande komponent visar den enklaste möjliga hemliga butikskonfigurationen med hjälp av ett hemligt Azure Key Vault-arkiv. I det här exemplet konfigureras program för utgivare och prenumeranter att både ha en system- eller användartilldelad hanterad identitet med lämpliga behörigheter för Azure Key Vault-instansen.

componentType: secretstores.azure.keyvault
version: v1
metadata:
  - name: vaultName
    value: [your_keyvault_name]
  - name: azureEnvironment
    value: "AZUREPUBLICCLOUD"
  - name: azureClientId # Only required for authenticating user-assigned managed identity
    value: [your_managed_identity_client_id]
scopes:
  - publisher-app
  - subscriber-app
Plattformshanterade Kubernetes-hemligheter

Kubernetes-hemligheter, lokala miljövariabler och Lokala dapr-filhemlighetslager stöds inte i Azure Container Apps. Som ett alternativ för den överordnade Dapr-standardbutiken för Kubernetes-hemligheter tillhandahåller Azure Container Apps en plattformshanterad metod för att skapa och utnyttja Kubernetes-hemligheter.

Den här komponentkonfigurationen definierar det känsliga värdet som en hemlig parameter som kan refereras från metadataavsnittet. Den här metoden kan användas för att ansluta till icke-Azure-tjänster eller i utvecklings-/testscenarier för att snabbt distribuera komponenter via CLI utan att konfigurera ett hemligt arkiv eller hanterad identitet.

componentType: secretstores.azure.keyvault
version: v1
metadata:
  - name: vaultName
    value: [your_keyvault_name]
  - name: azureEnvironment
    value: "AZUREPUBLICCLOUD"
  - name: azureTenantId
    value: "[your_tenant_id]"
  - name: azureClientId 
    value: "[your_client_id]"
  - name: azureClientSecret
    secretRef: azClientSecret
secrets:
  - name: azClientSecret
    value: "[your_client_secret]"
scopes:
  - publisher-app
  - subscriber-app

Referera till Dapr secret store-komponenter

När du har skapat ett Hemligt Dapr-arkiv med någon av de tidigare metoderna kan du referera till det hemliga arkivet från andra Dapr-komponenter i samma miljö. I följande exempel visas hur du använder Entra ID-autentisering.

componentType: pubsub.azure.servicebus.queue
version: v1
secretStoreComponent: "[your_secret_store_name]"
metadata:
  - name: namespaceName
    # Required when using Azure Authentication.
    # Must be a fully-qualified domain name
    value: "[your_servicebus_namespace.servicebus.windows.net]"
  - name: azureTenantId
    value: "[your_tenant_id]"
  - name: azureClientId 
    value: "[your_client_id]"
  - name: azureClientSecret
    secretRef: azClientSecret
scopes:
  - publisher-app
  - subscriber-app

Komponentexempel

Om du vill skapa en Dapr-komponent via Container Apps CLI kan du använda ett YAML-manifest för containerappar. När du konfigurerar flera komponenter måste du skapa och tillämpa en separat YAML-fil för varje komponent.

az containerapp env dapr-component set --name ENVIRONMENT_NAME --resource-group RESOURCE_GROUP_NAME --dapr-component-name pubsub --yaml "./pubsub.yaml"
# pubsub.yaml for Azure Service Bus component
componentType: pubsub.azure.servicebus.queue
version: v1
secretStoreComponent: "my-secret-store"
metadata:
  - name: namespaceName
    # Required when using Azure Authentication.
    # Must be a fully-qualified domain name
    value: "[your_servicebus_namespace.servicebus.windows.net]"
  - name: azureTenantId
    value: "[your_tenant_id]"
  - name: azureClientId 
    value: "[your_client_id]"
  - name: azureClientSecret
    secretRef: azClientSecret
scopes:
  - publisher-app
  - subscriber-app

Nästa steg

Lär dig hur du ställer in Dapr-komponentens återhämtning.