当前位置: 首页 > news >正文

云原生网络基础设施的核心组件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 的进出流量。

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

    • 代表项目IstioLinkerd 等服务网格都将 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)

特性EnvoyNginxHAProxy
设计初衷微服务、云原生、动态环境通用 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 可能仍然是更直接、更轻量的选择。

http://www.dtcms.com/a/402956.html

相关文章:

  • KubeSphere 社区版即将发布:开启云原生新篇章
  • K8s学习笔记(五) Velero结合minnio业务数据备份与恢复
  • 23种设计模式——组合模式(Composite Pattern)
  • 培训机构网站开发汉中杨海明
  • 2- 十大排序算法(希尔排序、计数排序、桶排序)
  • 哈尔滨服务器托管优选-青蛙云
  • 【MySQL】JDBC
  • sogoupinyin输入法,LINUX版输入中文不显示中文
  • 自动化运维工具 Ansible:集中化管理服务器完全指南
  • 电影网站的建设目标做网站的公司简称什么行业
  • 【ThreeJs】【HTML载入】Three.js 中的 CSS2DRenderer 与 CSS3DRenderer 全面解析
  • (50)elasticsearch服务部署-有状态负载(华为云平台CCE)
  • 【时序预测-5】FFT、STL、ARIMA频域特征和时序分解
  • Kotlinx Serialization 指南
  • SpringBoot @Scheduled 注解详解
  • layui 表格行级 upload 上传操作
  • 【Unity 入门教程】三、如何设置自定义字体(解决中文乱码问题)
  • STM32开发(FreeRTOS实时操作系统)
  • RocketMQ-生产常见问题汇总
  • 成都网站托管外包施工企业科技宣传片
  • 小厂 Java 面试,难度怎么样?
  • Webpack5 第一节
  • 【深入理解JVM】常见的垃圾回收器
  • 东莞企业建设网站官网有限公司百度一下百度网页版主页
  • 【大模型:知识图谱】--7.Neo4j数据库的导入和导出
  • 数据结构与算法(栈)
  • Coze源码分析-资源库-创建数据库-后端源码-基础设施/数据存储层
  • PySpark 安装教程及 WordCount 实战与任务提交
  • 制作网站的公司八大建筑央企排名
  • zynq纯PL读取XADC