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
, kind
en 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.
- Beheerde identiteit gebruiken
- Als u een naslaginformatie over het geheim archief van een Dapr-archief gebruikt, maakt u een van de volgende opties:
- Een Azure Key Vault-geheimarchief, dat gebruikmaakt van een beheerde identiteit of
- Door platform beheerde Kubernetes-geheimen
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:
- 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.
. - 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:
- Gebruik voor een Azure Key Vault-geheimarchief beheerde identiteit om de verbinding tot stand te brengen.
- Gebruik voor niet-Azure-geheimarchieven door het platform beheerde Kubernetes-geheimen die rechtstreeks zijn gedefinieerd als onderdeel van het onderdeelmanifest.
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.