Udostępnij za pośrednictwem


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 apiVersionkind, 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.

  1. Korzystanie z tożsamości zarządzanej
  2. Korzystając z odwołania do składnika magazynu wpisów tajnych dapr, utwórz jedną z następujących metod:

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:

  1. 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..
  2. 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:

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

Następne kroki

Dowiedz się, jak ustawić odporność składników języka Dapr.