Share via


Componentes de Dapr en Azure Container Apps

Dapr usa un diseño modular en el que la funcionalidad se entrega como componente. El uso de componentes de Dapr es opcional y está determinado exclusivamente por las necesidades de la aplicación.

Los componentes de Dapr de las aplicaciones de contenedor son recursos de nivel de entorno que hacen lo siguiente:

  • Pueden proporcionar un modelo de abstracción enchufable para conectarse a servicios externos compatibles.
  • Se pueden compartir entre aplicaciones de contenedor o limitarse a aplicaciones de contenedor específicas.
  • Pueden usar secretos de Dapr para recuperar de forma segura los metadatos de configuración.

En esta guía, aprenderá a configurar componentes de Dapr para los servicios de Azure Container Apps.

Esquema de componentes

En el proyecto de código abierto de Dapr, todos los componentes se ajustan al siguiente esquema básico.

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]

En Azure Container Apps, el esquema anterior se ha simplificado ligeramente para admitir componentes de Dapr y quitar campos innecesarios, incluidos apiVersion, kind, y los metadatos y propiedades de especificación redundantes.

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

Ámbitos de componente

De manera predeterminada, todas las aplicaciones de contenedor habilitadas para Dapr dentro del mismo entorno cargan el conjunto completo de componentes implementados. Para asegurarse de que solo las aplicaciones de contenedor adecuadas cargan componentes en tiempo de ejecución, se deben usar ámbitos de aplicación. En el ejemplo siguiente, el componente solo se carga mediante las dos aplicaciones de contenedor habilitadas para Dapr con los identificadores de aplicación de Dapr APP-ID-1 y 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:

Los ámbitos de componentes de Dapr corresponden al id. de aplicación de Dapr de una aplicación de contenedor, no a su nombre.

Conexión a servicios externos mediante Dapr

Hay algunos enfoques admitidos en las aplicaciones de contenedor para establecer conexiones a servicios externos de forma segura para los componentes de Dapr.

  1. Uso de identidades administradas
  2. Para usar una referencia a un componente del almacén de secretos de Dapr, cree uno de los siguientes elementos:

Uso de una identidad administrada

En el caso de los servicios hospedados en Azure, Dapr puede usar la identidad administrada de las aplicaciones de contenedor con ámbito para autenticarse en el proveedor de servicios back-end. Al usar la identidad administrada, no es necesario incluir información secreta en un manifiesto de componente. Se prefiere usar la identidad administrada, ya que elimina el almacenamiento de entradas confidenciales en los componentes y no requiere la administración de un almacén de secretos.

Nota:

El campo de metadatos azureClientId (el id. de cliente de la identidad administrada) es necesario para cualquier componente que se autentique con la identidad administrada asignada por el usuario.

Uso de una referencia de componente de almacén de secretos de Dapr

Al crear componentes de Dapr para servicios no habilitados para Entra ID, determinados campos de metadatos requieren valores de entrada confidenciales. El enfoque recomendado para recuperar estos secretos es hacer referencia a un componente de almacén de secretos Dapr existente que accede de forma segura a la información secreta.

Para configurar una referencia:

  1. Cree un componente de almacén de secretos de Dapr mediante el esquema de Azure Container Apps. El tipo de componente para todos los almacenes secretos de Dapr admitidos comienza por secretstores..
  2. Cree componentes adicionales (según sea necesario) que hagan referencia al componente de almacén de secretos de Dapr que creó para recuperar la entrada de metadatos confidenciales.

Creación de un componente de almacén de secretos de Dapr

Al crear un componente de almacén secreto en Azure Container Apps, puede proporcionar información confidencial en la sección de metadatos de cualquiera de las maneras siguientes:

Almacenes de secretos de Azure Key Vault

En el componente siguiente se muestra la configuración de almacén de secretos más sencilla posible mediante un almacén de secretos de Azure Key Vault. En este ejemplo, las aplicaciones de publicador y suscriptor se configuran para tener una identidad administrada asignada por el sistema o por el usuario con los permisos adecuados en la instancia de 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
Secretos de Kubernetes administrado por la plataforma

Azure Container Apps no admite secretos de Kubernetes, variables de entorno local y almacenes secretos de Dapr de archivos locales. Como alternativa al almacén de secretos de Kubernetes predeterminado de Dapr ascendente, Azure Container Apps proporciona un enfoque administrado por la plataforma para crear y usar los secretos de Kubernetes.

Esta configuración de componente define el valor confidencial como un parámetro secreto al que se puede hacer referencia desde la sección de metadatos. Este enfoque se puede usar para conectarse a servicios que no son de Azure o en escenarios de desarrollo y pruebas para implementar rápidamente componentes mediante la CLI sin configurar un almacén de secretos ni una identidad administrada.

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

Referencia a componentes del almacén secreto de Dapr

Una vez que haya creado un almacén de secretos de Dapr mediante uno de los enfoques anteriores, puede hacer referencia a ese almacén de secretos desde otros componentes de Dapr del mismo entorno. En el ejemplo siguiente, el campo secretStoreComponent se rellena con el nombre del almacén de secretos especificado en los ejemplos anteriores, donde se almacena sb-root-connectionstring.

componentType: pubsub.azure.servicebus.queue
version: v1
secretStoreComponent: "my-secret-store"
metadata:
  - name: connectionString
    secretRef: sb-root-connectionstring
scopes:
  - publisher-app
  - subscriber-app

Ejemplos de componentes

Para crear un componente de Dapr mediante la CLI de Container Apps, puede usar un manifiesto YAML de aplicaciones de contenedor. Al configurar varios componentes, debe crear y aplicar un archivo YAML independiente para cada 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: connectionString
    secretRef: sb-root-connectionstring
scopes:
  - publisher-app
  - subscriber-app

Pasos siguientes

Aprenda a establecer la resistencia de los componentes de Dapr.