配置存储组件规格 与 Dapr 对接的受支持的配置存储
Table headers to note:
Header Description Example Status Component certification statusAlpha Beta Stable Component version The version of the component v1 Since runtime version The version of the Dapr runtime when the component status was set or updated 1.11
Generic Microsoft Azure 1 - Azure App Configuration Azure App Configuration 配置存储组件的详细信息
组件格式 要设置 Azure App Configuration 配置存储,需创建一个类型为 configuration.azure.appconfig 的组件。
apiVersion : dapr.io/v1alpha1
kind : Component
metadata :
name : <NAME>
spec :
type : configuration.azure.appconfig
version : v1
metadata :
- name : host # 当使用 Azure 身份验证机制时应使用 host。
value : <HOST>
- name : connectionString # 当使用 Azure 身份验证机制时不应使用 connectionString。
value : <CONNECTIONSTRING>
- name : maxRetries
value : # 可选
- name : retryDelay
value : # 可选
- name : maxRetryDelay
value : # 可选
- name : azureEnvironment # 可选,默认为 AZUREPUBLICCLOUD
value : "AZUREPUBLICCLOUD"
# 请参阅下方的身份验证部分以了解所有选项
- name : azureTenantId # 可选
value : "[your_service_principal_tenant_id]"
- name : azureClientId # 可选
value : "[your_service_principal_app_id]"
- name : azureCertificateFile # 可选
value : "[pfx_certificate_file_fully_qualified_local_path]"
- name : subscribePollInterval # 可选
value : #可选 [期望格式示例 - 24h]
Warning 上述示例使用纯文本字符串表示密钥。建议使用密钥存储来管理密钥,详见
此处 。
规范元数据字段 Field Required Details Example connectionString Y* Azure App Configuration 实例的连接字符串。无默认值。可以是 secretKeyRef 以使用密钥引用。*与 host 字段互斥。*使用 Azure 身份验证 时不使用 Endpoint=https://foo.azconfig.io;Id=osOX-l9-s0:sig;Secret=00000000000000000000000000000000000000000000host N* Azure App Configuration 实例的终端节点。无默认值。*与 connectionString 字段互斥。*使用 Azure 身份验证 时使用 https://dapr.azconfig.iomaxRetries N 放弃前的最大重试次数。默认为 3 5, 10retryDelay N 重试延迟指定在重试操作前的初始延迟量。延迟随每次重试呈指数级增长,直到最大重试延迟指定的最大值。默认为 4 秒;"-1" 禁用重试间的延迟。 4smaxRetryDelay N 最大重试延迟指定重试操作前允许的最大延迟。该值通常应大于或等于重试延迟中指定的值。默认为 120 秒;"-1" 禁用该限制 120ssubscribePollInterval N 订阅轮询间隔指定以纳秒为单位轮询订阅键是否有任何更改的轮询间隔。未来将更新为 Go Time 格式。默认轮询间隔为 24 小时。 24h
注意 :必须指定 host 或 connectionString 其中之一。
使用连接字符串进行身份验证 使用连接字符串访问 App Configuration 实例,该字符串可在 Azure 门户中获取。由于连接字符串包含凭据信息,应将其视为密钥并使用密钥存储 。
使用 Microsoft Entra ID 进行身份验证 Azure App Configuration 配置存储组件还支持通过 Microsoft Entra ID 进行身份验证。在启用此组件之前:
阅读向 Azure 进行身份验证 文档。 创建 Microsoft Entra ID 应用程序(也称为服务主体)。 或者,为你的应用程序平台创建托管标识。 设置 Azure App Configuration 你需要一个 Azure 订阅来设置 Azure App Configuration。
启动 Azure App Configuration 创建流程 。必要时登录。
点击创建 开始部署你的 Azure App Configuration 实例。
实例创建完成后,获取主机(终端节点)或 连接字符串 :
对于主机:导航至资源的概览 并复制终端节点 。 对于连接字符串:导航至设置 > 访问密钥 并复制你的连接字符串。 将你的主机或连接字符串添加到 Dapr 可应用的 azappconfig.yaml 文件中。
将 host 键设置为 [终端节点]或将 connectionString 键设置为你之前保存的值。
Note 在生产级应用程序中,遵循
密钥管理 说明以安全地管理你的密钥。
Azure App Configuration 请求元数据 在 Azure App Configuration 中,你可以使用标签为同一键定义不同的值。例如,你可以为开发环境和生产环境定义一个具有不同值的单个键。你可以指定在连接到 App Configuration 时加载哪个标签
Azure App Configuration 存储组件支持以下可选的 label 元数据属性:
label:要检索的配置的标签。如果不存在,配置存储将返回指定键和空标签的配置。
标签可以通过请求 URL 中的查询参数来填充:
GET curl http://localhost:<daprPort>/v1.0/configuration/<store-name>?key= <key name>& metadata.label= <label value>
相关链接 2 - PostgreSQL PostgreSQL 配置存储组件的详细信息
组件格式 要设置 PostgreSQL 配置存储,请创建类型为 configuration.postgresql 的组件
apiVersion : dapr.io/v1alpha1
kind : Component
metadata :
name : <NAME>
spec :
type : configuration.postgresql
version : v1
metadata :
# Connection string
- name : connectionString
value : "host=localhost user=postgres password=example port=5432 connect_timeout=10 database=config"
# Name of the table which holds configuration information
- name : table
value : "[your_configuration_table_name]"
# Individual connection parameters - can be used instead to override connectionString parameters
#- name: host
# value: "localhost"
#- name: hostaddr
# value: "127.0.0.1"
#- name: port
# value: "5432"
#- name: database
# value: "my_db"
#- name: user
# value: "postgres"
#- name: password
# value: "example"
#- name: sslRootCert
# value: "/path/to/ca.crt"
# Timeout for database operations, in seconds (optional)
#- name: timeoutInSeconds
# value: 20
# Name of the table where to store the state (optional)
#- name: tableName
# value: "state"
# Name of the table where to store metadata used by Dapr (optional)
#- name: metadataTableName
# value: "dapr_metadata"
# Cleanup interval in seconds, to remove expired rows (optional)
#- name: cleanupIntervalInSeconds
# value: 3600
# Maximum number of connections pooled by this component (optional)
#- name: maxConns
# value: 0
# Max idle time for connections before they're closed (optional)
#- name: connectionMaxIdleTime
# value: 0
# Controls the default mode for executing queries. (optional)
#- name: queryExecMode
# value: ""
# Uncomment this if you wish to use PostgreSQL as a state store for actors (optional)
#- name: actorStateStore
# value: "true"
警告 上述示例使用纯文本字符串作为密钥。建议按照
此处 所述使用密钥存储来管理密钥。
规范元数据字段 使用连接字符串进行身份验证 使用 PostgreSQL 连接字符串进行身份验证时,以下元数据选项是必需的 。
字段 必需 详情 示例 connectionStringY PostgreSQL 数据库的连接字符串。有关如何定义连接字符串的信息,请参阅 PostgreSQL 数据库连接文档 。 "host=localhost user=postgres password=example port=5432 connect_timeout=10 database=my_db"
使用单独的连接参数进行身份验证 除了使用连接字符串外,您还可以选择指定单独的连接参数。这些参数等同于标准 PostgreSQL 连接参数。
字段 必需 详情 示例 hostY PostgreSQL 服务器的主机名或 IP 地址 "localhost"hostaddrN PostgreSQL 服务器的 IP 地址(host 的替代选项) "127.0.0.1"portY PostgreSQL 服务器的端口号 "5432"databaseY 要连接的数据库名称 "my_db"userY 用于连接的 PostgreSQL 用户 "postgres"passwordY PostgreSQL 用户的密码 "example"sslRootCertN SSL 根证书文件的路径 "/path/to/ca.crt"
注意 使用单独的连接参数时,这些参数将覆盖 connectionString 中存在的参数。使用 Microsoft Entra ID 进行身份验证 支持使用 Microsoft Entra ID 对 Azure Database for PostgreSQL 进行身份验证。可以使用 Dapr 支持的所有身份验证方法,包括客户端凭据(“服务主体”)和托管标识。
字段 必需 详情 示例 useAzureADY 必须设置为 true 以使组件能够从 Microsoft Entra ID 获取访问令牌。 "true"connectionStringY PostgreSQL 数据库的连接字符串。 必须包含用户,该用户对应于在 PostgreSQL 内部创建的、映射到 Microsoft Entra ID 标识的用户名称;这通常是相应主体的名称(例如 Microsoft Entra ID 应用程序的名称)。此连接字符串不应包含任何密码。 "host=mydb.postgres.database.azure.com user=myapplication port=5432 database=my_db sslmode=require"azureTenantIdN Microsoft Entra ID 租户的 ID "cd4b2887-304c-…"azureClientIdN 客户端 ID(应用程序 ID) "c7dd251f-811f-…"azureClientSecretN 客户端密钥(应用程序密码) "Ecy3X…"
使用 AWS IAM 进行身份验证 支持使用 AWS IAM 对所有版本的 PostgreSQL 类型组件进行身份验证。
连接字符串中指定的用户必须是数据库中已存在的用户,并且是被授予 rds_iam 数据库角色的 AWS IAM 启用用户。
身份验证基于 AWS 身份验证配置文件,或提供的 AccessKey/SecretKey。
AWS 身份验证令牌将在其过期时间之前通过 AWS 动态轮换。
字段 必需 详情 示例 useAWSIAMY 必须设置为 true 以使组件能够从 AWS IAM 获取访问令牌。此身份验证方法仅适用于 AWS Relational Database Service 的 PostgreSQL 数据库。 "true"connectionStringY PostgreSQL 数据库的连接字符串。 必须包含已存在的用户,该用户对应于在 PostgreSQL 内部创建的、映射到 AWS IAM 策略的用户名称。此连接字符串不应包含任何密码。请注意,使用 AWS 时数据库名称字段由 dbname 表示。 "host=mydb.postgres.database.aws.com user=myapplication port=5432 dbname=my_db sslmode=require"awsRegionN 这保持与现有字段的向后兼容性。它将在 Dapr 1.17 版本中弃用。请改用 ‘region’。AWS Relational Database Service 部署所在的 AWS 区域。 "us-east-1"awsAccessKeyN 这保持与现有字段的向后兼容性。它将在 Dapr 1.17 版本中弃用。请改用 ‘accessKey’。与 IAM 账户关联的 AWS 访问密钥 "AKIAIOSFODNN7EXAMPLE"awsSecretKeyN 这保持与现有字段的向后兼容性。它将在 Dapr 1.17 版本中弃用。请改用 ‘secretKey’。与访问密钥关联的密钥 "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"awsSessionTokenN 这保持与现有字段的向后兼容性。它将在 Dapr 1.17 版本中弃用。请改用 ‘sessionToken’。要使用的 AWS 会话令牌。仅在使用临时安全凭证时才需要会话令牌。 "TOKEN"
其他元数据选项 字段 必需 详情 示例 tableY 配置信息的表名,必须为小写。 configtabletimeoutN 数据库操作的超时时间,格式为 Go duration 。整数被解释为秒数。默认为 20s "30s", 30maxConnsN 此组件池化的最大连接数。设置为 0 或更低以使用默认值,即 4 或 CPU 数量中的较大值。 "4"connectionMaxIdleTimeN 在连接池中自动关闭未使用连接之前的最大空闲时间。默认情况下,没有值,这由数据库驱动程序选择。 "5m"queryExecModeN 控制执行查询的默认模式。默认情况下,Dapr 使用扩展协议并自动准备和缓存预备语句。但是,这可能与 PGBouncer 等代理不兼容。在这种情况下,最好使用 exec 或 simple_protocol。 "simple_protocol"
设置 PostgreSQL 作为配置存储 启动 PostgreSQL 数据库
连接到 PostgreSQL 数据库并按照以下架构设置配置表:
字段 数据类型 可为空 详情 KEY VARCHAR N 保存配置属性的 "Key" VALUE VARCHAR N 保存配置属性的 Value VERSION VARCHAR N 保存配置属性的版本 METADATA JSON Y 将 Metadata 保存为 JSON
CREATE TABLE IF NOT EXISTS table_name (
KEY VARCHAR NOT NULL ,
VALUE VARCHAR NOT NULL ,
VERSION VARCHAR NOT NULL ,
METADATA JSON
);
在配置表上创建 TRIGGER。创建 TRIGGER 的示例函数如下:
CREATE OR REPLACE FUNCTION notify_event() RETURNS TRIGGER AS $$
DECLARE
data json;
notification json;
BEGIN
IF ( TG_OP = 'DELETE' ) THEN
data = row_to_json( OLD) ;
ELSE
data = row_to_json( NEW) ;
END IF;
notification = json_build_object(
'table' ,TG_TABLE_NAME,
'action' , TG_OP,
'data' , data) ;
PERFORM pg_notify( 'config' ,notification::text) ;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
创建触发器,数据封装在标记为 data 的字段中:
notification = json_build_object (
'table' , TG_TABLE_NAME ,
'action' , TG_OP ,
'data' , data
);
订阅配置通知时,应使用作为 pg_notify 属性提及的通道
由于这是一个通用创建的触发器,请将此触发器映射到 配置表
CREATE TRIGGER config
AFTER INSERT OR UPDATE OR DELETE ON configtable
FOR EACH ROW EXECUTE PROCEDURE notify_event ();
在订阅请求中添加一个额外的元数据字段,键为 pgNotifyChannel,值应设置为 pg_notify 中提及的相同 通道名称。根据上面的示例,应将其设置为 config
注意 调用 subscribe API 时,应使用 metadata.pgNotifyChannel 来指定要监听来自 PostgreSQL 配置存储的通知的通道名称。
可以向订阅请求添加任意数量的键。每个订阅使用一个独占的数据库连接。强烈建议在单个订阅中订阅多个键。这有助于优化到数据库的连接数。
订阅 HTTP API 示例:
curl -l 'http://<host>:<dapr-http-port>/configuration/mypostgresql/subscribe?key=<keyname1>&key=<keyname2>&metadata.pgNotifyChannel=<channel name>'
相关链接 3 - Redis Redis 配置存储组件的详细信息
组件格式 要设置 Redis 配置存储,需创建一个类型为 configuration.redis 的组件。有关如何创建和应用配置存储配置,请参阅此指南 。
apiVersion : dapr.io/v1alpha1
kind : Component
metadata :
name : <NAME>
spec :
type : configuration.redis
version : v1
metadata :
- name : redisHost
value : <address>:6379
- name : redisPassword
value : **************
- name : useEntraID
value : "true"
- name : enableTLS
value : <bool>
警告 上述示例将密钥作为纯字符串使用。建议使用密钥存储来管理密钥,具体操作请参阅
此处 。
规格元数据字段 字段 必填 详情 示例 redisHost Y Output Redis 主机的连接字符串。如果 "redisType" 为 "cluster",则可以是多个用逗号分隔的主机,也可以是单个主机。当使用 Redis Sentinel("failover" 为 "true")时,也可以提供多个 sentinel 地址,用逗号分隔。 redisPassword N Output Redis 密码 redisUsername N Output Redis 主机的用户名。默认为空。请确保你的 Redis 服务器版本为 6 或更高版本,并且已正确创建 acl 规则。 enableTLS N Output 如果 Redis 实例支持带有公共证书的 TLS,可以配置为启用或禁用 TLS。默认为 "false" clientCert N Output 客户端证书的内容,用于需要客户端证书的 Redis 实例。必须与 clientKey 一起使用,且 enableTLS 必须设置为 true。建议使用密钥存储,具体操作请参阅此处 clientKey N Output 客户端私钥的内容,与 clientCert 配合用于身份验证。建议使用密钥存储,具体操作请参阅此处 failover N Output 启用故障转移配置的属性。需要设置 sentinelMasterName。启用后,redisHost 应包含 sentinel 地址。默认为 "false" sentinelMasterName N Output Sentinel 主节点名称。请参阅 Redis Sentinel 文档 sentinelUsername N Output Redis Sentinel 的用户名。仅当 “failover” 为 true 且 Redis Sentinel 启用了身份验证时适用 sentinelPassword N Output Redis Sentinel 的密码。仅当 “failover” 为 true 且 Redis Sentinel 启用了身份验证时适用 redisType N Output Redis 的类型。有两个有效值,一个是 "node",表示单节点模式;另一个是 "cluster",表示 Redis 集群模式。默认为 "node"。 redisDB N Output 连接到 Redis 后选择的数据库。如果 "redisType" 为 "cluster",则此选项将被忽略。默认为 "0"。 redisMaxRetries N Output 放弃前重试命令的最大次数。默认为不重试失败的命令。 redisMinRetryInterval N Output 每次重试之间 Redis 命令的最小退避时间。默认为 "8ms"; "-1" 禁用退避。 redisMaxRetryInterval N Output 每次重试之间 Redis 命令的最大退避时间。默认为 "512ms";"-1" 禁用退避。 dialTimeout N Output 建立新连接的拨号超时时间。默认为 "5s"。 readTimeout N Output 套接字读取的超时时间。如果达到超时,Redis 命令将因超时而失败而不是阻塞。默认为 "3s","-1" 表示无超时。 writeTimeout N Output 套接字写入的超时时间。如果达到超时,Redis 命令将因超时而失败而不是阻塞。默认为 readTimeout。 poolSize N Output 套接字连接的最大数量。默认为 runtime.NumCPU 报告的每个 CPU 10 个连接。 poolTimeout N Output 当所有连接都忙时,客户端等待连接的时间,超时后返回错误。默认为 readTimeout + 1 秒。 maxConnAge N Output 连接的年龄,达到此年龄后客户端将关闭(退役)该连接。默认为不关闭旧连接。 minIdleConns N Output 保持打开的最小空闲连接数,以避免创建新连接导致的性能下降。默认为 "0"。 idleCheckFrequency N Output 空闲连接清理器执行空闲检查的频率。默认为 "1m"。"-1" 禁用空闲连接清理器。 idleTimeout N Output 客户端关闭空闲连接的时间长度。应小于服务器的超时时间。默认为 "5m"。"-1" 禁用空闲超时检查。
设置 Redis Dapr 可以使用任何 Redis 实例:容器化的、在本地开发机器上运行的,或托管的云服务。
自托管
Kubernetes
AWS
Azure
GCP 当你运行 dapr init 时,会自动创建一个 Redis 实例作为 Docker 容器
你可以使用 Helm 在我们的 Kubernetes 集群中快速创建 Redis 实例。此方法需要安装 Helm 。
将 Redis 安装到你的集群中。请注意,我们要显式设置一个镜像标签以获取大于 5 的版本,这是 Dapr 的发布订阅功能所要求的。如果你只打算将 Redis 用作状态存储(而不用于发布订阅),则不必设置镜像版本。
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install redis bitnami/redis --set image.tag= 6.2
运行 kubectl get pods 查看集群中现在运行的 Redis 容器。
将 redis-master:6379 作为 redisHost 添加到你的 redis.yaml 文件中。例如:
metadata :
- name : redisHost
value : redis-master:6379
接下来,获取 Redis 密码,根据我们使用的操作系统,这略有不同:
Windows :运行 kubectl get secret --namespace default redis -o jsonpath="{.data.redis-password}" > encoded.b64,这将创建一个包含编码密码的文件。接下来,运行 certutil -decode encoded.b64 password.txt,这将把你的 redis 密码放入名为 password.txt 的文本文件中。复制密码并删除这两个文件。
Linux/MacOS :运行 kubectl get secret --namespace default redis -o jsonpath="{.data.redis-password}" | base64 --decode 并复制输出的密码。
将此密码作为 redisPassword 值添加到你的 redis.yaml 文件中。例如:
metadata :
- name : redisPassword
value : lhDOkwTlp0
使用官方 Microsoft 文档创建 Azure Cache for Redis 实例。
实例创建完成后,从 Azure 门户获取主机名(FQDN)和访问密钥。
将你的密钥和主机名添加到 Dapr 可应用于集群的 redis.yaml 文件中。
如果你在运行示例,请将主机和密钥添加到提供的 redis.yaml 中。 如果你从零开始创建项目,请按照组件格式部分 中的说明创建 redis.yaml 文件。 将 redisHost 键设置为 [上一步的主机名]:6379,将 redisPassword 键设置为你之前保存的密钥。
注意: 在生产级应用程序中,请遵循密钥管理 说明来安全地管理你的密钥。
启用 EntraID 支持:
在 Azure Redis 服务器上启用 Entra ID 身份验证。这可能需要几分钟时间。 将 useEntraID 设置为 "true" 以实现 Azure Cache for Redis 的 EntraID 支持。 将 enableTLS 设置为 "true" 以支持 TLS。
注意: useEntraID 假定你的 UserPrincipal(通过 AzureCLICredential)或 SystemAssigned 托管标识具有 RedisDataOwner 角色权限。如果使用用户分配的标识,你需要指定 azureClientID 属性 。
Redis Sentinel 配置 当使用 Redis Sentinel 实现高可用时,将 redisType 设置为 "node",使用 failover: "true" 启用故障转移模式,并提供 sentinel 主节点名称。可以在 redisHost 字段中指定多个 sentinel 地址,用逗号分隔,以实现冗余。
```yaml
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: redis-pubsub
spec:
type: pubsub.redis
version: v1
metadata:
- name: redisHost
value: "sentinel1:26379,sentinel2:26379,sentinel3:26379"
- name: redisType
value: "node"
- name: failover
value: "true"
- name: sentinelMasterName
value: "mymaster"
```
相关链接