架构
API7 企业版是一套 API 管理组件,包含作为流量处理层的 API7 网关 。API7 网关采用解耦架构,将管理逻辑(控制面)与请求处理逻辑(数据面)分离。这种设计可确保高可用性、安全隔离以及独立扩展能力。
解耦架构
控制台生成的数据面部署通过 mTLS 连接控制面的 7943 端口。为保持兼容,DP Manager 也在 7900 端口接受未经传输加密的 HTTP 连接,因此应将该通道限制在可信网络中。解耦架构允许控制面和数据面运行在不同环境或地域。
控制面(CP)
控制面是 API7 网关的管理中枢。这是一项基于 Go 的服务,提供以下组件:
- 控制台和 Admin API:提供基于 Web 的界面和 RESTful API,用于管理所有网关配置。默认端口为
7443(HTTPS)。 - PostgreSQL 数据库:存储所有持久化配置,包括服务、路由、消费者和审计日志。PostgreSQL 是主要且推荐的存储后端;控制面也支持 MySQL 和 Microsoft SQL Server 作为替代后端,详情请参阅支持的版本和互操作性。
- DP Manager:在
7943端口上通过 mTLS 暴露兼容 etcd v3 的 API。为保持兼容,也在7900端口接受 HTTP 连接,并使用实例 Token 认证。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),负责与控制面通信、管理服务发现数据的共享字典,以及合并配置更新。
健康检查与可观测性
- 健康检查端点:启用状态监听后,每个数据面节点才会在配置的地址和端口提供
/status(存活)和/status/ready(就绪)端点。网关 Helm Chart 通过api7ee.status_endpoint.enabled启用此监听,api7ee.status_endpoint.port用于选择端口,默认值为7085。状态监听默 认禁用。 - Prometheus 指标:指标在
9091端口的/apisix/prometheus/metrics路径暴露。
控制面与数据面通信
API7 网关使用与开源 Apache APISIX 相同的拉取/监听模型同步配置。每个数据面节点运行标准 APISIX etcd 客户端,主动连接 DP Manager。控制台生成的部署通过 mTLS 使用 7943 端口。DP Manager 也在 7900 端口接受使用实例 Token 认证的 HTTP 连接,但这些连接未经加密。连接建立后,数据面会监听兼容 etcd 的键空间获取配置变更,并在变更到达后立即应用到内存缓存中。
与上游 APISIX 的唯一差异在于存储后端:DP Manager 不使用实际的 etcd 集群,而是使用 kine 将 etcd v3 API 转换为 PostgreSQL 的读写操作。从数据面的角度看,DP Manager 的行为与 etcd 集群完全一致。
安全通信
在 7943 端口上,数据面提供由 API7 内部 CA 签发的客户端证书。DP Manager 在提供配置数据前验证该证书,数据面则使用配置的 CA 验证服务器证书。生产部署应使用此 mTLS 监听。通过防火墙规则或网络策略限制对 HTTP 端口 7900 的访问,切勿将其暴露到公网。
容错
控制面不可访问时,正在运行的网关节点可以继续使用最后已知的配置处理流量。配置更新和发布路由等管理操作会暂停,直到连接恢复。如果请求需要通过控制面查找消费者或开发者,而相应结果尚未缓存,该请求仍可能失败。备用存储可让网关在中断期间必须重启时,从保存的快照启动。
开源版与企业版对比
| 特性 | 开源 Apache APISIX | API7 企业版 |
|---|---|---|
| 主要存储 | 独立的 etcd 集群 | PostgreSQL(通过 kine etcd shim) |
| 向数据面暴露的配置 API | 原生 etcd v3 | 兼容 etcd v3(由 PostgreSQL 提供后端支持) |
| 配置同步模型 | 拉取/监听 | 拉取/监听(语义一致) |
| 控制面与数据面传输 | 通过 gRPC 或 HTTP 传输的普通 etcd 客户端 | 控制台生成的部署在 7943 端口使用 mTLS。7900 端口接受使用实例 Token 认证的 HTTP 连接,应限制在可信网络中 |
| 管理界面 | Admin API | 控制台 + Admin API + ADC |
| 扩展方式 | 独立扩展 etcd 集群和数据面 | 独立扩展 PostgreSQL、控制面和数据面 |
后续步骤
- 在 Kubernetes 上部署 API7 企业版:在 Kubernetes 集群中部署网关。
- 配置控制面:调整控制面设置以适应你的环境。
- 配置数据面:自定义数据面代理行为。