Dapr 配置

Dapr 配置概述

Dapr 配置是设置和策略,使您能够更改单个 Dapr 应用程序的行为或 Dapr 控制平面系统服务的全局行为。

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

应用程序配置

设置应用程序配置

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

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

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

应用程序还可以通过使用 dapr run CLI 命令的 --config 标志来应用配置文件路径。

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

kubectl apply -f myappconfig.yaml

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

dapr configurations -k

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

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

注意:查看所有 Kubernetes 注解可用于在边车注入器系统服务激活时配置 Dapr 边车。

应用程序配置设置

以下菜单包含您可以设置的所有配置设置:

追踪

追踪配置可为应用程序启用追踪。

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

tracing:
  samplingRate: "1"
  otel: 
    endpointAddress: "otelcollector.observability.svc.cluster.local:4317"
    headers:
      - name: "x-api-key"
        secretKeyRef:
          name: "my-secret"
          key: "otel-api-key"
    timeout: "30s"
  zipkin:
    endpointAddress: "http://zipkin.default.svc.cluster.local:9411/api/v2/spans"

下表列出了追踪的属性:

属性类型描述
samplingRatestring设置追踪的采样率以启用或禁用。
stdoutboolTrue 向追踪写入更详细的信息
otel.endpointAddressstring设置要向其发送追踪的 Open Telemetry (OTEL) 服务器地址。根据您的 OTEL 提供商,可能需要或不需要 https:// 或 http://。
otel.isSecurebool到端点地址的连接是否加密
otel.protocolstring设置为 httpgrpc 协议
otel.headersarray要包含在 OTLP 导出器请求中的标头。每个条目都有一个 name 和纯文本 valuesecretKeyRef 以引用 Kubernetes 密钥(仅支持 Kubernetes 密钥,不支持其他密钥类型)
otel.timeoutstringOTLP 导出器请求的超时时间(例如 30s5m)。
zipkin.endpointAddressstring设置要向其发送追踪的 Zipkin 服务器地址。这应包含端点上的协议(http:// 或 https://)。
samplingRate

samplingRate 用于启用或禁用追踪。samplingRate 的有效范围介于 01 之间(含)。采样率根据值确定是否应对追踪跨度进行采样。

samplingRate : "1" 采样所有追踪。默认情况下,采样率为 (0.0001),即 10,000 条追踪中有 1 条。

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

otel

也可以通过环境变量配置 OpenTelemetry (otel) 端点。OTEL_EXPORTER_OTLP_ENDPOINT 环境变量的存在会为边车启用追踪。

环境变量描述
OTEL_EXPORTER_OTLP_ENDPOINT设置 Open Telemetry (OTEL) 服务器地址,启用追踪
OTEL_EXPORTER_OTLP_INSECURE将到端点的连接设置为未加密(true/false)
OTEL_EXPORTER_OTLP_PROTOCOL传输协议(grpchttp/protobufhttp/json
OTEL_EXPORTER_OTLP_TRACES_HEADERSOTLP 追踪导出器的逗号分隔的 key=value 标头列表
OTEL_EXPORTER_OTLP_TRACES_TIMEOUTOTLP 追踪导出器的超时时间(以毫秒为单位)(例如 30000

更多信息,请参阅可观测性分布式追踪

指标

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 指标路径匹配

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

下表列出了指标的属性:

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

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

使用规则,您可以为 Dapr 边车公开的每个指标设置正则表达式。例如:

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

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

日志记录

Configuration 规范下的 logging 部分用于配置 Dapr Runtime 中的日志记录工作方式。

logging 部分包含以下属性:

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

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

属性类型描述
apiLogging.enabledbooleandaprd--enable-api-logging 标志(以及相应的 dapr.io/enable-api-logging 注解)的默认值:在 Configuration 规范中设置的值将用作默认值,除非将 truefalse 值传递给每个 Dapr Runtime。默认值:false
apiLogging.obfuscateURLsboolean启用后,混淆 HTTP API 日志中的 URL 值(如果启用),记录抽象路由名称而不是被调用的完整路径,后者可能包含个人身份信息 (PII)。默认值:false
apiLogging.omitHealthChecksboolean如果为 true,则在启用 API 日志记录时,不会记录对健康检查端点(例如 /v1.0/healthz)的调用。如果这些调用在日志中产生大量噪音,这很有用。默认值:false

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

中间件

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

httpPipeline: # for incoming http calls
  handlers:
    - name: oauth2
      type: middleware.http.oauth2
    - name: uppercase
      type: middleware.http.uppercase
appHttpPipeline: # for outgoing http calls
  handlers:
    - name: oauth2
      type: middleware.http.oauth2
    - name: uppercase
      type: middleware.http.uppercase

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

属性类型描述
namestring中间件组件的名称
typestring中间件组件的类型

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

名称解析组件

您可以在配置文件中设置要使用的名称解析组件。例如,要将 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"

更多信息,请参阅:

工作流

workflow 部分包含用于配置工作流的属性。

属性类型描述
maxConcurrentWorkflowInvocationsint32每个 Dapr 边车的最大并发工作流执行数。默认为无限。
maxConcurrentActivityInvocationsint32每个 Dapr 边车的最大并发活动执行数。默认为无限。

限定密钥存储访问范围

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

构建块 API 的访问控制允许列表

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

服务调用 API 的访问控制允许列表

有关如何使用服务调用 API 通过 ACL 设置允许列表的信息和示例,请参阅服务调用的允许列表指南。

禁止使用某些组件类型

使用 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) 之前仍需要更多时间。

边车配置示例

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

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"
      headers:
        - name: "x-api-key"
          secretKeyRef:
            name: "my-secret"
            key: "otel-api-key"
      timeout: "30s"
  httpPipeline:
    handlers:
      - name: oauth2
        type: middleware.http.oauth2
  secrets:
    scopes:
      - storeName: localstore
        defaultAccess: allow
        deniedSecrets: ["redis-password"]
  components:
    deny:
      - bindings.smtp
      - secretstores.local.file
  workflow:
    maxConcurrentWorkflowInvocations: 100
    maxConcurrentActivityInvocations: 1000
  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 的属性。

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

更多信息,请参阅 mTLS 操作方法安全概念

控制平面配置示例

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

后续步骤

了解并发和速率限制