名称解析提供者组件规范
支持Dapr服务调用的名称解析提供者
以下组件用于为服务调用模块提供名称解析功能。
名称解析组件可以通过配置进行设置。
Table headers to note:
Header | Description | Example |
---|
Status | Component certification status | Alpha 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
Kubernetes
Component | Status | Component version | Since runtime version |
---|
Kubernetes | Stable | v1 | 1.0 |
Self-Hosted
Component | Status | Component version | Since runtime version |
---|
mDNS | Stable | v1 | 1.0 |
1 - HashiCorp Consul
HashiCorp Consul 名称解析组件的详细信息
配置格式
在 Dapr 配置 中设置 HashiCorp Consul。
在配置中,添加 nameResolution
规范,并将 component
字段设为 "consul"
。
如果您使用 Dapr sidecar 将服务注册到 Consul,需要以下配置:
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
nameResolution:
component: "consul"
configuration:
selfRegister: true
如果 Consul 服务注册由 Dapr 外部管理,您需要确保 Dapr 到 Dapr 的内部 gRPC 端口已添加到服务元数据中的 DAPR_PORT
(此键是可配置的),并且 Consul 服务 ID 与 Dapr 应用 ID 匹配。在这种情况下,可以省略上述配置中的 selfRegister
。
行为
在 init
时,Consul 组件会验证与配置的(或默认的)代理的连接,或者在配置时注册服务。名称解析接口不支持“关闭时”模式,因此在使用 Dapr 将服务注册到 Consul 时请注意,它不会注销服务。
该组件通过过滤健康服务来解析目标应用,并在元数据中查找 DAPR_PORT
(键是可配置的)以获取 Dapr sidecar 端口。Consul 使用 service.meta
而不是 service.port
,以避免干扰现有的 Consul 配置。
规范配置字段
配置规范基于 Consul API 的 v1.3.0 版本
字段 | 必需 | 类型 | 详情 | 示例 |
---|
Client | N | *api.Config | 配置客户端连接到 Consul 代理。如果为空,将使用 SDK 默认值,即地址 127.0.0.1:8500 | 10.0.4.4:8500 |
QueryOptions | N | *api.QueryOptions | 配置用于解析健康服务的查询,如果为空,将默认为 UseCache:true | UseCache: false , Datacenter: "myDC" |
Checks | N | []*api.AgentServiceCheck | 配置健康检查(如果/当注册时)。如果为空,将默认为 Dapr sidecar 健康端点上的单个健康检查 | 参见 示例配置 |
Tags | N | []string | 配置注册服务时要包含的任何标签 | - "dapr" |
Meta | N | map[string]string | 配置注册服务时要包含的任何附加元数据 | DAPR_METRICS_PORT: "${DAPR_METRICS_PORT}" |
DaprPortMetaKey | N | string | 用于从 Consul 服务元数据中获取 Dapr sidecar 端口的键,在服务解析期间,它也将用于在注册期间在元数据中设置 Dapr sidecar 端口。如果为空,将默认为 DAPR_PORT | "DAPR_TO_DAPR_PORT" |
SelfRegister | N | bool | 控制 Dapr 是否将服务注册到 Consul。名称解析接口不支持“关闭时”模式,因此如果使用 Dapr 将服务注册到 Consul,请注意它不会注销服务。如果为空,将默认为 false | true |
AdvancedRegistration | N | *api.AgentServiceRegistration | 通过配置提供对服务注册的完全控制。如果配置了该组件,将忽略 Checks、Tags、Meta 和 SelfRegister 的任何配置。 | 参见 示例配置 |
示例配置
基本
所需的最低配置如下:
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
nameResolution:
component: "consul"
带有额外自定义的注册
启用 SelfRegister
后,可以自定义检查、标签和元数据
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
nameResolution:
component: "consul"
configuration:
client:
address: "127.0.0.1:8500"
selfRegister: true
checks:
- name: "Dapr Health Status"
checkID: "daprHealth:${APP_ID}"
interval: "15s"
http: "http://${HOST_ADDRESS}:${DAPR_HTTP_PORT}/v1.0/healthz"
- name: "Service Health Status"
checkID: "serviceHealth:${APP_ID}"
interval: "15s"
http: "http://${HOST_ADDRESS}:${APP_PORT}/health"
tags:
- "dapr"
- "v1"
- "${OTHER_ENV_VARIABLE}"
meta:
DAPR_METRICS_PORT: "${DAPR_METRICS_PORT}"
DAPR_PROFILE_PORT: "${DAPR_PROFILE_PORT}"
daprPortMetaKey: "DAPR_PORT"
queryOptions:
useCache: true
filter: "Checks.ServiceTags contains dapr"
高级注册
配置高级注册可以让您在注册时完全控制设置所有可能的 Consul 属性。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
nameResolution:
component: "consul"
configuration:
client:
address: "127.0.0.1:8500"
selfRegister: false
queryOptions:
useCache: true
daprPortMetaKey: "DAPR_PORT"
advancedRegistration:
name: "${APP_ID}"
port: ${APP_PORT}
address: "${HOST_ADDRESS}"
check:
name: "Dapr Health Status"
checkID: "daprHealth:${APP_ID}"
interval: "15s"
http: "http://${HOST_ADDRESS}:${DAPR_HTTP_PORT}/v1.0/healthz"
meta:
DAPR_METRICS_PORT: "${DAPR_METRICS_PORT}"
DAPR_PROFILE_PORT: "${DAPR_PROFILE_PORT}"
tags:
- "dapr"
设置 HashiCorp Consul
HashiCorp 提供了关于如何为不同托管模型设置 Consul 的深入指南。查看 自托管指南
HashiCorp 提供了关于如何为不同托管模型设置 Consul 的深入指南。查看 Kubernetes 指南
相关链接
2 - Kubernetes DNS
详细介绍 Kubernetes DNS 名称解析组件
配置格式
一般情况下,Kubernetes 模式下的 Kubernetes DNS 名称解析由 Dapr 自动配置。除非需要对 Kubernetes 名称解析组件进行特定的覆盖,否则无需额外配置即可使用 Kubernetes DNS 作为名称解析提供者。
如果需要进行覆盖,可以在 Dapr 配置 CRD 中,添加一个 nameResolution
规范,并将 component
字段设置为 "kubernetes"
。其他配置字段可以根据需要在 configuration
映射中设置,如下所示。
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
nameResolution:
component: "kubernetes"
configuration:
clusterDomain: "cluster.local" # 与 template 字段互斥
template: "{{.ID}}-{{.Data.region}}.internal:{{.Port}}" # 与 clusterDomain 字段互斥
行为
该组件通过 Kubernetes 集群的 DNS 提供者来解析目标应用。您可以在 Kubernetes 文档中了解更多信息。
规范配置字段
配置规范固定为 Consul API 的 v1.3.0 版本
字段 | 必需 | 类型 | 详情 | 示例 |
---|
clusterDomain | N | string | 用于解析地址的集群域。此字段与 template 字段互斥。 | cluster.local |
template | N | string | 使用 text/template 解析地址时的模板字符串。模板将由 ResolveRequest 结构中的字段填充。此字段与 clusterDomain 字段互斥。 | {{.ID}}-{{.Data.region}}.{{.Namespace}}.internal:{{.Port}} |
相关链接
3 - mDNS
mDNS名称解析组件的详细信息
配置格式
在Dapr的自托管模式中,mDNS会自动配置。使用mDNS作为名称解析提供程序无需进行任何配置。
行为
该组件通过主机系统的mDNS服务来解析目标应用程序。您可以在这里了解更多关于mDNS的信息。
故障排除
在某些云提供商的虚拟网络中,例如Microsoft Azure,mDNS可能不可用。请使用其他提供程序,例如HashiCorp Consul。
在某些企业管理的系统上,如果配置了网络过滤器或代理,macOS上的mDNS可能会被禁用。如果mDNS被禁用且您无法在本地使用服务调用,请与您的IT部门确认。
规格配置字段
不适用,因为在自托管模式下运行时,mDNS由Dapr自动配置。
相关链接
4 - SQLite
详细介绍SQLite名称解析组件
SQLite名称解析组件可以作为mDNS的替代方案,适用于在单节点环境中运行Dapr以及本地开发场景。集群中的Dapr sidecar会将其信息存储在本地机器上的SQLite数据库中。
注意
该组件经过优化,适用于所有Dapr实例运行在同一台物理机器上的场景,数据库通过同一个本地挂载的磁盘进行访问。
通过网络(包括SMB/NFS)使用SQLite名称解析器访问数据库文件可能会导致数据损坏,因此不支持。配置格式
名称解析通过Dapr配置进行设置。
在配置YAML中,将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"
规格配置字段
使用SQLite名称解析组件时,spec.nameResolution.configuration
字典包含以下选项:
字段 | 必需 | 类型 | 详情 | 示例 |
---|
connectionString | Y | string | SQLite数据库的连接字符串。通常,这是磁盘上文件的路径,可以是相对路径或绝对路径。 | "nr.db" (相对于工作目录),"/home/user/.dapr/nr.db" |
updateInterval | N | Go duration (作为string ) | 活跃的Dapr sidecar在数据库中更新其状态的间隔,用作健康检查。 较小的间隔减少了应用程序离线时返回过时数据的可能性,但增加了数据库的负载。 必须至少比timeout 大1秒。带有秒数分数的值会被截断(例如,1500ms 变为1s )。默认值:5s | "2s" |
timeout | N | Go duration (作为string )。 必须至少为1秒。 | 数据库操作的超时时间。整数被解释为秒数。默认值为1s | "2s" ,2 |
tableName | N | string | 存储数据的表的名称。如果表不存在,Dapr会创建该表。默认值为hosts 。 | "hosts" |
metadataTableName | N | string | Dapr用于存储组件元数据的表的名称。如果表不存在,Dapr会创建该表。默认值为metadata 。 | "metadata" |
cleanupInterval | N | Go duration (作为string ) | 从数据库中删除过时记录的间隔。默认值:1h (1小时) | "10m" |
busyTimeout | N | Go duration (作为string ) | 在SQLite数据库当前忙于处理另一个请求时等待的间隔,然后返回“数据库忙”错误。这是一个高级设置。busyTimeout 控制SQLite中的锁定工作方式。对于SQLite,写入是独占的,因此每次任何应用程序写入时,数据库都会被锁定。如果另一个应用程序尝试写入,它会等待最多busyTimeout 时间,然后返回“数据库忙”错误。然而,timeout 设置控制整个操作的超时时间。例如,如果查询“挂起”,在数据库获取锁之后(即在忙超时清除之后),则timeout 生效。默认值:800ms (800毫秒) | "100ms" |
disableWAL | N | bool | 如果设置为true,则禁用SQLite数据库的预写日志记录。这仅适用于高级场景 | true ,false |
相关链接