1. 服务网格与Envoy概述

1.1 服务网格架构演进

服务网格(Service Mesh)是云原生时代处理服务间通信的基础设施层。其架构演进经历了从“硬编码通信”到“透明代理”的四个关键阶段:

阶段 架构特征 典型问题
单体应用 所有模块在同一个进程中通过函数调用通信 耦合度高,无法独立扩缩容
微服务 + 客户端库 服务通过 SDK(如 Finagle、Hystrix)实现服务发现、熔断、重试 语言绑定、版本冲突、升级成本高
第一代 Sidecar 每个服务实例旁挂一个代理(如 Linkerd v1、Nginx),接管进出流量 控制面与数据面耦合,配置管理复杂
第二代 Sidecar + 控制面 数据面(Envoy)与控制面(Istiod)分离,通过 xDS 协议动态下发配置 ——当前主流架构
关键认知: 服务网格的本质是将“通信逻辑”从业务代码中剥离,下沉为独立的基础设施层。Envoy 作为数据面代理,承担了所有流量拦截、转发、观测和策略执行工作。

1.2 Envoy 作为数据平面的核心角色

Envoy 是一个高性能、可编程的 L7 代理,由 Lyft 于 2016 年开源,现为 CNCF 毕业项目。在服务网格中,Envoy 承担以下核心职责:

  • 流量拦截与转发: 通过 iptables 或 eBPF 透明劫持 Pod 内所有入站/出站流量,基于动态路由规则转发到目标服务。
  • 协议解析与治理: 原生支持 HTTP/1.1、HTTP/2、gRPC、TCP、MongoDB 等协议,可执行请求头修改、重定向、限速、熔断等策略。
  • 可观测性数据采集: 自动生成访问日志、分布式追踪(Trace)、Prometheus 指标(Metrics),为延迟水位和异常事件分析提供原始数据。
  • TLS 终止与 mTLS: 在 Sidecar 层面完成证书交换和双向认证,业务容器无需感知加密逻辑。
  • 负载均衡与健康检查: 支持加权轮询、最少请求、一致性哈希等算法,结合主动/被动健康检查剔除异常端点。
Envoy 的独特优势: 其 xDS 动态配置机制(LDS、RDS、CDS、EDS)使得路由、监听器、集群、端点可以在不重启代理的情况下实时更新,这是 Istio 控制面与 Envoy 交互的核心协议。
服务网格架构演进:从单体到 Sidecar 模式 单体应用 进程内函数调用 微服务 + SDK Finagle / Hystrix 第一代 Sidecar Linkerd v1 / Nginx 第二代 Sidecar Envoy + Istiod 演进驱动力 • 解耦:将通信逻辑从业务代码中剥离,降低 SDK 升级带来的版本冲突 • 统一:多语言、多协议环境下,使用同一套代理层实现流量管理和安全策略 • 动态:xDS 协议使路由、负载均衡、TLS 配置可实时下发,无需重启

1.3 Sidecar 代理模式

Sidecar 模式是服务网格的核心部署形态:在每个业务 Pod 中,额外运行一个 Envoy 容器作为“边车”,与主业务容器共享网络命名空间。其工作原理如下:

  1. 流量劫持: Pod 启动时,Init 容器配置 iptables 规则,将所有进出流量重定向到 Envoy 的 15001(出站)和 15006(入站)端口。
  2. 透明代理: 业务容器完全感知不到 Envoy 的存在,所有 HTTP/gRPC 请求被 Envoy 拦截后,根据动态路由规则转发到目标服务。
  3. 双向观测: Envoy 在请求经过时记录延迟、状态码、请求大小等指标,并生成分布式追踪 Span,上报到 Prometheus 和 Jaeger/Zipkin。
  4. 策略执行: 熔断、重试、超时、限速、流量镜像等策略在 Envoy 层执行,业务代码无需任何改动。
常见误区: Sidecar 模式并非“零成本”。每个 Envoy 代理会额外消耗约 20-50MB 内存和 1-5% CPU(取决于流量规模),在资源规划时需预留这部分开销。同时,iptables 劫持规则在 Kubernetes 1.26+ 后推荐迁移至 eBPF 模式以降低延迟抖动。
Sidecar 代理模式:Pod 内流量路径 Pod A(服务消费者) 业务容器 App A Envoy Sidecar 出站代理 iptables 规则: 出站流量 → 15001 端口 mTLS Pod B(服务提供者) Envoy Sidecar 入站代理 业务容器 App B iptables 规则: 入站流量 → 15006 端口 可观测性数据采集点 访问日志 → 延迟/状态码 | 分布式追踪 → Trace Span | Prometheus 指标 → 请求速率/错误率

1.4 Envoy 在可观测性中的关键价值

作为服务网格的数据面,Envoy 天然处于所有服务间流量的“必经之路”,这使得它成为构建流量拓扑、延迟水位和异常事件观测系统的理想数据源:

  • 流量拓扑自动发现: Envoy 通过 CDS/EDS 获取集群和端点信息,结合访问日志中的 source/destination 字段,可自动绘制服务依赖关系图。
  • 延迟水位实时监控: Envoy 内置的 upstream_rq_time 直方图指标按百分位(P50/P90/P99)统计上游请求延迟,配合 Istio 的 Telemetry v2 可生成服务级别的延迟热力图。
  • 异常事件关联分析: 当 Envoy 返回 5xx、连接超时、熔断打开等事件时,其访问日志和指标可精确关联到故障端点、路由规则和 TLS 握手状态,大幅缩短排障 MTTR。
课程预告: 后续章节将深入讲解如何通过 Envoy 的访问日志配置、Prometheus 指标暴露、分布式追踪集成,以及 Kiali/Grafana 等可视化工具,构建完整的服务网格可观测性体系。本章作为基础,为后续的延迟水位分析和异常事件检测奠定架构认知。