Dapr-Komponenten in Azure-Container-Apps
Dapr verwendet ein modulares Design, bei dem Funktionalität als Komponente bereitgestellt wird. Die Verwendung von Dapr-Komponenten ist optional und wird ausschließlich von den Anforderungen Ihrer Anwendung bestimmt.
Dapr-Komponenten in Container-Apps sind Ressourcen auf Umgebungsebene, die Folgendes können:
- Ein austauschbares („pluggable“) Abstraktionsmodell bereitstellen, um eine Verbindung mit externen Unterstützungsdiensten herzustellen.
- Von Container-Apps gemeinsam genutzt oder auf bestimmte Container-Apps begrenzt werden.
- Dapr-Geheimnisse verwenden, um Konfigurationsmetadaten sicher abzurufen.
In diesem Handbuch erfahren Sie, wie Sie Dapr-Komponenten für Ihre Azure-Container-Apps-Dienste konfigurieren.
Komponentenschema
Im Open-Source-Projekt Dapr entsprechen alle Komponenten dem folgendenBasisschema.
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 Container Apps wurde das obige Schema leicht vereinfacht, um Dapr-Komponenten zu unterstützen und unnötige Felder zu entfernen, einschließlich apiVersion
, kind
und redundanter Metadaten und Eigenschaften von Spezifikationen.
componentType: [COMPONENT-TYPE]
version: v1
initTimeout: [TIMEOUT-DURATION]
ignoreErrors: [BOOLEAN]
metadata:
- name: [METADATA-NAME]
value: [METADATA-VALUE]
Komponentenbereiche
Standardmäßig laden alle Dapr-fähigen Container-Apps innerhalb derselben Umgebung den vollständigen Satz an bereitgestellten Komponenten. Um sicherzustellen, dass nur die entsprechenden Container-Apps Komponenten zur Laufzeit laden, sollten Anwendungsbereiche verwendet werden. Im folgenden Beispiel wird die Komponente nur von den beiden Dapr-fähigen Container-Apps mit den Dapr-Anwendungs-IDs APP-ID-1
und APP-ID-2
geladen:
componentType: [COMPONENT-TYPE]
version: v1
initTimeout: [TIMEOUT-DURATION]
ignoreErrors: [BOOLEAN]
metadata:
- name: [METADATA-NAME]
value: [METADATA-VALUE]
scopes:
- [APP-ID-1]
- [APP-ID-2]
Hinweis
Dapr-Komponentenbereiche entsprechen der Dapr-Anwendungs-ID einer Container-App, nicht dem Container-App-Namen.
Herstellen einer Verbindung mit externen Diensten über Dapr
Es gibt ein paar Ansätze, die in Container-Apps unterstützt werden, um sichere Verbindungen mit externen Diensten für Dapr-Komponenten herzustellen.
- Verwenden einer verwalteten Identität
- Verwenden eines Dapr-Verweises auf Komponenten des Geheimspeichers durch Erstellen einer der folgenden Komponenten:
- Eines geheimen Azure Key Vault-Speichers, der eine verwaltete Identität verwendet, oder
- von plattformseitig verwalteten Kubernetes-Geheimnissen
Verwenden einer verwalteten Identität
Für in Azure gehostete Dienste kann Dapr die verwaltete Identität der Container-Apps mit Gültigkeitsbereich verwenden, um sich beim Back-End-Dienstanbieter zu authentifizieren. Wenn Sie eine verwaltete Identität verwenden, müssen Sie keine Geheimnisinformationen in ein Komponentenmanifest einschließen. Die Verwendung verwalteter Identitäten wird bevorzugt, da die Speicherung vertraulicher Eingaben in Komponenten dadurch vermieden wird und keine Verwaltung eines Geheimnisspeichers erforderlich ist.
Hinweis
Das Metadatenfeld azureClientId
(die Client-ID der verwalteten Identität) ist für jede Komponente erforderlich, die sich mit einer benutzerseitig zugewiesenen verwalteten Identität authentifiziert.
Verwenden eines Dapr-Geheimnisspeicher-Komponentenverweises
Wenn Sie Dapr-Komponenten für nicht Zugangs-aktivierte Dienste erstellen, erfordern bestimmte Metadatenfelder vertrauliche Eingabewerte. Der empfohlene Ansatz zum Abrufen dieser Geheimnisse besteht darin, auf eine vorhandene Dapr-Geheimnisspeicherkomponente zu verweisen, die sicher auf Geheimnisinformationen zugreift.
So richten Sie einen Verweis ein:
- Erstellen Sie eine Dapr-Geheimnisspeicherkomponente mithilfe des Azure-Container-Apps-Schemas. Der Komponententyp für alle unterstützten Dapr-Geheimspeicher beginnt mit
secretstores.
. - Erstellen Sie (nach Bedarf) zusätzliche Komponenten, die auf die Dapr-Geheimnisspeicherkomponente, die Sie erstellt haben, verweisen, um die Eingabe vertraulicher Metadaten abzurufen.
Erstellen einer Dapr-Komponente für den geheimen Speicher
Beim Erstellen einer Geheimnisspeicherkomponente in Azure-Container-Apps können Sie vertrauliche Informationen im Abschnitt der Metadaten auf eine der folgenden Weisen bereitstellen:
- Verwenden Sie für einen Azure Key Vault-Geheimnisspeicher ,eine verwaltete Identität, um die Verbindung herzustellen.
- Verwenden Sie für einen Nicht-Azure-Geheimnisspeicher ,plattformseitig verwaltete Kubernetes-Geheimnisse, die direkt als Teil des Komponentenmanifests definiert werden.
Azure Key Vault-Geheimnisspeicher
Die folgende Komponente zeigt die einfachste Konfiguration des geheimen Speichers mit einem geheimen Azure Key Vault-Speicher. In diesem Beispiel werden Herausgeber- und Abonnentenanwendungen so konfiguriert, dass sie sowohl eine systemseitig als auch eine benutzerseitig zugewiesene verwaltete Identität mit entsprechenden Berechtigungen für die Azure Key Vault-Instanz haben.
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
Plattformseitig verwaltete Kubernetes-Geheimnisse
Kubernetes-Geheimnisse, lokale Umgebungsvariablen und lokale Dapr-Dateigeheimnisspeicher werden in den Azure-Container Apps nicht unterstützt. Als Alternative zum standardmäßigen Kubernetes-Geheimnisspeicher von Dapr bietet Azure Container Apps einen plattformseitig verwalteten Ansatz zum Erstellen und Nutzen von Kubernetes-Geheimnissen.
Diese Komponentenkonfiguration definiert den vertraulichen Wert als Geheimnisparameter, auf den im Metadatenabschnitt verwiesen werden kann. Dieser Ansatz kann verwendet werden, um eine Verbindung mit Nicht-Azure-Diensten herzustellen, oder um in Entwicklungs-/Testszenarien Komponenten schnell über die CLI bereitzustellen, ohne einen Geheimnisspeicher oder eine verwaltete Identität einrichten zu müssen.
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
Verweisen auf Dapr-Geheimnisspeicherkomponenten
Nachdem Sie einen Dapr-Geheimnisspeicher mit einem der oben genannten Ansätze erstellt haben, können Sie aus anderen Dapr-Komponenten in derselben Umgebung auf diesen Geheimnisspeicher verweisen. Im folgenden Beispiel wird das secretStoreComponent
-Feld mit dem Namen des in den vorigen Beispielen angegebenen Geheimnisspeichers ausgefüllt, in dem die sb-root-connectionstring
gespeichert ist.
componentType: pubsub.azure.servicebus.queue
version: v1
secretStoreComponent: "my-secret-store"
metadata:
- name: connectionString
secretRef: sb-root-connectionstring
scopes:
- publisher-app
- subscriber-app
Komponentenbeispiele
Um eine Dapr-Komponente über die Container Apps CLI zu erstellen, können Sie ein YAML-Manifest für Container-Apps verwenden. Beim Konfigurieren mehrerer Komponenten müssen Sie für jede Komponente eine separate YAML-Datei erstellen und anwenden.
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
Nächste Schritte
Erfahren Sie, wie Sie die Resilienz der Dapr-Komponenten festlegen.