云原生网络基础设施的核心组件Envoy

我们来全面、深入地探讨一下 Envoy 这个在现代微服务架构中扮演着至关重要角色的中间件。

Envoy 是一个开源的、高性能的边缘和服务代理 ,专为云原生应用而设计。它最初由 Lyft 公司开发,后来捐赠给 Cloud Native Computing Foundation (CNCF) ,并已成为毕业项目,与 Kubernetes、Prometheus 等项目同级,这标志着其成熟度和广泛应用性。


一、Envoy 的核心定位:它是什么?

简单来说,Envoy 是一个"智能网络管道"。在微服务架构中,服务之间的通信(东西向流量)以及外部客户端到内部服务的通信(南北向流量)变得极其复杂。Envoy 的核心工作就是透明地接管这些网络流量,并为其提供一系列关键功能,而无需修改应用程序代码

核心设计理念:

  • 透明代理:应用程序通常不知道 Envoy 的存在。它们像平常一样发起网络调用,但这些调用被 Envoy 拦截和处理。

  • 面向 API:所有配置(理论上)都可以通过 API 动态下发,使其能够快速适应变化的环境。

  • 现代 C++:高性能、低延迟、低资源开销。


二、Envoy 的核心功能(为什么它如此强大?)

Envoy 的功能集非常丰富,几乎涵盖了现代网络中间件的所有需求。

1. 服务发现与动态配置
  • Envoy 可以自动发现上游(Upstream)服务实例。它支持多种服务发现源,如:

    • Kubernetes API:自动发现 Pod 和 Endpoints。

    • Consul, Eureka, Nacos:与其他服务注册中心集成。

    • 静态配置:直接配置 IP 地址列表。

  • 通过 xDS API(如 EDS, CDS, LDS, RDS)可以动态接收所有配置(监听器、集群、路由等)的更新,无需重启,实现"热配置"。

2. 高级负载均衡
  • 算法多样:支持轮询、最少请求、哈希、随机加权等。

  • 地域感知路由:优先将流量路由到同一地域或可用区的服务实例,降低延迟。

  • 断路器:自动检测不健康的上游实例,将其从负载均衡池中移除,防止故障扩散。

3. 可观察性(Observability)

这是 Envoy 的一大亮点。它生成了极其丰富的运行时数据:

  • 指标(Metrics) :大量内置指标(如请求数、延迟、错误码)可通过 /stats 端点暴露,并与 Prometheus 等系统集成。

  • 分布式追踪(Tracing):原生支持 Zipkin、Jaeger、OpenTelemetry 等,自动为请求注入追踪头,帮助定位跨服务性能问题。

  • 访问日志(Access Logs):记录每个请求的详细信息,可自定义格式并输出到文件或标准输出。

4. 安全(Security)
  • TLS 终端:可以在代理处终止 TLS 连接,减轻后端服务的负担。

  • mTLS(双向 TLS) :在服务之间建立基于身份的双向加密通信通道,这是实现零信任网络的基石。

  • 网络层控制:支持基于 IP/CIDR 的访问控制。

5. 高级路由与流量管理
  • 基于内容的路由:可以根据 HTTP 头部、路径、方法等信息将流量路由到不同的服务版本。

  • 流量切分/镜像:可以将特定比例的流量(如 1%)导入到新的服务版本(金丝雀发布),或者将流量镜像(复制)到另一个服务而不影响主流程(影子流量)。

  • 重试、超时、熔断:精细控制请求的重试策略、超时时间和故障处理逻辑。

6. 协议支持
  • 支持 HTTP/1.1, HTTP/2, gRPC, WebSocket 等主流应用层协议。

  • 甚至支持原始 TCP 和 UDP 代理。


三、Envoy 的典型部署模式

Envoy 的部署非常灵活,主要有两种模式:

  1. Sidecar 模式(服务网格的核心)

    • 这是 Envoy 最著名的部署模式。在每个微服务应用的 Pod(如 Kubernetes Pod)中,都会部署一个 Envoy 容器。该 Envoy 代理只负责处理这个特定 Pod 的进出流量。

    • 好处:将网络功能从业务代码中彻底解耦,实现了基础设施层和业务逻辑层的分离。

    • 代表项目Istio , Linkerd 等服务网格都将 Envoy 作为其数据平面的默认代理。

  2. 边缘代理/网关模式

    • 将 Envoy 部署在集群的入口处,作为所有外部流量的唯一入口(API 网关)。

    • 好处:统一处理 TLS 终端、路由、认证、限流等入口功能。

    • 代表项目Emissary-ingress (原 Ambassador API Gateway)和 Gloo Edge 都是基于 Envoy 构建的 API 网关。


四、Envoy 与服务网格(Service Mesh)

Envoy 是大多数现代服务网格的事实标准数据平面

  • 数据平面:由一组 Envoy 代理组成(以 Sidecar 形式部署),负责实际转发流量、执行策略(如路由、加密)、收集遥测数据。

  • 控制平面:如 Istio,负责管理和配置所有数据平面中的 Envoy 代理。它通过 xDS API 向 Envoy 下发策略和路由规则。

简单比喻:控制平面是"交通指挥中心",制定规则;数据平面(Envoy)是"每个路口的智能交通信号灯",执行规则。


五、Envoy vs. 其他代理(如 Nginx, HAProxy)

特性 Envoy Nginx HAProxy
设计初衷 微服务、云原生、动态环境 通用 Web 服务器、反向代理、负载均衡器 高性能 TCP/HTTP 负载均衡器
动态配置 核心优势,原生通过 xDS API 支持 主要通过 Lua 脚本或商业版 Nginx Plus 需要借助外部工具或特定模块
可观察性 极其丰富,内置指标、追踪、日志 良好,但高级功能需模块或商业版 良好,专注于负载均衡指标
服务网格 事实标准,是大多数服务网格的基础 较少用于此场景 较少用于此场景
性能 非常高(C++) 非常高(C) 非常高(C)
学习曲线 较陡峭,概念和配置复杂 相对平缓,配置文件直观 相对平缓
主要场景 微服务内部通信(东西向)、API 网关 Web 服务、入口负载均衡(南北向)、缓存 高性能 TCP/HTTP 负载均衡(南北向)

结论 :Nginx 和 HAProxy 在传统的南北向流量代理(如作为网站入口)方面非常成熟和优秀。而 Envoy 是为云原生时代复杂的东西向流量和服务网格场景而生的,其动态配置能力和可观察性是它的杀手锏。


总结

Envoy 已经从一个单纯的代理,演变为云原生网络基础设施的核心组件。它通过将复杂的网络逻辑(如弹性、安全、可观察性)下沉到基础设施层,极大地简化了微服务应用的开发复杂度。

  • 如果你正在构建或维护一个基于 Kubernetes 的微服务系统,并且面临服务通信混乱、故障排查困难、发布流程复杂等问题,那么引入基于 Envoy 的服务网格(如 Istio)或 API 网关将是一个非常重要的选择。

  • 对于简单的应用或传统的负载均衡需求,Nginx 或 HAProxy 可能仍然是更直接、更轻量的选择。

相关推荐
AutoMQ3 小时前
AutoMQ × Ververica:打造云原生实时数据流最佳实践!
云原生
KubeSphere 云原生3 小时前
KubeSphere 社区版即将发布:开启云原生新篇章
云原生
努力搬砖的咸鱼3 小时前
云原生 vs 传统部署
云原生
boonya3 小时前
云原生微服务中间件选型
微服务·云原生·架构
德迅云安全杨德俊3 小时前
云原生复杂多变的环境中的安全防护方案
安全·云原生
码路工人4 小时前
第6章:Docker Compose - 多容器应用的编排利器
docker·云原生·容器
3分云计算4 小时前
Prometheus-02: 安装部署与配置管理详解
运维·云原生·grafana·普罗米修斯
失散134 小时前
分布式专题——15 ZooKeeper特性与节点数据类型详解
java·分布式·zookeeper·云原生·架构
失散135 小时前
分布式专题——20 Kafka快速入门
java·分布式·云原生·架构·kafka