Envoy Gateway 系统架构设计深度解析
前言
在现代云原生架构中,API 网关扮演着至关重要的角色。Envoy Gateway 作为一个基于 Envoy 代理的网关解决方案,其系统设计值得深入探讨。本文将全面剖析 Envoy Gateway 的系统架构设计,帮助读者理解其核心组件和工作原理。
核心设计目标
Envoy Gateway 的系统设计围绕以下几个核心目标展开:
- 模块化设计:各组件职责明确,边界清晰
- 可扩展性:支持未来功能扩展和定制
- 声明式配置:采用 Kubernetes 原生方式管理配置
- 高效协调:通过协调循环实现期望状态与实际状态一致
核心概念解析
在深入架构前,我们需要明确几个关键术语:
- 控制平面(Control Plane):由 Envoy Gateway 实现,负责管理数据平面的一系列服务组件
- 数据平面(Data Plane):由 Envoy 代理实例组成,提供智能应用层流量路由功能
- 中间表示(Intermediate Representation, IR):系统内部使用的统一数据模型,解耦外部资源与内部实现
整体架构概览
Envoy Gateway 采用分层架构设计,主要分为以下几个层次:
- 配置层:处理静态和动态配置
- 转换层:将外部资源转换为内部表示
- 管理层:管理数据平面基础设施
- 服务层:提供 xDS 配置服务
配置管理详解
静态配置
静态配置在 Envoy Gateway 启动时加载,主要包括:
- GatewayClass 控制器名称
- 提供者(Provider)配置
- 其他系统级参数
目前仅支持通过配置文件进行静态配置,若不提供则使用默认参数。
动态配置
动态配置采用声明式模型,通过 Kubernetes 资源定义数据平面的期望状态,主要包括两类配置:
-
基础设施管理:
- 通过 GatewayClass 和 Gateway 资源管理
- 可引用 EnvoyProxy 自定义资源调整默认参数
- 控制代理实例的部署、升级等生命周期
-
流量路由:
- 通过 HTTPRoute 和 TLSRoute 资源定义
- 支持请求匹配、过滤和路由规则
- 目前仅支持 Service 类型的后端引用
核心组件深度解析
提供者(Provider)
提供者是 Envoy Gateway 与基础设施交互的抽象层,当前实现包括:
Kubernetes 提供者:
- 使用 Kubernetes 控制器协调资源
- 通过 Kubernetes API 管理数据平面
- 依赖 Kubernetes 进行服务发现
- 使用 etcd 持久化数据
文件提供者(规划中):
- 通过文件监听获取配置
- 直接调用内部 API 管理数据平面
- 使用主机 DNS 进行服务发现
- 使用本地文件系统持久化数据
资源监视器(Resource Watcher)
- 负责监视动态配置资源
- 实现方式与提供者相关
- 为资源转换器提供输入
资源转换器(Resource Translator)
- 将外部资源转换为中间表示(IR)
- 产生两种 IR:
- 基础设施 IR:描述数据平面基础设施
- xDS IR:描述数据平面配置
xDS 转换器(xDS Translator)
- 将 xDS IR 转换为 xDS 资源
- 为 xDS 服务器提供输入
xDS 服务器(xDS Server)
- 基于 Go Control Plane 实现
- 支持 Delta xDS 服务器协议
- 负责通过 xDS 配置数据平面
基础设施管理器(Infra Manager)
- 管理数据平面基础设施
- 处理 Envoy 代理的部署和服务
- 管理辅助控制平面(如全局速率限制服务)
关键设计决策
-
GatewayClass 处理:
- 通过 controllerName 匹配 GatewayClass
- 支持通过 EnvoyProxy CR 自定义代理配置
- 遵循 Gateway API 冲突解决规范
-
Gateway 处理:
- 管理引用其 GatewayClass 的 Gateway
- 按端口分组监听器并合并兼容的监听器
- 不跨 Gateway 合并监听器
-
HTTPRoute 处理:
- 对应 Envoy 路由配置
- 每个 backendRef 对应一个 Envoy 集群
-
扩展性设计:
- 各组件设计考虑未来扩展
- 支持通过自定义过滤器添加功能
典型工作流程
- 用户通过 Kubernetes API 创建 Gateway 和 Route 资源
- 资源监视器检测到资源变更
- 资源转换器将资源转换为 IR
- xDS 转换器将 IR 转换为 xDS 资源
- xDS 服务器将配置推送到 Envoy 代理
- 基础设施管理器确保代理基础设施就绪
总结
Envoy Gateway 的系统设计体现了现代云原生网关的典型架构特点:声明式配置、明确的责任分离、强大的扩展能力。通过中间表示(IR)的解耦设计,系统保持了良好的灵活性和可维护性。随着项目的发展,我们可以预期更多功能的加入和现有功能的增强,但核心架构理念将保持稳定。
对于希望深入了解或使用 Envoy Gateway 的开发者,理解这套系统设计将有助于更好地掌握其工作原理和扩展方式。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考