Dapr-komponenter i Azure Container Apps
Dapr använder en modulär design där funktioner levereras som en komponent. Användningen av Dapr-komponenter är valfri och styrs uteslutande av programmets behov.
Dapr-komponenter i containerappar är resurser på miljönivå som:
- Kan tillhandahålla en anslutningsbar abstraktionsmodell för anslutning till externa tjänster.
- Kan delas mellan containerappar eller begränsas till specifika containerappar.
- Kan använda Dapr-hemligheter för att på ett säkert sätt hämta konfigurationsmetadata.
I den här guiden får du lära dig hur du konfigurerar Dapr-komponenter för dina Azure Container Apps-tjänster.
Komponentschema
I Dapr-projektet med öppen källkod följer alla komponenter följande grundläggande schema.
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]
I Azure Container Apps är schemat ovan något förenklat för att stödja Dapr-komponenter och ta bort onödiga fält, inklusive apiVersion
, kind
och redundanta metadata och specifikationsegenskaper.
componentType: [COMPONENT-TYPE]
version: v1
initTimeout: [TIMEOUT-DURATION]
ignoreErrors: [BOOLEAN]
metadata:
- name: [METADATA-NAME]
value: [METADATA-VALUE]
Komponentomfattningar
Som standard läser alla Dapr-aktiverade containerappar i samma miljö in hela uppsättningen distribuerade komponenter. För att säkerställa att endast lämpliga containerappar läser in komponenter vid körning bör programomfattningar användas. I följande exempel läses komponenten bara in av de två Dapr-aktiverade containerapparna med Dapr-program-ID:t APP-ID-1
och 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]
Kommentar
Dapr-komponentomfång motsvarar Dapr-program-ID:t för en containerapp, inte namnet på containerappen.
Ansluta till externa tjänster via Dapr
Det finns några metoder som stöds i containerappar för att upprätta anslutningar till externa tjänster för Dapr-komponenter på ett säkert sätt.
- Använda hanterad identitet
- Använd en dapr-komponentreferens för hemligt arkiv genom att skapa något av följande:
- Ett hemligt Azure Key Vault-arkiv, som använder hanterad identitet, eller
- Plattformshanterade Kubernetes-hemligheter
Använda hanterad identitet
För Azure-värdbaserade tjänster kan Dapr använda den hanterade identiteten för de begränsade containerapparna för att autentisera till serverdelstjänstleverantören. När du använder hanterad identitet behöver du inte inkludera hemlig information i ett komponentmanifest. Att använda hanterad identitet är att föredra eftersom det eliminerar lagring av känsliga indata i komponenter och kräver inte hantering av ett hemligt arkiv.
Kommentar
Metadatafältet azureClientId
(klient-ID för den hanterade identiteten) krävs för alla komponenter som autentiserar med användartilldelad hanterad identitet.
Använda en dapr-referens för hemlig lagringskomponent
När du skapar Dapr-komponenter för tjänster som inte är Entra-ID-aktiverade kräver vissa metadatafält känsliga indatavärden. Den rekommenderade metoden för att hämta dessa hemligheter är att referera till en befintlig Dapr-komponent för hemligt arkiv som på ett säkert sätt kommer åt hemlig information.
Så här konfigurerar du en referens:
- Skapa en Dapr secret store-komponent med hjälp av Azure Container Apps-schemat. Komponenttypen för alla Dapr-hemlighetslager som stöds börjar med
secretstores.
. - Skapa extra komponenter (efter behov) som refererar till dapr-hemlighetsarkivkomponenten som du skapade för att hämta indata för känsliga metadata.
Skapa en Dapr-komponent för hemligt arkiv
När du skapar en hemlig butikskomponent i Azure Container Apps kan du ange känslig information i metadataavsnittet på något av följande sätt:
- För ett hemligt Azure Key Vault-arkiv använder du hanterad identitet för att upprätta anslutningen.
- För icke-Azure-hemliga butiker använder du plattformshanterade Kubernetes-hemligheter som definieras direkt som en del av komponentmanifestet.
Hemliga Azure Key Vault-butiker
Följande komponent visar den enklaste möjliga hemliga butikskonfigurationen med hjälp av ett hemligt Azure Key Vault-arkiv. I det här exemplet konfigureras program för utgivare och prenumeranter att både ha en system- eller användartilldelad hanterad identitet med lämpliga behörigheter för Azure Key Vault-instansen.
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
Plattformshanterade Kubernetes-hemligheter
Kubernetes-hemligheter, lokala miljövariabler och Lokala dapr-filhemlighetslager stöds inte i Azure Container Apps. Som ett alternativ för den överordnade Dapr-standardbutiken för Kubernetes-hemligheter tillhandahåller Azure Container Apps en plattformshanterad metod för att skapa och utnyttja Kubernetes-hemligheter.
Den här komponentkonfigurationen definierar det känsliga värdet som en hemlig parameter som kan refereras från metadataavsnittet. Den här metoden kan användas för att ansluta till icke-Azure-tjänster eller i utvecklings-/testscenarier för att snabbt distribuera komponenter via CLI utan att konfigurera ett hemligt arkiv eller hanterad identitet.
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
Referera till Dapr secret store-komponenter
När du har skapat ett Hemligt Dapr-arkiv med någon av de tidigare metoderna kan du referera till det hemliga arkivet från andra Dapr-komponenter i samma miljö. I följande exempel visas hur du använder Entra ID-autentisering.
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
Komponentexempel
Om du vill skapa en Dapr-komponent via Container Apps CLI kan du använda ett YAML-manifest för containerappar. När du konfigurerar flera komponenter måste du skapa och tillämpa en separat YAML-fil för varje komponent.
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