Delen via


Dapr-onderdelen in Azure Container Apps

Dapr maakt gebruik van een modulair ontwerp waarbij functionaliteit wordt geleverd als onderdeel. Het gebruik van Dapr-onderdelen is optioneel en wordt uitsluitend bepaald door de behoeften van uw toepassing.

Dapr-onderdelen in container-apps zijn resources op omgevingsniveau die:

  • Kan een pluggable abstractiemodel bieden om verbinding te maken met ondersteunende externe services.
  • Kan worden gedeeld tussen container-apps of worden afgestemd op specifieke container-apps.
  • Kan Dapr-geheimen gebruiken om configuratiemetagegevens veilig op te halen.

In deze handleiding leert u hoe u Dapr-onderdelen configureert voor uw Azure Container Apps-services.

Onderdeelschema

In het opensource-project Dapr voldoen alle onderdelen aan het volgende basisschema.

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 Azure Container Apps is het bovenstaande schema enigszins vereenvoudigd om Dapr-onderdelen te ondersteunen en overbodige velden, waaronder apiVersion, kinden redundante metagegevens en specificatie-eigenschappen, te verwijderen.

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

Onderdeelbereiken

Standaard laden alle dapr-container-apps in dezelfde omgeving de volledige set geïmplementeerde onderdelen. Om ervoor te zorgen dat alleen de juiste container-apps onderdelen laden tijdens runtime, moeten toepassingsbereiken worden gebruikt. In het volgende voorbeeld wordt het onderdeel alleen geladen door de twee dapr-container-apps met Dapr-toepassings-id's APP-ID-1 en 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]

Notitie

Dapr-onderdeelbereiken komen overeen met de Dapr-toepassings-id van een container-app, niet de naam van de container-app.

Verbinding maken met externe services via Dapr

Er zijn enkele benaderingen die worden ondersteund in container-apps om veilig verbindingen tot stand te brengen met externe services voor Dapr-onderdelen.

  1. Beheerde identiteit gebruiken
  2. Als u een naslaginformatie over het geheim archief van een Dapr-archief gebruikt, maakt u een van de volgende opties:

Beheerde identiteit gebruiken

Voor door Azure gehoste services kan Dapr de beheerde identiteit van de scoped container-apps gebruiken om te verifiëren bij de back-endserviceprovider. Wanneer u beheerde identiteit gebruikt, hoeft u geen geheime informatie op te nemen in een onderdeelmanifest. Het gebruik van een beheerde identiteit heeft de voorkeur omdat hiermee de opslag van gevoelige invoer in onderdelen wordt geëlimineerd en er geen geheimarchief hoeft te worden beheerd.

Notitie

Het azureClientId metagegevensveld (de client-id van de beheerde identiteit) is vereist voor elk onderdeel dat wordt geverifieerd met een door de gebruiker toegewezen beheerde identiteit.

Een naslaginformatie over een dapr-geheimarchiefonderdeel gebruiken

Wanneer u Dapr-onderdelen maakt voor services met niet-Entra-id's, zijn voor bepaalde metagegevensvelden gevoelige invoerwaarden vereist. De aanbevolen methode voor het ophalen van deze geheimen is om te verwijzen naar een bestaand Dapr-geheimarchiefonderdeel dat veilig toegang heeft tot geheime informatie.

Een verwijzing instellen:

  1. Maak een Dapr Secret Store-onderdeel met behulp van het Azure Container Apps-schema. Het onderdeeltype voor alle ondersteunde Dapr-geheime winkels begint met secretstores..
  2. Maak extra onderdelen (indien nodig) die verwijzen naar het Dapr Secret Store-onderdeel dat u hebt gemaakt om de gevoelige metagegevensinvoer op te halen.

Een Dapr-geheimarchiefonderdeel maken

Wanneer u een geheim archiefonderdeel maakt in Azure Container Apps, kunt u gevoelige informatie opgeven in de sectie metagegevens op een van de volgende manieren:

Geheimenarchieven van Azure Key Vault

Het volgende onderdeel toont de eenvoudigste configuratie van het geheimarchief met behulp van een Azure Key Vault-geheimarchief. In dit voorbeeld zijn uitgevers- en abonneetoepassingen geconfigureerd voor beide een door het systeem of de gebruiker toegewezen beheerde identiteit met de juiste machtigingen voor het Azure Key Vault-exemplaar.

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
Door het platform beheerde Kubernetes-geheimen

Kubernetes-geheimen, lokale omgevingsvariabelen en dapr-geheimenarchieven voor lokaal bestand worden niet ondersteund in Azure Container Apps. Azure Container Apps biedt een platformbeheerde benadering voor het maken en gebruiken van Kubernetes-geheimen als alternatief voor de upstream Dapr-standaardopslag voor Kubernetes.

Deze onderdeelconfiguratie definieert de gevoelige waarde als een geheime parameter waarnaar kan worden verwezen vanuit de sectie metagegevens. Deze benadering kan worden gebruikt om verbinding te maken met niet-Azure-services of in ontwikkel-/testscenario's voor het snel implementeren van onderdelen via de CLI zonder een geheime opslag of beheerde identiteit in te stellen.

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

Referencing Dapr secret store components

Zodra u een Dapr-geheimarchief maakt met behulp van een van de vorige benaderingen, kunt u verwijzen naar het geheime archief van andere Dapr-onderdelen in dezelfde omgeving. In het volgende voorbeeld ziet u hoe u Entra ID-verificatie gebruikt.

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

Voorbeelden van onderdelen

Als u een Dapr-onderdeel wilt maken via de Container Apps CLI, kunt u een YAML-manifest voor container-apps gebruiken. Wanneer u meerdere onderdelen configureert, moet u voor elk onderdeel een afzonderlijk YAML-bestand maken en toepassen.

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

Volgende stappen

Meer informatie over het instellen van tolerantie voor Dapr-onderdelen.