如何使用 envoy、nomad 和 consul 配置 gRPC 请求的动态路由

如何使用 envoy、nomad 和 consul 配置 gRPC 请求的动态路由

我们用游牧民族部署我们的应用程序 - 提供rpc端点——作为任务。然后任务被注册到领事, 使用游牧民的服务节

我们的应用程序的路由是通过特使代理. 我们正在运行在 IP 上负载平衡的中央特使实例10.1.2.2

目前,路由到哪个端点/任务的决定是基于host标头的,并且每个任务都注册为 下的一项服务<$JOB>.our.cloud。这导致了两个问题。

  1. 访问服务时,必须为负载均衡器 IP 注册 DNS 名称,这将导致出现/etc/hosts类似以下条目

    10.1.2.2 serviceA.our.cloud serviceB.our.cloud serviceC.our.cloud
    

    通过使用,可以部分缓解此问题dnsmasq,但添加新服务时仍然有点烦人

  2. 不可能同时运行多个提供相同 gRPC 服务的服务。例如,如果我们决定测试服务的新实现,我们需要以相同的job名称运行它,并且需要实现 gRPC 服务文件中定义的所有服务。

我们一直在讨论的一个可能的解决方案是使用tagsservice来添加定义提供的 gRPC 服务的标签,例如:

service {
  tags = ["grpc-my.company.firstpackage/ServiceA", "grpc-my.company.secondpackage/ServiceB"]
}

但这是被领事

Dots are not supported because Consul internally uses them to delimit service tags.

现在我们考虑用诸如这样的标签来实现它grpc-my-company-firstpackage__ServiceA...但这看起来真的很恶心:-(

)所以我的问题是:

  • 有人做过这样的事吗?
  • 如果是这样,关于如何路由到 Consul 自动发现的 gRPC 服务有哪些建议?
  • 有人对此有其他想法或见解吗?
  • 例如如何实现这一点Istio

相关内容