你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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 应用程序 ID APP-ID-1APP-ID-2 的两个已启用 Dapr 的容器应用加载:

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 应用程序 ID,而不是容器应用名称。

组件示例

若要通过容器应用 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: 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

后续步骤

了解如何通过 Dapr 组件连接到 Azure 和外部服务