Condividi tramite


Componenti dapr in App Azure Container

Dapr usa una progettazione modulare in cui la funzionalità viene distribuita come componente. L'uso dei componenti Distributed Apps Runtime è facoltativo e dipende esclusivamente dalle esigenze dell'applicazione.

I componenti Distributed Apps Runtime nelle app contenitore sono risorse a livello di ambiente che:

  • Può fornire un modello di astrazione collegabile per la connessione a servizi esterni di supporto.
  • Può essere condiviso tra app contenitore o con ambito per app contenitore specifiche.
  • Può usare segreti Distributed Apps Runtime per recuperare in modo sicuro i metadati di configurazione.

Questa guida illustra come configurare i componenti dapr per i servizi di App Azure Container.

Schema dei componenti

Nel progetto open source Dapr tutti i componenti sono conformi allo schema di base seguente.

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]

In App Contenitore di Azure lo schema precedente è leggermente semplificato per supportare i componenti Dapr e rimuovere campi non necessari, inclusi apiVersionkindi metadati , e le proprietà di specifiche e metadati ridondanti.

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

Ambiti dei componenti

Per impostazione predefinita, tutte le app contenitore abilitate per Distributed Apps Runtime all'interno dello stesso ambiente caricano il set completo di componenti distribuiti. Per garantire che solo le app contenitore appropriate carichino i componenti in fase di esecuzione, è necessario usare gli ambiti dell'applicazione. Nell'esempio seguente il componente viene caricato solo dalle due app contenitore abilitate per Dapr con ID APP-ID-1 applicazione Dapr e 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]

Nota

Gli ambiti del componente Dapr corrispondono all'ID applicazione Dapr di un'app contenitore, non al nome dell'app contenitore.

Connessione a servizi esterni tramite Dapr

Esistono alcuni approcci supportati nelle app contenitore per stabilire in modo sicuro le connessioni ai servizi esterni per i componenti dapr.

  1. Uso dell'identità gestita
  2. Usando un riferimento al componente dell'archivio segreto Dapr creando una delle due operazioni seguenti:

Uso dell'identità gestita

Per i servizi ospitati in Azure, Dapr può usare l'identità gestita delle app contenitore con ambito per eseguire l'autenticazione al provider di servizi back-end. Quando si usa l'identità gestita, non è necessario includere informazioni segrete in un manifesto del componente. L'uso dell'identità gestita è preferibile perché elimina l'archiviazione dell'input sensibile nei componenti e non richiede la gestione di un archivio segreto.

Nota

Il azureClientId campo dei metadati (ID client dell'identità gestita) è necessario per qualsiasi componente che esegue l'autenticazione con l'identità gestita assegnata dall'utente.

Uso di un riferimento al componente dell'archivio segreto Dapr

Quando si creano componenti Dapr per i servizi non abilitati per l'ID Entra, alcuni campi di metadati richiedono valori di input sensibili. L'approccio consigliato per il recupero di questi segreti consiste nel fare riferimento a un componente dell'archivio segreto Dapr esistente che accede in modo sicuro alle informazioni segrete.

Per configurare un riferimento:

  1. Creare un componente dell'archivio segreti dapr usando lo schema di App contenitore di Azure. Il tipo di componente per tutti gli archivi segreti Dapr supportati inizia con secretstores..
  2. Creare componenti aggiuntivi (in base alle esigenze) che fanno riferimento al componente dell'archivio segreto Dapr creato per recuperare l'input dei metadati sensibili.

Creazione di un componente dell'archivio segreti dapr

Quando si crea un componente dell'archivio segreti in App Azure Container, è possibile fornire informazioni riservate nella sezione metadati in uno dei modi seguenti:

Archivi segreti di Azure Key Vault

Il componente seguente illustra la configurazione più semplice possibile dell'archivio segreti usando un archivio segreto di Azure Key Vault. In questo esempio le applicazioni del server di pubblicazione e del sottoscrittore sono configurate per avere un'identità gestita assegnata dal sistema o dall'utente con autorizzazioni appropriate per l'istanza di Azure Key Vault.

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
Segreti Kubernetes gestiti dalla piattaforma

I segreti Kubernetes, le variabili di ambiente locali e gli archivi segreti Dapr file locali non sono supportati nelle app contenitore di Azure. In alternativa all'archivio dei segreti Kubernetes predefinito di Dapr upstream, App Contenitore di Azure offre un approccio gestito dalla piattaforma per la creazione e l'uso dei segreti Kubernetes.

Questa configurazione del componente definisce il valore sensibile come parametro segreto a cui è possibile fare riferimento dalla sezione dei metadati. Questo approccio può essere usato per connettersi a servizi non di Azure o in scenari di sviluppo/test per distribuire rapidamente i componenti tramite l'interfaccia della riga di comando senza configurare un archivio segreto o un'identità gestita.

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

Riferimento ai componenti dell'archivio segreto Dapr

Dopo aver creato un archivio segreto Dapr usando uno degli approcci precedenti, è possibile fare riferimento all'archivio segreto di altri componenti Dapr nello stesso ambiente. Nell'esempio seguente viene illustrato l'uso dell'autenticazione Entra ID.

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

Esempi di componenti

Per creare un componente Dapr tramite l'interfaccia della riga di comando di App contenitore, è possibile usare un manifesto YAML delle app contenitore. Quando si configurano più componenti, è necessario creare e applicare un file YAML separato per ogni componente.

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

Passaggi successivi

Informazioni su come impostare la resilienza dei componenti Dapr.