3

背景


我来自 HAproxy 背景,最近有很多关于“服务网格”架构的炒作。长话短说,我开始学习“特使”和“领事”。

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

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

示意图


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

在此处输入图像描述

传说:

  • CS:领事服务器
  • CA:领事代理
  • MA:微服务 A
  • MB:微服务 B
  • MC:微服务 C
  • EF:特使正面/边缘代理

问题


以下是我的问题:

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

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

4

1 回答 1

1

为迟到的回复道歉。我认为迟到总比没有好。:-)

  1. 如果您只使用 Consul 进行服务发现,并直接通过 DNS 查询它,那么 Consul 将随机化返回给客户端的 IP 地址。如果您正在查询 HTTP 接口,则由客户端根据响应中返回的主机来实现负载平衡策略。当你使用 Consul 服务网格时,负载均衡功能将完全由 Envoy 处理。
  2. Consul 是一个 xDS 服务器。数据存储在 Consul 中并分发给集群内的代理。有关更多信息,请参阅连接架构文档。
  3. Envoy 集群类似于后端服务器池。代理包含每个上游服务的集群。在每个集群中,都有代表上游服务的各个代理实例的端点。
  4. Consul 可以在 Envoy sidecar 部署在 Kubernetes 上时注入它。它通过一个 Kubernetes mutating admission webhook来做到这一点。有关更多信息,请参阅在 Kubernetes 上连接 Sidecar:安装和配置
  5. Consul 支持高级的第 7 层路由功能。您可以配置 aservice-router通过 URL 路径、标头、查询参数等将请求路由到不同的目的地。
  6. Consul 在 1.8 版中有一个即将推出的功能,称为终止网关,它可能会启用此用例。有关更多信息,请参阅 GitHub 问题“连接:终止(外部服务)网关”(hashicorp/consul#6357)。
于 2020-04-29T07:42:04.390 回答