Dapr 配置

Dapr 配置概述

Dapr 配置通过一系列设置和策略,允许您调整单个 Dapr 应用程序的行为,或控制平面系统服务的整体行为。

欲了解更多信息,请阅读配置概念。

应用程序配置

设置应用程序配置

您可以在自托管模式或 Kubernetes 模式下设置应用程序配置。


在自托管模式下,Dapr 配置是一个配置文件,例如 config.yaml。默认情况下,Dapr sidecar 会在默认的 Dapr 文件夹中查找运行时配置:

  • Linux/MacOs: $HOME/.dapr/config.yaml
  • Windows: %USERPROFILE%\.dapr\config.yaml

您还可以在 dapr run CLI 命令中使用 --config 标志指定文件路径来应用配置。


在 Kubernetes 模式下,Dapr 配置是一个应用于集群的配置资源。例如:

kubectl apply -f myappconfig.yaml

您可以使用 Dapr CLI 列出应用程序的配置资源。

dapr configurations -k

Dapr sidecar 可以通过 dapr.io/config 注解来应用特定配置。例如:

  annotations:
    dapr.io/enabled: "true"
    dapr.io/app-id: "nodeapp"
    dapr.io/app-port: "3000"
    dapr.io/config: "myappconfig"

注意: 查看所有 Kubernetes 注解,以便在 sidecar 注入器系统服务激活时配置 Dapr sidecar。

应用程序配置选项

以下是您可以在 sidecar 上设置的所有配置选项。

跟踪

跟踪配置用于启用应用程序的跟踪功能。

Configuration 规范下的 tracing 部分包含以下属性:

tracing:
  samplingRate: "1"
  otel: 
    endpointAddress: "otelcollector.observability.svc.cluster.local:4317"
  zipkin:
    endpointAddress: "http://zipkin.default.svc.cluster.local:9411/api/v2/spans"

下表列出了跟踪的属性:

属性 类型 描述
samplingRate string 设置跟踪的采样率以启用或禁用。
stdout bool 为跟踪写入更详细的信息
otel.endpointAddress string 设置 Open Telemetry (OTEL) 服务器地址以发送跟踪。这可能需要或不需要 https:// 或 http://,具体取决于您的 OTEL 提供商。
otel.isSecure bool 连接到端点地址是否加密
otel.protocol string 设置为 httpgrpc 协议
zipkin.endpointAddress string 设置 Zipkin 服务器地址以发送跟踪。这应该在端点上包含协议 (http:// 或 https://)。
samplingRate

samplingRate 用于启用或禁用跟踪。samplingRate 的有效范围是 01(含)。采样率决定了是否根据值对跟踪跨度进行采样。

samplingRate : "1" 采样所有跟踪。默认情况下,采样率为 (0.0001),即 1 万分之一。

要禁用采样率,请在配置中设置 samplingRate : "0"

otel

OpenTelemetry (otel) 端点也可以通过环境变量进行配置。OTEL_EXPORTER_OTLP_ENDPOINT 环境变量的存在会为 sidecar 启用跟踪。

环境变量 描述
OTEL_EXPORTER_OTLP_ENDPOINT 设置 Open Telemetry (OTEL) 服务器地址,启用跟踪
OTEL_EXPORTER_OTLP_INSECURE 将连接到端点设置为未加密(true/false)
OTEL_EXPORTER_OTLP_PROTOCOL 传输协议 (grpc, http/protobuf, http/json)

有关更多信息,请参阅 可观察性分布式跟踪

指标

Configuration 规范下的 metrics 部分可用于启用或禁用应用程序的指标。

metrics 部分包含以下属性:

metrics:
  enabled: true
  rules: []
  latencyDistributionBuckets: []
  http:
    increasedCardinality: true
    pathMatching:
      - /items
      - /orders/{orderID}
      - /orders/{orderID}/items/{itemID}
      - /payments/{paymentID}
      - /payments/{paymentID}/status
      - /payments/{paymentID}/refund
      - /payments/{paymentID}/details
    excludeVerbs: false
  recordErrorCodes: true

在上面的示例中,路径过滤器 /orders/{orderID}/items/{itemID} 将返回 单个指标计数,匹配所有 orderID 和所有 itemID,而不是为每个 itemID 返回多个指标。有关更多信息,请参阅 HTTP 指标路径匹配

上面的示例还启用了 记录错误代码指标,默认情况下是禁用的。

下表列出了指标的属性:

属性 类型 描述
enabled boolean 当设置为 true 时,默认情况下,启用指标收集和指标端点。
rules array 命名规则以过滤指标。每个规则包含一组 labels 以进行过滤和一个 regex 表达式以应用于指标路径。
latencyDistributionBuckets array 延迟指标直方图的延迟分布桶的毫秒数组。
http.increasedCardinality boolean 当设置为 true(默认)时,在 Dapr HTTP 服务器中,每个请求路径都会导致创建一个新的“桶”指标。这可能会导致问题,包括在请求的端点很多时(例如与 RESTful API 交互时)出现过多的内存消耗。
为了缓解与 HTTP 服务器相关的高基数指标的高内存使用和出口成本,您应该将 metrics.http.increasedCardinality 属性设置为 false
http.pathMatching array 路径匹配的路径数组,允许用户定义匹配路径以管理基数。
http.excludeVerbs boolean 当设置为 true 时(默认值为 false),Dapr HTTP 服务器在构建方法指标标签时忽略每个请求的 HTTP 动词。

为了进一步帮助管理基数,路径匹配允许您根据定义的模式匹配指定的路径,减少唯一指标路径的数量,从而控制指标基数。此功能对于具有动态 URL 的应用程序特别有用,确保指标保持有意义且可管理,而不会消耗过多的内存。

使用规则,您可以为 Dapr sidecar 暴露的每个指标设置正则表达式。例如:

metrics:
  enabled: true
  rules:
    - name: dapr_runtime_service_invocation_req_sent_total
      labels:
      - name: method
        regex:
          "orders/": "orders/.+"

有关更多信息,请参阅 指标文档

日志

Configuration 规范下的 logging 部分用于配置 Dapr 运行时中的日志记录方式。

logging 部分包含以下属性:

logging:
  apiLogging:
    enabled: false
    obfuscateURLs: false
    omitHealthChecks: false

下表列出了日志记录的属性:

属性 类型 描述
apiLogging.enabled boolean daprd--enable-api-logging 标志的默认值(以及相应的 dapr.io/enable-api-logging 注解):除非为每个 Dapr 运行时传递 truefalse 值,否则使用配置规范中设置的值作为默认值。默认值:false
apiLogging.obfuscateURLs boolean 启用时,会在 HTTP API 日志(如果启用)中模糊化 URL 的值,记录抽象路由名称而不是被调用的完整路径,该路径可能包含个人可识别信息(PII)。默认值:false
apiLogging.omitHealthChecks boolean 如果为 true,则在启用 API 日志记录时,不会记录对健康检查端点(例如 /v1.0/healthz)的调用。这在这些调用在日志中添加了大量噪音时很有用。默认值:false

有关更多信息,请参阅 日志记录文档

中间件

中间件配置设置命名的 HTTP 管道中间件处理程序。Configuration 规范下的 httpPipelineappHttpPipeline 部分包含以下属性:

httpPipeline: # 用于传入的 http 调用
  handlers:
    - name: oauth2
      type: middleware.http.oauth2
    - name: uppercase
      type: middleware.http.uppercase
appHttpPipeline: # 用于传出的 http 调用
  handlers:
    - name: oauth2
      type: middleware.http.oauth2
    - name: uppercase
      type: middleware.http.uppercase

下表列出了 HTTP 处理程序的属性:

属性 类型 描述
name string 中间件组件的名称
type string 中间件组件的类型

有关更多信息,请参阅 中间件管道

名称解析组件

您可以在配置文件中设置要使用的名称解析组件。例如,要将 spec.nameResolution.component 属性设置为 "sqlite",请在 spec.nameResolution.configuration 字典中传递配置选项,如下所示。

这是一个配置资源的基本示例:

apiVersion: dapr.io/v1alpha1
kind: Configuration 
metadata:
  name: appconfig
spec:
  nameResolution:
    component: "sqlite"
    version: "v1"
    configuration:
      connectionString: "/home/user/.dapr/nr.db"

有关更多信息,请参阅:

限制 secret 存储访问

有关如何将 secret 范围限定到应用程序的信息和示例,请参阅 范围 secret 指南。

构建块 API 的访问控制白名单

有关如何在构建块 API 列表上设置访问控制白名单(ACL)的信息和示例,请参阅 在 Dapr sidecar 上选择性启用 Dapr API 指南。

服务调用 API 的访问控制白名单

有关如何使用 ACL 设置白名单的服务调用 API 的信息和示例,请参阅 服务调用的白名单 指南。

禁止使用某些组件类型

使用 Configuration 规范中的 components.deny 属性,您可以指定不能初始化的组件类型的拒绝列表。

例如,下面的配置禁止初始化类型为 bindings.smtpsecretstores.local.file 的组件:

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
  name: myappconfig
spec: 
  components:
    deny:
      - bindings.smtp
      - secretstores.local.file

可选地,您可以通过在组件名称末尾添加版本来指定要禁止的版本。例如,state.in-memory/v1 禁止初始化类型为 state.in-memory 且版本为 v1 的组件,但不禁止组件的(假设的)v2 版本。

启用预览功能

有关如何选择加入发布版的预览功能的信息和示例,请参阅 预览功能 指南。

启用预览功能可以解锁新的功能,以便进行开发/测试,因为它们仍然需要更多时间才能在运行时中普遍可用(GA)。

示例 sidecar 配置

以下 YAML 显示了一个可以应用于应用程序的 Dapr sidecar 的示例配置文件。

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
  name: myappconfig
  namespace: default
spec:
  tracing:
    samplingRate: "1"
    stdout: true
    otel:
      endpointAddress: "localhost:4317"
      isSecure: false
      protocol: "grpc"
  httpPipeline:
    handlers:
      - name: oauth2
        type: middleware.http.oauth2
  secrets:
    scopes:
      - storeName: localstore
        defaultAccess: allow
        deniedSecrets: ["redis-password"]
  components:
    deny:
      - bindings.smtp
      - secretstores.local.file
  accessControl:
    defaultAction: deny
    trustDomain: "public"
    policies:
      - appId: app1
        defaultAction: deny
        trustDomain: 'public'
        namespace: "default"
        operations:
          - name: /op1
            httpVerb: ['POST', 'GET']
            action: deny
          - name: /op2/*
            httpVerb: ["*"]
            action: allow

控制平面配置

一个名为 daprsystem 的单一配置文件与 Dapr 控制平面系统服务一起安装,应用全局设置。

仅在 Dapr 部署到 Kubernetes 时设置。

控制平面配置设置

Dapr 控制平面配置包含以下部分:

  • mtls 用于 mTLS(相互 TLS)

mTLS(相互 TLS)

mtls 部分包含 mTLS 的属性。

属性 类型 描述
enabled bool 如果为 true,则启用集群中服务和应用程序之间通信的 mTLS。
allowedClockSkew string 检查 TLS 证书到期时允许的容差,以允许时钟偏差。遵循 Go 的 time.ParseDuration 使用的格式。默认值为 15m(15 分钟)。
workloadCertTTL string Dapr 签发的证书 TLS 的有效期。遵循 Go 的 time.ParseDuration 使用的格式。默认值为 24h(24 小时)。
sentryAddress string 连接到 Sentry 服务器的主机名端口地址。
controlPlaneTrustDomain string 控制平面的信任域。用于验证与控制平面服务的连接。
tokenValidators array 用于验证证书请求的其他 Sentry 令牌验证器。

有关更多信息,请参阅 mTLS 操作指南安全概念

示例控制平面配置

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
  name: daprsystem
  namespace: default
spec:
  mtls:
    enabled: true
    allowedClockSkew: 15m
    workloadCertTTL: 24h

下一步

了解并发和速率限制