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 的文档都缺乏针对集成、用例和最佳实践的具体说明。
示意图
考虑以下简单的基础架构设计:
传说:
- CS:领事服务器
- CA:领事代理人
- MA:微服务 A
- MB:微服务 B
- MC:微服务 C
- EF:特使前置/边缘代理
问题
以下是我的问题:
- 在多实例微服务的情况下,Consul(作为
独立)将随机循环。与特使和领事
集成,consul如何处理多实例微服务?哪个
软件做负载平衡?
- Consul 有 Consul Server 来存储它的数据,但是,似乎是 Envoy
没有 "Envoy Server" 来存储它的数据,所以它在哪里
数据被存储并分布在多个实例中?
- Envoy集群呢(Envoy前置代理的逻辑组
而不是服务集群)? leader是怎么选出来的?
- 正如我上面提到的,Consul 和 Envoy 分别有他们的
sidecar/agent 在每台机器上。我读到整合后,领事
注入 Envoy Sidecar,但没有关于其工作原理的更多信息?
- 如果 Envoy 将 Consul Server 用作 "xDS",例如我想
添加高级过滤器,以便对于某些 URL 段它必须
转发到某个实例?
- 如果 Envoy 将 Consul Server 用作 "xDS",如果我有另一台机器怎么办
和服务(出于某种原因)不由 Consul Server 管理。我怎么
配置 Envoy 为该机器添加过滤器、集群等
服务?
谢谢,我很兴奋我希望这个话题也能对其他人有所帮助。
抱歉回复晚了。我认为迟到总比不到好。 :-)
- 如果您仅使用 Consul 进行服务发现,并直接通过 DNS 查询,那么 Consul 将随机化返回给客户端的 IP 地址。如果您正在查询 HTTP 接口,则由客户端根据响应中返回的主机实施负载平衡策略。当您使用 Consul 服务网格时,负载平衡功能将完全由 Envoy.
处理
- Consul 是一个 xDS 服务器。数据存储在 Consul 中并分发给集群中的代理。有关详细信息,请参阅 Connect Architecture 文档。
- Envoy 集群类似于后端服务器池。代理包含每个上游服务的集群。在每个集群中,都有代表上游服务的各个代理实例的端点。
- Consul 在 Kubernetes 上部署时可以注入 Envoy sidecar。它通过 Kubernetes mutating admission webhook. See Connect Sidecar on Kubernetes: Installation and Configuration 执行此操作以获取更多信息。
- Consul 支持高级第 7 层路由功能。您可以配置
service-router
以通过 URL 路径、headers、查询参数等将请求路由到不同的目的地。
- Consul 在 1.8 版中有一个即将推出的功能,称为终止网关,可能会启用此用例。有关详细信息,请参阅 GitHub 问题 "Connect: Terminating (External Service) Gateways" (hashicorp/consul#6357)。
背景
我有 HAproxy 背景,最近有很多关于 "Service Mesh" 架构的炒作。长话短说,我开始学习"Envoy"和"Consul"。
我逐渐理解 Envoy 是一个代理软件,但使用 sidecar 来抽象输入输出网络,"xDS" 作为数据平面的真实来源(集群、路由、过滤器等)。 Consul 是 Service Discovery,Segmentation 等。它也抽象网络并有 Data Plane 但 Consul 不能像 Envoy 那样做复杂的负载平衡,过滤路由。
作为 Standalone,我可以理解它们的工作原理并设置它们,因为文档相对较好。但是,如果我想集成 Envoy 和 Consul,它很快就会变得令人头疼,因为 Envoy 和 Consul 的文档都缺乏针对集成、用例和最佳实践的具体说明。
示意图
考虑以下简单的基础架构设计:
传说:
- CS:领事服务器
- CA:领事代理人
- MA:微服务 A
- MB:微服务 B
- MC:微服务 C
- EF:特使前置/边缘代理
问题
以下是我的问题:
- 在多实例微服务的情况下,Consul(作为 独立)将随机循环。与特使和领事 集成,consul如何处理多实例微服务?哪个 软件做负载平衡?
- Consul 有 Consul Server 来存储它的数据,但是,似乎是 Envoy 没有 "Envoy Server" 来存储它的数据,所以它在哪里 数据被存储并分布在多个实例中?
- Envoy集群呢(Envoy前置代理的逻辑组 而不是服务集群)? leader是怎么选出来的?
- 正如我上面提到的,Consul 和 Envoy 分别有他们的 sidecar/agent 在每台机器上。我读到整合后,领事 注入 Envoy Sidecar,但没有关于其工作原理的更多信息?
- 如果 Envoy 将 Consul Server 用作 "xDS",例如我想 添加高级过滤器,以便对于某些 URL 段它必须 转发到某个实例?
- 如果 Envoy 将 Consul Server 用作 "xDS",如果我有另一台机器怎么办 和服务(出于某种原因)不由 Consul Server 管理。我怎么 配置 Envoy 为该机器添加过滤器、集群等 服务?
谢谢,我很兴奋我希望这个话题也能对其他人有所帮助。
抱歉回复晚了。我认为迟到总比不到好。 :-)
- 如果您仅使用 Consul 进行服务发现,并直接通过 DNS 查询,那么 Consul 将随机化返回给客户端的 IP 地址。如果您正在查询 HTTP 接口,则由客户端根据响应中返回的主机实施负载平衡策略。当您使用 Consul 服务网格时,负载平衡功能将完全由 Envoy. 处理
- Consul 是一个 xDS 服务器。数据存储在 Consul 中并分发给集群中的代理。有关详细信息,请参阅 Connect Architecture 文档。
- Envoy 集群类似于后端服务器池。代理包含每个上游服务的集群。在每个集群中,都有代表上游服务的各个代理实例的端点。
- Consul 在 Kubernetes 上部署时可以注入 Envoy sidecar。它通过 Kubernetes mutating admission webhook. See Connect Sidecar on Kubernetes: Installation and Configuration 执行此操作以获取更多信息。
- Consul 支持高级第 7 层路由功能。您可以配置
service-router
以通过 URL 路径、headers、查询参数等将请求路由到不同的目的地。 - Consul 在 1.8 版中有一个即将推出的功能,称为终止网关,可能会启用此用例。有关详细信息,请参阅 GitHub 问题 "Connect: Terminating (External Service) Gateways" (hashicorp/consul#6357)。