Envoy 简介
什么是 Envoy?
Envoy 是一个高性能、开源的云原生代理,由 Lyft 开发并于 2016 年开源。它广泛应用于微服务架构、服务网格(如 Istio)、API 网关和边缘代理等场景,作为现代分布式系统的流量中枢,帮助开发者和运维团队解耦网络复杂性、提升可观测性和系统弹性。
Envoy 的定位与作用
- 微服务通信枢纽:在微服务架构中,Envoy 作为 Sidecar 部署在每个服务实例旁,负责所有进出流量,实现统一的流量管理、负载均衡和安全控制。
- API 网关/边缘代理:Envoy 可作为 API 网关或边缘代理,处理外部流量接入、协议转换、认证鉴权等。
- 服务网格数据平面:在服务网格(如 Istio)中,Envoy 是事实上的数据平面标准,实现服务间通信的全链路可观测、流量治理和安全。
核心功能和特点
- 高性能:Envoy 设计用于处理大规模的网络流量,具有高吞吐量和低延迟的特点。
- 动态配置:支持热重载配置,允许在不重启的情况下更新配置。
- 流量管理:提供细粒度的流量控制,包括路由、重试、故障注入等功能。
- 负载均衡:支持多种负载均衡策略,如轮询、随机、基于权重等。
- 可观测性:内置丰富的监控和日志功能,支持分布式追踪。
- 安全:支持 TLS 和 mTLS,加密传输数据,确保通信安全。
- 扩展性:支持 Lua 脚本和 WebAssembly(Wasm)扩展,可以根据需要定制功能。
典型部署模式
- Sidecar(边车)模式:每个服务实例旁部署一个 Envoy 进程,拦截和管理该实例的所有入站和出站流量,实现服务间通信的统一治理。
- Edge Proxy(边缘代理)模式:Envoy 作为集群入口,统一处理外部请求,常用于 API 网关、流量入口等场景。
架构核心要素
Envoy 采用模块化、可扩展的架构,核心组件包括:
- 监听器(Listener):定义 Envoy 接收流量的网络端点(IP:端口或 Unix Socket)。
- 过滤器链(Filter Chain):每个监听器可配置一组 L3/L4(TCP/UDP)和 L7(HTTP)过滤器,实现流量的分层处理,如 TLS、路由、认证等。
- HTTP 连接管理器(HCM):特殊的网络过滤器,将原始字节流解析为 HTTP 消息,支持 HTTP/1.1、HTTP/2、HTTP/3 和 WebSocket,负责 HTTP 过滤器链、路由、日志、追踪等。
- 路由与虚拟主机(Route & Virtual Host):根据请求路径、头部等属性,将流量路由到不同的上游集群,支持灵活的路由规则和虚拟主机配置。
- 集群与端点(Cluster & Endpoint):集群是逻辑上的上游服务组,端点是具体的服务实例地址。支持静态、DNS、xDS 动态服务发现。
- 健康检查与异常检测:支持主动和被动健康检查,自动剔除异常实例,提升系统可用性。
- 负载均衡:内置多种算法(轮询、最少请求、环形哈希、Maglev、随机等),支持细粒度流量分配。
- 可观测性:内置丰富的指标、日志和分布式追踪,便于监控和故障排查。
- 安全:支持 TLS/mTLS、JWT 认证、外部授权、RBAC 等,保障服务间通信安全。
- 扩展性:支持 Lua 脚本和 WebAssembly(Wasm)扩展,便于自定义功能。
应用场景
Envoy 广泛应用于以下场景:
- 服务网格:作为数据平面,统一治理微服务间流量,实现灰度发布、流量镜像、熔断限流等。
- API 网关:统一入口,处理认证、协议转换、速率限制等。
- 边缘代理:作为集群边界的高性能反向代理,处理 TLS 卸载、负载均衡、请求路由。
- 可观测性增强:通过 Envoy 采集全链路指标和追踪,提升系统可观测性。
诞生背景
Envoy 最初由 Lyft 为解决微服务架构下的流量管理和可观测性难题而开发。凭借高性能、丰富功能和强扩展性,Envoy 很快成为云原生领域的流量治理标准组件,并于 2017 年加入 CNCF。
欲了解更多信息,请参见 Envoy 官方文档。