Composants Dapr dans Azure Container Apps
Dapr utilise une conception modulaire où la fonctionnalité est fournie en tant que composant. L’utilisation des composants Dapr est facultative et dictée exclusivement par les besoins de votre application.
Les composants Dapr dans les applications conteneur sont des ressources au niveau de l’environnement qui :
- peuvent fournir un modèle d’abstraction enfichable pour la connexion à des services externes de prise en charge ;
- peuvent être partagés entre les applications conteneur ou étendus à des applications conteneur spécifiques ;
- peuvent utiliser des secrets Dapr pour récupérer en toute sécurité des métadonnées de configuration.
Dans ce guide, vous allez apprendre à configurer les composants Dapr pour vos services Azure Container Apps.
Schéma de composant
Dans le projet open source Dapr, tous les composants sont conformes au schéma de base suivant.
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]
Dans Azure Container Apps, le schéma ci-dessus est légèrement simplifié pour prendre en charge les composants Dapr et supprimer des champs inutiles, y compris apiVersion
, kind
, des métadonnées redondantes et des propriétés de spécification.
componentType: [COMPONENT-TYPE]
version: v1
initTimeout: [TIMEOUT-DURATION]
ignoreErrors: [BOOLEAN]
metadata:
- name: [METADATA-NAME]
value: [METADATA-VALUE]
Étendues des composants
Par défaut, toutes les applications de conteneur compatibles avec Dapr dans le même environnement chargeront l’ensemble des composants déployés. Pour garantir que seules les applications conteneur appropriées chargent des composants au moment de l’exécution, des étendues d’application doivent être utilisées. Dans l’exemple suivant, le composant est uniquement chargé par les deux applications conteneur compatibles Dapr avec les ID d’application Dapr APP-ID-1
et 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]
Remarque
Les étendues des composants Dapr correspondent à l’ID d’application Dapr d’une application conteneur, et non au nom de l’application conteneur.
Connexion à des services externes via Dapr
Il existe quelques approches prises en charge dans les applications conteneur pour établir en toute sécurité des connexions à des services externes pour les composants Dapr.
- Utilisation d’une identité managée
- Utilisation d’une référence de composant Magasin de secrets Dapr en créant :
- un magasin de secrets Azure Key Vault, qui utilise une identité managée, ou
- des secrets Kubernetes gérés par la plateforme
Utilisation d’une identité managée
Pour les services hébergés par Azure, Dapr peut utiliser l’identité managée des applications conteneur délimitées pour s’authentifier auprès du fournisseur de services back-end. Lorsque vous utilisez une identité managée, vous n’avez pas besoin d’inclure d’informations secrètes dans un manifeste de composant. L’utilisation de l’identité managée est recommandée, car elle élimine le stockage des entrées sensibles dans les composants et ne nécessite pas de gestion d’un magasin de secrets.
Remarque
Le azureClientId
champ de métadonnées (l’ID client de l’identité managée) est requis pour tout composant s’authentifiant avec une identité managée affectée par l’utilisateur.
Utilisation d’une référence de composant Magasin de secrets Dapr
Lorsque vous créez des composants Dapr pour des services incompatibles avec Entra ID, certains champs de métadonnées nécessitent des valeurs d’entrée sensibles. L’approche recommandée pour récupérer ces secrets consiste à référencer un composant de magasin de secrets Dapr existant qui accède en toute sécurité aux informations sur les secrets.
Pour configurer une référence :
- Créez un composant Magasin de secrets Dapr à l’aide du schéma Azure Container Apps. Le type de composant pour tous les magasins de secrets Dapr pris en charge commence par
secretstores.
. - Créez des composants supplémentaires (en fonction de vos besoins) qui référencent le composant Magasin de secrets Dapr que vous avez créé pour récupérer l’entrée de métadonnées sensibles.
Création d’un composant Magasin de secrets Dapr
Lors de la création d’un composant Magasin de secrets dans Azure Container Apps, vous pouvez fournir des informations sensibles dans la section métadonnées de l’une des manières suivantes :
- Pour un magasin de secrets Azure Key Vault, utilisez l’identité managée pour établir la connexion.
- Pour les magasins de secrets non-Azure, utilisez des secrets Kubernetes gérés par la plateforme qui sont définis directement dans le cadre du manifeste du composant.
Magasins de secrets Azure Key Vault
Le composant suivant présente la configuration de magasin de secrets la plus simple possible en utilisant un magasin de secrets Azure Key Vault. Dans cet exemple, les applications de publication et souscription sont configurées pour disposer d’une identité managée affectée par l’utilisateur ou le système avec les autorisations appropriées sur l’instance 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
Secrets Kubernetes gérés par la plateforme
Les secrets Kubernetes, les variables d’environnement local et les magasins de secrets Dapr de fichier local ne sont pas pris en charge dans Azure Container Apps. En guise d’alternative au magasin de secrets Kubernetes Dapr par défaut en amont, Azure Container Apps fournit une approche gérée par la plateforme pour la création et l’exploitation des secrets Kubernetes.
Cette configuration de composant définit la valeur sensible en tant que paramètre secret qui peut être référencé à partir de la section métadonnées. Cette approche peut être utilisée pour se connecter à des services non-Azure ou dans des scénarios de développement/test pour déployer rapidement des composants via l’interface CLI sans configurer de magasin de secrets ou d’identité managée.
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
Référencement des composants du magasin de secrets Dapr
Une fois que vous avez créé un magasin de secrets Dapr à l’aide de l’une des approches précédentes, vous pouvez référencer ce magasin de secrets à partir d’autres composants Dapr dans le même environnement. L’exemple suivant illustre l’utilisation de l’authentification 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
Exemples de composants
Pour créer un composant Dapr via l’interface CLI Container Apps, vous pouvez utiliser un manifeste YAML d’applications conteneur. Lorsque vous configurez plusieurs composants, vous devez créer et appliquer un fichier YAML distinct pour chaque composant.
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
Étapes suivantes
Découvrir comment définir la résilience des composants Dapr.