2. 云原生网关架构基础:Envoy与Kong的架构对比、数据面与控制面分离原理

2.1 数据面与控制面分离:云原生网关的核心设计范式

在传统单体网关(如 Nginx、HAProxy)中,路由规则、证书、限流策略等配置通常通过静态文件或 API 热加载写入同一进程。这种“配置与转发耦合”的模式在微服务规模扩张后暴露出明显的运维瓶颈:配置变更需要逐台操作、灰度回滚困难、配置错误可能导致全局故障。

云原生网关将架构拆分为两个独立的平面:

  • 控制面(Control Plane):负责配置管理、策略下发、证书签发、健康检查与观测数据聚合。它不参与实际请求转发,通常以中心化服务或 Operator 的形式运行。
  • 数据面(Data Plane):负责实际的流量转发、负载均衡、TLS 终止、限流熔断。它保持轻量、无状态,仅从控制面拉取最新的配置快照。
升级窗口意义: 数据面与控制面分离后,升级数据面实例时只需重启代理进程,控制面继续提供服务发现与配置推送,不会因升级导致整个网关集群的配置管理中断。这是实现“零信任升级窗口”的架构前提。
数据面与控制面分离架构 控制面(Control Plane) 配置中心 / xDS Server 证书管理 / CA 观测聚合 / Metrics 配置推送(gRPC / xDS) 数据面(Data Plane) Envoy / Kong 代理实例 TLS 终止 / 路由转发 限流 / 熔断 / 负载均衡 拉取配置(xDS / REST) xDS 推送 证书分发 Metrics 上报

2.2 Envoy 与 Kong 架构对比

Envoy 和 Kong 是目前最主流的云原生网关数据面实现,两者均遵循数据面与控制面分离原则,但在架构设计、扩展方式和生态集成上存在显著差异。以下从核心维度进行对比:

对比维度 Envoy Kong
核心语言 C++(高性能、低延迟) Lua + OpenResty(Nginx 模块)
配置协议 xDS(gRPC 流式推送,Istio/Consul 原生支持) REST / Admin API + DB(PostgreSQL / Cassandra)
扩展机制 Lua / Wasm / C++ Filter(热插拔,沙箱隔离) Lua 插件(通过 Kong Plugin Hub 分发)
控制面依赖 需配合 Istiod / Consul / 自建 xDS Server 内置控制面(Kong Manager / Kong Ingress Controller)
TLS 管理 SDS(Secret Discovery Service)动态下发证书 Admin API 上传证书 + SNI 匹配
观测能力 原生结构化日志 + 分布式追踪(Zipkin/Jaeger) 通过插件实现日志/指标/追踪
社区生态 CNCF 毕业项目,Istio 默认数据面 Kong Inc. 主导,企业版功能丰富
升级窗口影响: Envoy 的 xDS 流式推送使得数据面实例重启后能立即从控制面获取最新配置,适合频繁升级的场景;Kong 依赖数据库存储配置,升级时需确保 DB 迁移兼容,否则可能导致配置丢失或回滚困难。

2.3 Envoy 架构深度解析

Envoy 的架构围绕 Listener、Cluster、Filter Chain 三个核心概念构建:

  • Listener:监听端口,接收入站流量。每个 Listener 可绑定多个 Filter Chain。
  • Filter Chain:一组有序的过滤器(如 TLS 终止、HTTP 解析、限流、路由),请求依次经过每个 Filter。
  • Cluster:上游服务集群定义,包含端点发现、负载均衡策略、健康检查配置。

Envoy 通过 xDS API 从控制面动态获取配置,主要包含以下子协议:

xDS 子协议 全称 推送内容
LDS Listener Discovery Service 监听器配置(端口、Filter Chain)
RDS Route Discovery Service 路由规则(域名、路径、Header 匹配)
CDS Cluster Discovery Service 上游集群定义(端点、负载均衡策略)
EDS Endpoint Discovery Service 集群端点列表(IP:Port、权重、健康状态)
SDS Secret Discovery Service TLS 证书、私钥、CA 证书
升级窗口关键点: SDS 使得证书轮换无需重启数据面实例。在升级窗口演练中,TLS 准入核验应优先验证 SDS 推送的证书是否在升级后仍然有效,避免因证书过期导致服务中断。
Envoy 内部 Filter Chain 与 xDS 交互流程 控制面(xDS Server) LDS / RDS / CDS EDS / SDS gRPC 流式推送 xDS 订阅 Envoy 数据面实例 Listener(端口 443) Filter Chain TLS 终止(SDS) HTTP 解析 限流 / 熔断 路由(RDS) Cluster EDS 端点 负载均衡 健康检查

2.4 Kong 架构深度解析

Kong 基于 OpenResty(Nginx + LuaJIT)构建,其架构核心组件包括:

  • Kong Proxy:数据面,处理所有客户端请求,执行路由、认证、限流等插件逻辑。
  • Kong Admin API:控制面入口,提供 RESTful 接口管理路由、服务、上游、证书、插件等配置。
  • 数据库(PostgreSQL / Cassandra):持久化所有配置,Kong Proxy 启动时从 DB 加载配置到共享内存。
  • Kong Ingress Controller:Kubernetes 集成组件,将 Ingress/CRD 资源同步到 Kong Admin API。
升级窗口差异: Kong 的数据面实例重启后需要从数据库重新加载全部配置,如果数据库连接池或迁移脚本存在问题,可能导致启动延迟或配置不一致。Envoy 的 xDS 流式推送则避免了这种“全量加载”的启动风险。

2.5 数据面与控制面分离的升级窗口优势

在升级窗口演练中,数据面与控制面分离带来的具体收益包括:

  1. 独立升级:数据面实例可以逐个滚动升级,控制面持续提供服务发现与配置推送,不会因升级导致全局配置不可用。
  2. 配置一致性:控制面通过版本号或资源版本(如 Istio 的 ResourceVersion)确保数据面实例始终使用最新配置,升级后自动同步。
  3. 证书热更新:SDS 或 Admin API 支持证书动态下发,升级窗口内无需手动挂载证书文件,降低 TLS 中断风险。
  4. 观测不中断:数据面升级期间,Metrics 和日志仍可通过 sidecar 或 agent 上报到控制面,延迟火焰图采集不受影响。
演练建议: 在升级窗口演练中,优先验证控制面推送配置的延迟(xDS 延迟应 < 5s),以及数据面重启后首次拉取配置的成功率。这是延迟火焰图设计和 TLS 准入核验的基础数据。