Envoy代理转发与xDS映射关系

开发 前端
Envoy作为Istio默认数据面代理,它的工作流程是怎么样的?本文通过示例运行,走查其运行流程,以及xDS协议映射。

[[429446]]

引言

Envoy作为Istio默认数据面代理,它的工作流程是怎么样的?本文通过示例运行,走查其运行流程,以及xDS协议映射。

一、xDS

xDS 协议是“X Discovery Service”的简写,这里的“X”表示它不是指具体的某个协议,是一组基于不同数据源的服务发现协议的总称,包括 CDS、LDS、EDS、RDS等。在Istio架构中,基于xDS协议提供了标准的控制面规范,并以此向数据面传递服务信息和治理规则。在Envoy中,xDS被称为数据平面 API,并且担任控制平面Pilot和数据平面Envoy的通信协议。

CDS 是 Cluster Discovery Service的缩写,Envoy使用它在进行路由的时候发现上游Cluster。Envoy通常会优雅地添加、更新和删除 Cluster。有了 CDS 协议,Envoy在初次启动的时候不一定要感知拓扑里所有的上游Cluster。在做路由 HTTP 请求的时候通过在 HTTP 请求头里添加 Cluster信息实现请求转发。

EDS 即Endpoint Discovery Service 的缩写。在Envoy术语中,Endpoint即Cluster的成员。Envoy 通过 EDS API可以更加智能地动态获取上游Endpoint。

LDS 即Listener Discovery Service的缩写。基于此,Envoy 可以在运行时发现所有的Listener,包括 L3 和 L4 filter 等所有的 filter 栈,并由此执行各种代理工作,如认证、TCP 代理和 HTTP 代理等。添加 LDS 使得 Envoy 的任何配置都可以动态执行。

RDS 即 Router Discovery Service 的缩写,用于 Envoy 在运行时为 HTTP 连接管理 filter 获取完整的路由配置,比如 HTTP 头部修改等。并且路由配置会被优雅地写入而无需影响已有的请求。当 RDS 和 EDS、CDS 共同使用时,可以帮助构建一个复杂的路由拓扑蓝绿发布等。

ADS EDS,CDS 等每个独立的服务都对应了不同的 gRPC 服务名称。对于需要控制不同类型资源抵达 Envoy 顺序的需求,可以使用聚合发现服务,即 Aggregated xDS,它可以通过单一的 gRPC 服务流支持所有的资源类型,借助于有序的配置分发,从而解决资源更新顺序的问题。

备注:上述概念摘自 https://www.servicemesher.com/istio-handbook/ecosystem/xds.html

二、Envoy代理示例

安装部署

以mac版本为例,安装看看

  1. brew update 
  2. brew install envoy 

版本检查

  1. envoy --version 
  2.  
  3. envoy  version: a2a1e3eed4214a38608ec223859fcfa8fb679b14/1.19.1/Modified/RELEASE/BoringSSL 

下载示例yaml文件

  1. https://www.envoyproxy.io/docs/envoy/latest/_downloads/92dcb9714fb6bc288d042029b34c0de4/envoy-demo.yaml 

示例运行

  1. envoy -c envoy-demo.yaml 

访问以下地址会路由转发到Envoy官方地址「www.envoyproxy.io」

  1. http://localhost:10000/ 

三、逻辑走查

envoy-demo.yaml文件走查

概念

LDS(Listener Discovery Service):监听发现服务

RDS(Route Discovery Service):路由发现服务

CDS(Cluster Discovery Service):集群发现服务

EDS(Endpoint Discovery Service):集群成员发现服务

流程:

1.Listener通过监听端口(10000)将请求根据Route提供的策略转发

2.Route可以配置路由规则,示例中转发到名字为「service_envoyproxy_io」的cluster

3.Cluster中可以配置行为相同的多个EndPoint,多个EndPoint可以配置负载均衡策略

4.EndPoint最终转发的节点地址

本文转载自微信公众号「瓜农老梁」,可以通过以下二维码关注。转载本文请联系瓜农老梁公众号。

 

责任编辑:武晓燕 来源: 瓜农老梁
相关推荐

2012-05-10 09:44:39

MongoDBJava

2023-10-09 07:01:06

Nginx反向代理Envoy

2009-09-25 12:59:52

Hibernate映射

2009-09-15 11:29:04

LINQ to SQL

2009-09-23 13:26:10

Hibernate对象

2012-02-08 12:17:38

HibernateJava

2009-06-18 14:22:06

Hibernate多对Hibernate

2022-09-16 10:00:31

端口服务器

2019-07-25 15:15:54

端口映射服务器

2012-02-15 00:32:27

haproxy负载均衡

2011-03-16 12:55:00

iptables 端口

2020-10-22 08:05:46

Nginx

2019-08-26 10:31:12

正向代理反向代理安全

2018-11-22 10:47:36

Docker数据备份

2021-11-14 21:53:50

服务器Node接口转发管理服务器

2009-06-02 14:46:26

Hibernate关系映射教程

2018-12-24 08:48:14

NginxApache Cookie

2012-09-20 10:51:16

IBMdw

2019-06-19 15:34:39

Nginx反向代理负载均衡

2012-02-08 13:34:08

HibernateJava
点赞
收藏

51CTO技术栈公众号