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 apiVersion
kind
i 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.
- Uso dell'identità gestita
- Usando un riferimento al componente dell'archivio segreto Dapr creando una delle due operazioni seguenti:
- Un archivio segreto di Azure Key Vault, che usa un'identità gestita o
- Segreti Kubernetes gestiti dalla piattaforma
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:
- 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.
. - 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:
- Per un archivio segreto di Azure Key Vault, usare l'identità gestita per stabilire la connessione.
- Per gli archivi segreti non di Azure, usare segreti Kubernetes gestiti dalla piattaforma definiti direttamente come parte del manifesto del componente.
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.