共用方式為


Azure 容器應用程式中的 Dapr 元件

Dapr 使用模組化設計,其中的功能會以元件的形式傳遞。 使用 Dapr 元件是選擇性的,且完全取決於應用程式的需求。

容器應用程式中的 Dapr 元件是環境層級的資源,其可:

  • 可提供插入式抽象模型,以連線到支援外部服務。
  • 可跨容器應用程式共用,或限定在特定容器應用程式範圍內。
  • 可以使用 Dapr 祕密來安全地擷取組態中繼資料。

在本指南中,您將了解如何為 Azure 容器應用程式服務設定 Dapr 元件。

元件結構描述

在 Dapr 開放原始碼專案中,所有元件都符合下列基本結構描述

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]

在Azure 容器應用程式中,上述結構描述已稍微簡化,以支援 Dapr 元件,並移除不必要的欄位,包括 apiVersionkind 和備援中繼資料和規格屬性。

componentType: [COMPONENT-TYPE]
version: v1
initTimeout: [TIMEOUT-DURATION]
ignoreErrors: [BOOLEAN]
metadata:
  - name: [METADATA-NAME]
    value: [METADATA-VALUE]

元件範圍

根據預設,相同環境中所有已啟用 Dapr 的容器應用程式都會載入一組完整的已部署元件。 為了確保元件只會由適當的容器應用程式在執行時間載入,應該使用應用程式範圍。 在下列範例中,只有兩個已啟用 Dapr 的容器應用程式 (具有 Dapr 應用程式識別碼 APP-ID-1APP-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]

注意

Dapr 元件範圍會對應至容器應用程式的 Dapr 應用程式識別碼,而不是容器應用程式名稱。

透過 Dapr 連線到外部服務

容器應用程式中支援幾個方法,可安全地建立 Dapr 元件外部服務的連線。

  1. 使用受控識別
  2. 透過建立以下任一方式來使用 Dapr 祕密存放區元件參考:

使用受控識別

針對 Azure 裝載的服務,Dapr 可以使用限定範圍的容器應用程式的受控識別向後端服務提供者進行驗證。 使用受控識別時,您不需要在元件資訊清單中包含祕密資訊。 慣用使用受控識別,因為這會消除元件中敏感性輸入的儲存,而且不需要管理祕密存放區。

注意

針對利用使用者指派的受控識別進行驗證的任何元件,azureClientId 中繼資料欄位 (受控識別的用戶端識別碼) 為必要欄位。

使用 Dapr 祕密存放區元件參考

當您為非 Entra ID 啟用的服務建立 Dapr 元件時,某些元資料欄位需要敏感性輸入值。 擷取這些祕密的建議方法是參考可安全地存取祕密資訊的現有 Dapr 祕密存放區元件。

若要設定參考:

  1. 使用Azure 容器應用程式結構描述建立 Dapr 祕密存放區元件。 所有支援的 Dapr 祕密存放區的元件類型都是以 secretstores. 開頭。
  2. 建立額外的元件 (視需要),以參考您建立的 Dapr 祕密存放區元件來擷取敏感性中繼資料輸入。

建立 Dapr 祕密存放區元件

在 Azure 容器應用程式中建立祕密存放區元件時,您可以使用下列其中一種方式,在中繼資料區段中提供敏感性資訊:

Azure Key Vault 祕密存放區

下列元件會使用 Azure Key Vault 秘密存放區來展示最簡單的秘密存放區設定。 在此範例中,發行者和訂閱者應用程式都設定為具有 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
平台管理的 Kubernetes 祕密

Azure 容器應用程式不支援 Kubernetes 祕密、本機環境變數和本機檔案 Dapr 祕密存放區。 做為上游 Dapr 預設 Kubernetes 祕密存放區的替代方案,Azure 容器應用程式提供平台管理的方法來建立及運用 Kubernetes 祕密。

此元件設定會將敏感性值定義為可從中繼資料區段參考的祕密參數。 此方法可用來連線到非 Azure 服務,或在開發/測試情節中,透過 CLI 快速部署元件,而不需設定祕密存放區或受控識別。

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

參考 Dapr 祕密存放區元件

使用上述其中一種方法建立 Dapr 祕密存放區之後,您可以從相同環境中的其他 Dapr 元件參考該祕密存放區。 在下列範例中,secretStoreComponent 欄位會填入上述範例中指定的祕密存放區名稱,其中會儲存 sb-root-connectionstring

componentType: pubsub.azure.servicebus.queue
version: v1
secretStoreComponent: "my-secret-store"
metadata:
  - name: connectionString
    secretRef: sb-root-connectionstring
scopes:
  - publisher-app
  - subscriber-app

元件範例

若要透過 Container Apps CLI 建立 Dapr 元件,您可以使用容器應用程式 YAML 資訊清單。 設定多個元件時,您必須為每個元件建立並套用個別的 YAML 檔案。

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

下一步

了解如何設定 Dapr 元件復原。