Składniki języka Dapr w usłudze Azure Container Apps
Język Dapr używa modułowego projektu, w którym funkcjonalność jest dostarczana jako składnik. Użycie składników języka Dapr jest opcjonalne i dyktowane wyłącznie przez potrzeby aplikacji.
Składniki języka Dapr w aplikacjach kontenera to zasoby na poziomie środowiska, które:
- Może zapewnić podłączany model abstrakcji na potrzeby nawiązywania połączenia z pomocniczymi usługami zewnętrznymi.
- Może być współużytkowany w aplikacjach kontenerów lub w określonym zakresie dla określonych aplikacji kontenerów.
- Może używać wpisów tajnych języka Dapr do bezpiecznego pobierania metadanych konfiguracji.
Z tego przewodnika dowiesz się, jak skonfigurować składniki języka Dapr dla usług Azure Container Apps.
Schemat składnika
W projekcie open source Języka Dapr wszystkie składniki są zgodne z następującym podstawowym schematem.
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]
W usłudze Azure Container Apps powyższy schemat jest nieco uproszczony w celu obsługi składników języka Dapr i usuwania niepotrzebnych pól, w tym apiVersion
kind
, i nadmiarowych metadanych i właściwości specyfikacji.
componentType: [COMPONENT-TYPE]
version: v1
initTimeout: [TIMEOUT-DURATION]
ignoreErrors: [BOOLEAN]
metadata:
- name: [METADATA-NAME]
value: [METADATA-VALUE]
Zakresy składników
Domyślnie wszystkie aplikacje kontenerów z obsługą języka Dapr w tym samym środowisku ładują pełny zestaw wdrożonych składników. Aby zapewnić, że tylko odpowiednie aplikacje kontenerów ładują składniki w czasie wykonywania, należy używać zakresów aplikacji. W poniższym przykładzie składnik jest ładowany tylko przez dwie aplikacje kontenerów z obsługą języka Dapr z identyfikatorami APP-ID-1
aplikacji Dapr i 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]
Uwaga
Zakresy składników języka Dapr odpowiadają identyfikatorowi aplikacji kontenera dapr, a nie nazwie aplikacji kontenera.
Nawiązywanie połączenia z usługami zewnętrznymi za pośrednictwem języka Dapr
Istnieje kilka metod obsługiwanych w aplikacjach kontenerów w celu bezpiecznego nawiązywania połączeń z usługami zewnętrznymi dla składników języka Dapr.
- Korzystanie z tożsamości zarządzanej
- Korzystając z odwołania do składnika magazynu wpisów tajnych dapr, utwórz jedną z następujących metod:
- Magazyn wpisów tajnych usługi Azure Key Vault, który używa tożsamości zarządzanej lub
- Wpisy tajne rozwiązania Kubernetes zarządzane przez platformę
Korzystanie z tożsamości zarządzanej
W przypadku usług hostowanych na platformie Azure usługa Dapr może używać tożsamości zarządzanej aplikacji kontenera o określonym zakresie do uwierzytelniania u dostawcy usług zaplecza. W przypadku korzystania z tożsamości zarządzanej nie musisz dołączać informacji tajnych do manifestu składnika. Użycie tożsamości zarządzanej jest preferowane, ponieważ eliminuje przechowywanie poufnych danych wejściowych w składnikach i nie wymaga zarządzania magazynem wpisów tajnych.
Uwaga
Pole azureClientId
metadanych (identyfikator klienta tożsamości zarządzanej) jest wymagane dla każdego składnika uwierzytelniającego się przy użyciu tożsamości zarządzanej przypisanej przez użytkownika.
Używanie odwołania do składnika magazynu wpisów tajnych dapr
Podczas tworzenia składników języka Dapr dla usług innych niż Entra ID niektóre pola metadanych wymagają poufnych wartości wejściowych. Zalecaną metodą pobierania tych wpisów tajnych jest odwołanie do istniejącego składnika magazynu wpisów tajnych Dapr, który bezpiecznie uzyskuje dostęp do informacji tajnych.
Aby skonfigurować odwołanie:
- Utwórz składnik magazynu wpisów tajnych dapr przy użyciu schematu usługi Azure Container Apps. Typ składnika dla wszystkich obsługiwanych magazynów wpisów tajnych języka Dapr rozpoczyna się od
secretstores.
. - Utwórz dodatkowe składniki (zgodnie z potrzebami), które odwołują się do utworzonego składnika magazynu wpisów tajnych Dapr w celu pobrania poufnych danych wejściowych metadanych.
Tworzenie składnika magazynu wpisów tajnych dapr
Podczas tworzenia składnika magazynu wpisów tajnych w usłudze Azure Container Apps możesz podać poufne informacje w sekcji metadanych w jeden z następujących sposobów:
- W przypadku magazynu wpisów tajnych usługi Azure Key Vault użyj tożsamości zarządzanej, aby nawiązać połączenie.
- W przypadku magazynów wpisów tajnych spoza platformy użyj wpisów tajnych platformy Kubernetes zdefiniowanych bezpośrednio w ramach manifestu składnika.
Magazyny wpisów tajnych usługi Azure Key Vault
Poniższy składnik przedstawia najprostszą możliwą konfigurację magazynu wpisów tajnych przy użyciu magazynu wpisów tajnych usługi Azure Key Vault. W tym przykładzie aplikacje wydawcy i subskrybenta są skonfigurowane tak, aby mieć tożsamość zarządzaną przypisaną przez system lub użytkownika z odpowiednimi uprawnieniami w wystąpieniu usługi 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
Wpisy tajne kubernetes zarządzane przez platformę
Wpisy tajne platformy Kubernetes, zmienne środowiskowe lokalne i magazyny wpisów tajnych dapr pliku lokalnego nie są obsługiwane w usłudze Azure Container Apps. Alternatywą dla nadrzędnego domyślnego magazynu wpisów tajnych Kubernetes platformy Dapr usługa Azure Container Apps zapewnia podejście zarządzane przez platformę do tworzenia i wykorzystywania wpisów tajnych platformy Kubernetes.
Ta konfiguracja składnika definiuje wartość wrażliwą jako parametr tajny, do którego można odwoływać się z sekcji metadanych. Takie podejście może służyć do nawiązywania połączenia z usługami spoza platformy Azure lub w scenariuszach tworzenia i testowania w celu szybkiego wdrażania składników za pośrednictwem interfejsu wiersza polecenia bez konfigurowania magazynu wpisów tajnych lub tożsamości zarządzanej.
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
Odwoływanie się do składników magazynu wpisów tajnych dapr
Po utworzeniu magazynu wpisów tajnych dapr przy użyciu jednego z poprzednich podejść możesz odwołać się do tego magazynu wpisów tajnych z innych składników języka Dapr w tym samym środowisku. W poniższym przykładzie pokazano użycie uwierzytelniania 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
Przykłady składników
Aby utworzyć składnik języka Dapr za pośrednictwem interfejsu wiersza polecenia usługi Container Apps, możesz użyć manifestu YAML aplikacji kontenera. Podczas konfigurowania wielu składników należy utworzyć i zastosować oddzielny plik YAML dla każdego składnika.
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