Consul & Envoy 整合

Consul & Envoy Integration

背景


我有 HAproxy 背景,最近有很多关于 "Service Mesh" 架构的炒作。长话短说,我开始学习"Envoy"和"Consul"。

我逐渐理解 Envoy 是一个代理软件,但使用 sidecar 来抽象输入输出网络,"xDS" 作为数据平面的真实来源(集群、路由、过滤器等)。 Consul 是 Service Discovery,Segmentation 等。它也抽象网络并有 Data Plane 但 Consul 不能像 Envoy 那样做复杂的负载平衡,过滤路由。

作为 Standalone,我可以理解它们的工作原理并设置它们,因为文档相对较好。但是,如果我想集成 Envoy 和 Consul,它很快就会变得令人头疼,因为 Envoy 和 Consul 的文档都缺乏针对集成、用例和最佳实践的具体说明。

示意图


考虑以下简单的基础架构设计:

传说:

问题


以下是我的问题:

  1. 在多实例微服务的情况下,Consul(作为 独立)将随机循环。与特使和领事 集成,consul如何处理多实例微服务?哪个 软件做负载平衡?
  2. Consul 有 Consul Server 来存储它的数据,但是,似乎是 Envoy 没有 "Envoy Server" 来存储它的数据,所以它在哪里 数据被存储并分布在多个实例中?
  3. Envoy集群呢(Envoy前置代理的逻辑组 而不是服务集群)? leader是怎么选出来的?
  4. 正如我上面提到的,Consul 和 Envoy 分别有他们的 sidecar/agent 在每台机器上。我读到整合后,领事 注入 Envoy Sidecar,但没有关于其工作原理的更多信息?
  5. 如果 Envoy 将 Consul Server 用作 "xDS",例如我想 添加高级过滤器,以便对于某些 URL 段它必须 转发到某个实例?
  6. 如果 Envoy 将 Consul Server 用作 "xDS",如果我有另一台机器怎么办 和服务(出于某种原因)不由 Consul Server 管理。我怎么 配置 Envoy 为该机器添加过滤器、集群等 服务?

谢谢,我很兴奋我希望这个话题也能对其他人有所帮助。

抱歉回复晚了。我认为迟到总比不到好。 :-)

  1. 如果您仅使用 Consul 进行服务发现,并直接通过 DNS 查询,那么 Consul 将随机化返回给客户端的 IP 地址。如果您正在查询 HTTP 接口,则由客户端根据响应中返回的主机实施负载平衡策略。当您使用 Consul 服务网格时,负载平衡功能将完全由 Envoy.
  2. 处理
  3. Consul 是一个 xDS 服务器。数据存储在 Consul 中并分发给集群中的代理。有关详细信息,请参阅 Connect Architecture 文档。
  4. Envoy 集群类似于后端服务器池。代理包含每个上游服务的集群。在每个集群中,都有代表上游服务的各个代理实例的端点。
  5. Consul 在 Kubernetes 上部署时可以注入 Envoy sidecar。它通过 Kubernetes mutating admission webhook. See Connect Sidecar on Kubernetes: Installation and Configuration 执行此操作以获取更多信息。
  6. Consul 支持高级第 7 层路由功能。您可以配置 service-router 以通过 URL 路径、headers、查询参数等将请求路由到不同的目的地。
  7. Consul 在 1.8 版中有一个即将推出的功能,称为终止网关,可能会启用此用例。有关详细信息,请参阅 GitHub 问题 "Connect: Terminating (External Service) Gateways" (hashicorp/consul#6357)。