HashiCorp Consul

详细介绍了关于 HashiCorp Consul 服务发现组件的信息

配置格式

Hashicorp Consul 是在 Dapr Configuration 中设置的。

在配置中,添加一个 nameResolution spec ,并将 component 字段设置为 "consul

如果您正在使用 Dapr sidecar 注册您的服务到 Consul ,那么您将需要以下配置:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Configuration
  3. metadata:
  4. name: appconfig
  5. spec:
  6. nameResolution:
  7. component: "consul"
  8. configuration:
  9. 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.metaservice.port之上使用,以便不干扰现有的Consul数据。

Spec 配置字段

截至发稿时,配置规格已固定为Consul api的v1.3.0版本

字段必填数据类型详情示例
ClientNapi.Config配置客户端与 Consul 代理的连接。 如果留空,它将使用 sdk 默认值,在这种情况下这只是 127.0.0.1:850010.0.4.4:8500
QueryOptionsNapi.QueryOptions配置用于解决健康服务的查询,如果为空白,它将默认为 UseCache:trueUseCache: false, Datacenter: “myDC”
ChecksN[]api.AgentServiceCheck当进行注册服务时,配置健康检查。 如果为空白,它将默认到 Dapr sidecar 健康端点查看 示例配置
TagsN[]string在注册服务服务时包含的额外标签- “dapr”
MetaNmap[string]string在注册服务服务时包含的额外 metadataDAPR_METRICS_PORT: “${DAPR_METRICS_PORT}”
DaprPortMetaKeyNstring用于在服务解析过程中从Consul服务元数据中获取Dapr sidecar 端口的 key,它也将用于在注册时在元数据中设置Dapr sidecar 端口。 如果留空,它将默认为 DAPR_PORT“DAPR_TO_DAPR_PORT”
SelfRegisterNbool控制 Dapr 是否会向 Consul 注册服务。 名称解析接口不能满足 “shutdown “的模式,所以如果使用 Dapr 向 Consul 注册服务,请考虑它不会取消注册服务。 如果留空,它将默认为 falsetrue
AdvancedRegistrationNapi.AgentServiceRegistration通过配置完全控制服务注册结果。 如果配置此项,组件将忽略Checks、 Tags、 Meta 和 SelfRegister的任何配置。查看 示例配置

示例配置

基础

所需的最小配置如下:

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Configuration
  3. metadata:
  4. name: appconfig
  5. spec:
  6. nameResolution:
  7. component: "consul"

注册时进行小部分定制

启用 SelfRegister 然后可以自定义 checks, tags 和 meta

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Configuration
  3. metadata:
  4. name: appconfig
  5. spec:
  6. nameResolution:
  7. component: "consul"
  8. configuration:
  9. client:
  10. address: "127.0.0.1:8500"
  11. selfRegister: true
  12. checks:
  13. - name: "Dapr Health Status"
  14. checkID: "daprHealth:${APP_ID}"
  15. interval: "15s",
  16. http: "http://${HOST_ADDRESS}:${DAPR_HTTP_PORT}/v1.0/healthz"
  17. - name: "Service Health Status"
  18. checkID: "serviceHealth:${APP_ID}"
  19. interval: "15s",
  20. http: "http://${HOST_ADDRESS}:${APP_PORT}/health"
  21. tags:
  22. - "dapr"
  23. - "v1"
  24. - "${OTHER_ENV_VARIABLE}"
  25. meta:
  26. DAPR_METRICS_PORT: "${DAPR_METRICS_PORT}"
  27. DAPR_PROFILE_PORT: "${DAPR_PROFILE_PORT}"
  28. daprPortMetaKey: "DAPR_PORT"
  29. queryOptions:
  30. useCache: true
  31. filter: "Checks.ServiceTags contains dapr"

高级注册

配置高级注册后,您可以完全控制注册时可能的所有属性。

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Configuration
  3. metadata:
  4. name: appconfig
  5. spec:
  6. nameResolution:
  7. component: "consul"
  8. configuration:
  9. client:
  10. address: "127.0.0.1:8500"
  11. selfRegister: false
  12. queryOptions:
  13. useCache: true
  14. daprPortMetaKey: "DAPR_PORT"
  15. advancedRegistration:
  16. name: "${APP_ID}"
  17. port: ${APP_PORT}
  18. address: "${HOST_ADDRESS}"
  19. check:
  20. name: "Dapr Health Status"
  21. checkID: "daprHealth:${APP_ID}"
  22. interval: "15s",
  23. http: "http://${HOST_ADDRESS}:${DAPR_HTTP_PORT}/v1.0/healthz"
  24. meta:
  25. DAPR_METRICS_PORT: "${DAPR_METRICS_PORT}"
  26. DAPR_PROFILE_PORT: "${DAPR_PROFILE_PORT}"
  27. tags:
  28. - "dapr"

搭建 Hashicorp Consul

HashiCorp提供了关于如何为不同主机模型搭建 Consul 的深度指南。 请查看此处的 自托管指南

HashiCorp提供了关于如何为不同主机模型搭建 Consul 的深度指南。 请在此查看 Kubernetes 指南

相关链接