dapr v1.16.17 版本更新介绍
发布日期: 2026-07-10
版本号: v1.16.17
Dapr 1.16.17版本更新修复了一个错误:当提醒名称或actor ID包含如
|或@等字符时,actor提醒和任务无法注册。此前,这些字符在调用actor或保存状态时是允许的,但注册提醒时却会失败,且返回的错误信息容易引起误解。问题根源在于Scheduler服务使用||作为分隔符组合名称,并对每个段落应用了严格的DNS-1123子域验证规则,仅允许小写字母、数字、短横线和点号,这与Dapr API边缘允许的字符范围不一致。新版本中,Scheduler现在采用与Dapr API边缘相同的验证策略,除了反斜杠、井号、问号、控制字符及特殊路径序列.和..外,允许使用包括大写字母、|和@在内的更多字符。同时,验证错误信息现在会明确指出实际被禁止的字符。
更新内容 (中文)
Dapr 1.16.17
此更新包含以下错误修复:
当名称或Actor ID包含如 | 或 @ 等字符时,Actor提醒和作业无法注册
问题
通过调度器服务注册Actor提醒时,如果提醒名称或其所属的Actor ID包含某些字符(如管道符 | 或at符号 @),则注册会失败。
相同的字符在调用Actor和保存Actor状态时是被接受的,因此一个在其他所有地方都能正常工作的Actor,却无法为其创建提醒。
此情况下返回的错误信息也具有误导性:
a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
该错误声称只允许小写名称,而实际上大写名称也是被接受的,并且它没有说明实际被拒绝的是哪些字符。
影响
如果您使用调度器支持的Actor提醒(自1.15版本以来是默认设置),并且您的提醒名称、Actor ID或计划作业名称包含超出严格DNS-1123字符集的字符(例如 |、@ 或大写字母),则您会受到影响。
根本原因
调度器将每个提醒或作业组合成一个单一名称,形式为 actorreminder||<namespace>||<type>||<id>||<name>(或作业为 app||<namespace>||<appID>||<name>),使用 || 作为内部分隔符。
每个用 || 分隔的段随后根据Kubernetes的DNS-1123子域名规则进行验证,该规则仅允许小写字母数字字符、- 和 .。
这比Dapr在其API边缘已接受的字符集要严格得多,导致了Actor调用和提醒注册之间的不一致性。
因为验证器在检查前会将每个段转换为小写,所以大写名称在实践中通过了验证,而显示的错误仍然引用仅限小写的RFC 1123子域名。
解决方案
调度器现在使用与Dapr在其API边缘应用的相同策略来验证名称,因此任何可用于Actor调用的字符也可用于提醒或作业。
提醒名称、作业名称和Actor标识符现在可以包含除 /、\\、#、?、控制字符(包括NUL字节)以及确切的路径序列 . 和 .. 以外的任何字符。
允许使用大写字母以及 | 和 @ 等字符,|| 在Actor ID和名称中继续被接受。
列出包含 || 的Actor ID的提醒现在也会报告正确的Actor元数据。
验证错误现在会描述实际被禁止的字符。
更新内容 (原始)
Dapr 1.16.17
This update contains the following bug fix:
Actor reminders and jobs fail to register when their name or actor ID contains characters such as | or @
Problem
Registering an actor reminder through the Scheduler service failed when the reminder name, or the actor ID it belongs to, contained certain characters such as the pipe | or at sign @.
The same characters are accepted when invoking actors and when saving actor state, so an actor that worked everywhere else could not have a reminder created for it.
The error returned in this case was also misleading:
a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
It claimed only lowercase names were allowed even though uppercase names are in fact accepted, and it did not describe which characters were actually rejected.
Impact
You were affected if you used Scheduler-backed actor reminders (the default since 1.15) and your reminder names, actor IDs, or scheduled job names contained characters outside the strict DNS-1123 set, for example |, @, or uppercase letters.
Root Cause
The Scheduler composes each reminder or job into a single name of the form actorreminder||<namespace>||<type>||<id>||<name> (or app||<namespace>||<appID>||<name> for jobs), using || as an internal delimiter.
Each ||-delimited segment was then validated against Kubernetes’ DNS-1123 subdomain rules, which only permit lowercase alphanumeric characters, -, and ..
This was far stricter than the character set Dapr already accepts at its API edge, producing the inconsistency between actor invocation and reminder registration.
Because the validator lowercased each segment before checking it, uppercase names passed in practice while the surfaced error still referred to lowercase-only RFC 1123 subdomains.
Solution
The Scheduler now validates names using the same policy Dapr applies at its API edge, so anything accepted for actor invocation can also be used for a reminder or job.
Reminder names, job names, and actor identifiers may now contain any character except /, \, #, ?, control characters (including the NUL byte), and the exact path sequences . and ...
Uppercase letters and characters such as | and @ are allowed, and || continues to be accepted within actor IDs and names.
Listing reminders for actors whose IDs contain || now also reports the correct actor metadata.
Validation errors now describe the characters that are actually disallowed.
下载链接
- daprd_darwin_amd64.tar.gz
- daprd_darwin_amd64.tar.gz.sha256
- daprd_darwin_arm64.tar.gz
- daprd_darwin_arm64.tar.gz.sha256
- daprd_linux_amd64-stablecomponents.tar.gz
- daprd_linux_amd64-stablecomponents.tar.gz.sha256
- daprd_linux_amd64.tar.gz
- daprd_linux_amd64.tar.gz.sha256
- daprd_linux_arm-stablecomponents.tar.gz
- daprd_linux_arm-stablecomponents.tar.gz.sha256
- daprd_linux_arm.tar.gz
- daprd_linux_arm.tar.gz.sha256
- daprd_linux_arm64-stablecomponents.tar.gz
- daprd_linux_arm64-stablecomponents.tar.gz.sha256
- daprd_linux_arm64.tar.gz
- daprd_linux_arm64.tar.gz.sha256
- daprd_windows_amd64.zip
- daprd_windows_amd64.zip.sha256
- grafana-actor-dashboard.json
- grafana-actor-dashboard.json.sha256
- grafana-sidecar-dashboard.json
- grafana-sidecar-dashboard.json.sha256
- grafana-system-services-dashboard.json
- grafana-system-services-dashboard.json.sha256
- injector_darwin_amd64.tar.gz
- injector_darwin_amd64.tar.gz.sha256
- injector_darwin_arm64.tar.gz
- injector_darwin_arm64.tar.gz.sha256
- injector_linux_amd64.tar.gz
- injector_linux_amd64.tar.gz.sha256
- injector_linux_arm.tar.gz
- injector_linux_arm.tar.gz.sha256
- injector_linux_arm64.tar.gz
- injector_linux_arm64.tar.gz.sha256
- injector_windows_amd64.zip
- injector_windows_amd64.zip.sha256
- operator_darwin_amd64.tar.gz
- operator_darwin_amd64.tar.gz.sha256
- operator_darwin_arm64.tar.gz
- operator_darwin_arm64.tar.gz.sha256
- operator_linux_amd64.tar.gz
- operator_linux_amd64.tar.gz.sha256
- operator_linux_arm.tar.gz
- operator_linux_arm.tar.gz.sha256
- operator_linux_arm64.tar.gz
- operator_linux_arm64.tar.gz.sha256
- operator_windows_amd64.zip
- operator_windows_amd64.zip.sha256
- placement_darwin_amd64.tar.gz
- placement_darwin_amd64.tar.gz.sha256
- placement_darwin_arm64.tar.gz
- placement_darwin_arm64.tar.gz.sha256
- placement_linux_amd64.tar.gz
- placement_linux_amd64.tar.gz.sha256
- placement_linux_arm.tar.gz
- placement_linux_arm.tar.gz.sha256
- placement_linux_arm64.tar.gz
- placement_linux_arm64.tar.gz.sha256
- placement_windows_amd64.zip
- placement_windows_amd64.zip.sha256
- scheduler_darwin_amd64.tar.gz
- scheduler_darwin_amd64.tar.gz.sha256
- scheduler_darwin_arm64.tar.gz
- scheduler_darwin_arm64.tar.gz.sha256
- scheduler_linux_amd64.tar.gz
- scheduler_linux_amd64.tar.gz.sha256
- scheduler_linux_arm.tar.gz
- scheduler_linux_arm.tar.gz.sha256
- scheduler_linux_arm64.tar.gz
- scheduler_linux_arm64.tar.gz.sha256
- scheduler_windows_amd64.zip
- scheduler_windows_amd64.zip.sha256
- sentry_darwin_amd64.tar.gz
- sentry_darwin_amd64.tar.gz.sha256
- sentry_darwin_arm64.tar.gz
- sentry_darwin_arm64.tar.gz.sha256
- sentry_linux_amd64.tar.gz
- sentry_linux_amd64.tar.gz.sha256
- sentry_linux_arm.tar.gz
- sentry_linux_arm.tar.gz.sha256
- sentry_linux_arm64.tar.gz
- sentry_linux_arm64.tar.gz.sha256
- sentry_windows_amd64.zip
- sentry_windows_amd64.zip.sha256