HashiCorp Consul
详细介绍了关于 HashiCorp Consul 服务发现组件的信息
配置格式
Hashicorp Consul 是在 Dapr Configuration 中设置的。
在配置中,添加一个 nameResolution
spec ,并将 component
字段设置为 "consul
。
如果您正在使用 Dapr sidecar 注册您的服务到 Consul ,那么您将需要以下配置:
apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
name: appconfig
spec:
nameResolution:
component: "consul"
configuration:
selfRegister: true
如果 Consul 服务注册由 Dapr 外部管理,则需要确保将 Dapr-to-Dapr 内部 gRPC 端口添加到 DAPR_PORT
下的服务元数据中(此项是可配置的),并且 Consul 服务 ID 与 Dapr 应用 ID 匹配。 然后,您可以从上面的配置中省略 selfRegister
。
行为
在启动时,Consul组件将验证与配置的(或默认的)代理的连接,或者如果配置了服务,则注册该服务。 名称解析接口不能满足 “shutdown “的模式,所以如果使用 Dapr 向 Consul 注册服务,请考虑它不会取消注册服务。
该组件通过过滤健康的服务来解决目标应用程序,并在元数据中寻找DAPR_PORT
,以检索Dapr sidecar端口(该项是可配置的)。 Consul service.meta
在service.port
之上使用,以便不干扰现有的Consul数据。
Spec 配置字段
截至发稿时,配置规格已固定为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 | 在注册服务服务时包含的额外 metadata | DAPR_METRICS_PORT: “${DAPR_METRICS_PORT}” |
DaprPortMetaKey | N | string | 用于在服务解析过程中从Consul服务元数据中获取Dapr sidecar 端口的 key,它也将用于在注册时在元数据中设置Dapr sidecar 端口。 如果留空,它将默认为 DAPR_PORT | “DAPR_TO_DAPR_PORT” |
SelfRegister | N | bool | 控制 Dapr 是否会向 Consul 注册服务。 名称解析接口不能满足 “shutdown “的模式,所以如果使用 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
然后可以自定义 checks, tags 和 meta
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"
高级注册
配置高级注册后,您可以完全控制注册时可能的所有属性。
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 指南