Envoy 是第三个从 CNCF 毕业的项目,由于其动态生效、高性能等特性,已经成为云原生事实上的数据平面标准。很多项目都会借助于 Envoy 处理数据平面流量,而专注于控制面适配应用场景,将用户输入通过 xDS 协议写入 Envoy。
1. Envoy 数据处理流程
其中
- Downstream,进 Envoy 的流量,客户端请求
- Listener,与客户端建立链接的监听器
- Network Filter Chain,处理 Listener 到 Cluster 的 TCP 请求
- HTTP Router Filter,处理 Listener 到 Cluster 的 HTTP 请求
- Cluster,上游的一组服务节点,用来接受请求
- Upstream,出 Envoy 的流量,请求的响应
2. Envoy 数据平面 API
xDS 是 LDS、RDS、CDS、EDS、SDS 等系列服务发现协议的统称。[1]其中的几个典型协议针对的阶段如下图:xDS 协议是一组 API,可以用于动态修改、拉取配置。
2.1 LDS
Listener Discovery Service 监听器发现服务,简写 LDSLDS 监听 L3/L4 层请求,可以用于限流、客户端认证、HTTP 连接管理、TCP 代理等。
2.2 RDS
Route Discovery Service,路由发现服务,简写 RDSRDS 提供 HTTP 路由管理能力,将匹配的流量转发到 Cluster。
2.3 CDS
Cluster Discovery Service,集群发现服务,简写 CDS不同于 Kubernetes Cluster,这里的 Cluster 指的是服务的对外抽象。CDS 提供对 Cluster 的增删改查的功能。
2.4 EDS
Endpoint Discovery Service,端点发现服务,简写 EDS。一组 Endpoint 端点构成一个 Cluster。EDS 比 DNS 能提供更智能的负载均衡策略和附加信息。
2.5 SDS
Secret Discovery Service,秘钥发现服务,简写 SDS。没有 SDS 时,更新证书需要重新部署;使用 SDS 时,新证书将直接被下发给全部 Envoy 实例,不需要重新部署。
2.6 ADS
Aggregated Discovery Service,聚合发现服务,简写 ADS。单一的发现服务无法保障变更的一致性、顺序性,比如部分先请求 EDS、部分先请求 CDS。ADS 允许 Envoy 一次性处理多种资源,解决配置的一致性、顺序性问题。