架构
API7 企业版是一套 API 管理组件,包含作为流量处理层的 API7 网关(API7 Gateway)。API7 网关采用解耦架构,将管理逻辑(控制面 )与请求处理逻辑(数据面)分离。这种设计可确保高可用性、安全隔离以及独立扩展能力。
解耦架构
控制面与数据面通过安全通道通信,因此可以将两者部署在不同的环境或地域中。
控制面(CP)
控制面是 API7 网关的管理中枢。这是一项基于 Go 的服务,提供以下组件:
- Dashboard 和 Admin API:提供基于 Web 的界面和 RESTful API,用于管理所有网关配置。默认端口为
7443(HTTPS)。 - PostgreSQL 数据库:存储所有持久化配置,包括服务、路由、消费者和审计日志。PostgreSQL 是主要且推荐的存储后端;控制面也支持 MySQL 和 Microsoft SQL Server 作为替代后端,详情请参阅支持的版本和互操作性。
- DP Manager:在
7943端口上通过 mTLS 暴露兼容 etcd v3 的 API,供数据面节点连接。DP Manager 内部通过嵌入式 kine shim,使用控制面数据库作为后端来提供此 API,因此数据面节点可以使用标准 Apache APISIX etcd 客户端监听配置,而不需要实际的 etcd 集群。
数据面(DP)
数据面是处理传入 API 请求的高性能代理引擎,基于 OpenResty 和 Lua 构建。
核心组件
- 代理引擎:处理 HTTP、HTTPS、gRPC 和 TCP/UDP 流量。默认端口为
9080(HTTP)和9443(HTTPS)。 - 无状态运行:数据面节点是无状态的。它们从控制面接收配置,并将配置存储在内存中以实现快速访问。
- EE Agent:专用组件(
agent/hook.lua),负责与控制面通信、管理服务发现数据的共享字典,以及合并配置更新。
健康检查与可观测性
- 健康检查端点:每个数据面节点在
7085端口提供/status(存活状态)和/status/ready(就绪状态)端点。 - Prometheus 指标:指标在
9091端口的/apisix/prometheus/metrics路径暴露。
控制面与数据面通信
API7 网关使用与开源 Apache APISIX 相同的 拉取/监听模型同步配置。每个数据面节点运行标准 APISIX etcd 客户端,通过 mTLS 连接到 7943 端口上的 DP Manager。连接建立后,数据面会监听兼容 etcd 的键空 间获取配置变更,并在变更到达后立即应用到内存缓存中。
与上游 APISIX 的唯一差异在于存储后端:DP Manager 不使用实际的 etcd 集群,而是使用 kine 将 etcd v3 API 转换为 PostgreSQL 的读写操作。从数据面的角度看,DP Manager 的行为与 etcd 集群完全一致。
安全通信
每个数据面节点与 DP Manager 之间的连接均通过双向 TLS(mTLS)保护。数据面会提供由 API7 内部 CA 签发的客户端证书;DP Manager 会在提供任何配置数据之前验证客户端证书,同时数据面也会验证 DP Manager 的服务器证书。这可以确保只有经过授权的数据面能够读取配置,并且只有经过授权的控制面能够提供配置。
容错
由于数据面会在内存中保存最新配置(也可以选择保存到磁盘),即使控制面无法访问,数据面仍能继续处理流量。只有创建路由、添加消费者或轮换证书等管理任务会被阻塞,直到控制面恢复。为了增强弹性,你还可以配置回退配置提供方,让数据面在控制面长时间中断期间继续运行。
开源版与企业版对比
| 特性 | 开源 Apache APISIX | API7 企业版 |
|---|---|---|
| 主要存储 | 独立的 etcd 集群 | PostgreSQL(通过 kine etcd shim) |
| 向数据面暴露的配置 API | 原生 etcd v3 | 兼容 etcd v3(由 PostgreSQL 提供后端支持) |
| 配置同步模型 | 拉取/监听 | 拉取/监听(语义一致) |
| 控制面与数据面传输 | 通过 gRPC 或 HTTP 传输的普通 etcd 客户端 | 7943 端口上的 mTLS |
| 管理界面 | Admin API | Dashboard + Admin API + ADC |
| 扩展方式 | 独立扩展 etcd 集群和数据面 | 独立扩展 PostgreSQL、控制面和数据面 |
后续步骤
- 在 Kubernetes 上部署:在 Kubernetes 集群中部署网关。
- 配置控制面:调整控制面设置以适应你的环境。
- 配置数据面:自定义数据面代理行为。