API 网关专栏 · 第 61 章

Apache APISIX 与 Kong 对比:迁移、运维与团队适配

2026年09月11日
Apache APISIX 与 Kong 对比:迁移、运维与团队适配

Apache APISIX 和 Kong 都是围绕 NGINX/OpenResty 构建的可扩展网关,但技术基础相近,并不代表两者在运维上可以直接互换。真正有价值的问题不是“谁的功能清单更长”,而是谁的配置模型、控制面拓扑、扩展方式、升级流程和商业版本边界更适合实际运维团队。

可以分两步做决策:先排除无法满足协议、策略、部署或支持硬性要求的选项,再对剩余候选开展贴近生产的概念验证。厂商跑分或空代理测试都不应成为最终结论。

核心要点

  • 比较准确的版本和版本形态;开源版、企业版和托管服务并不具备完全相同的功能。
  • 在比较界面体验前,先确定配置的唯一事实来源。
  • 盘点插件行为和状态存储方式,而不只是插件名称。
  • 在迁移流量前演练升级、回滚和控制面故障。
  • 把性能作为可测量维度之一,同时评估正确性、运维、安全与恢复。

比较运维模型

维度Apache APISIXKong Gateway决策问题
运行时基础NGINX、ngx_lua 与 LuaJITNGINX/OpenResty 与 Lua团队是否已经具备该技术栈的运维和扩展能力?
配置拓扑传统、控制面与数据面分离、Standalone传统数据库、Hybrid、DB-less 声明式以及托管 Konnect哪个系统持有期望状态并负责分发?
常见外部状态传统或分离模式使用 etcd;Standalone 不使用 etcd传统或控制面模式常用 PostgreSQL;DB-less 数据面不使用数据库团队能否运维所选依赖并可靠备份?
声明式流程Standalone YAML/JSON 或控制器驱动声明式配置;兼容控制面可使用 decK如何比较、审批、提升和回滚变更?
扩展Lua 插件、外部 Plugin Runner 与实验性 Wasm 运行时Lua 和产品支持的插件生态;自定义能力取决于拓扑与版本所需插件是否受支持并与生命周期兼容?

APISIX 架构文档说明了核心、Lua 插件、多语言 Plugin Runner 和 Wasm 运行时。部署模式文档区分传统模式、控制面与数据面分离模式以及 Standalone。Standalone 模式把 etcd 移出配置路径,但也改变了完整配置的交付方式。

Kong 的部署拓扑文档区分传统数据库、Hybrid、DB-less 声明式和由 Konnect 管理控制面的模式。DB-less 模式下,每个网关把配置加载到内存;Admin API 对实体增删改为只读,依赖数据库的插件行为也可能受限。这些是工作流选择,而不只是安装参数。

从硬性要求开始

为待评估的准确版本和版本形态建立证据表:

  • HTTP、gRPC、WebSocket 和四层流量要求;
  • 身份认证与授权集成;
  • 限流精度与共享状态需求;
  • 服务发现与 Kubernetes Gateway API 的归属;
  • 日志、追踪、指标和审计要求;
  • 自定义插件语言、隔离方式、依赖与支持模型;
  • FIPS、合规、商业支持或托管控制面要求;
  • 离线、隔离网络、多区域和数据驻留要求。

插件名称相同并不足以证明能力相同。必须比较 Schema、执行阶段、故障行为、存储方式、响应契约、可观测性和版本归属。如果某项能力在一侧属于商业版本、另一侧属于开源版本,应明确记录这一边界,而不是暗示两者完全一致。

选择配置的唯一事实来源

配置归属决定日常变更是否安全。

APISIX 使用 etcd 时,应保护 Admin API、限制网络暴露、轮换密钥,并定义 etcd 备份与恢复方案。Standalone 文件模式下,应验证并原子发布完整配置,同时确保格式错误或内容不完整的产物不会成为期望状态。

Kong 使用传统或 Hybrid 模式时,应定义 PostgreSQL 备份、控制面可用性与控制面/数据面兼容性。DB-less 模式会以完整声明式配置替换当前状态,因此工作流必须能够发现意外删除。官方 deck gateway 文档为传统、Hybrid 与 Konnect 实例提供 validate、diff、dump、apply 和 sync 操作,但也明确说明这些实时网关命令不管理 DB-less 网关。

无论选择哪种产品,都应回答同一组问题:

  1. 期望状态在哪里审查?
  2. 哪个工具负责检测漂移?
  3. 一次变更是增量更新,还是完整替换?
  4. 密钥材料如何与普通配置分离?
  5. 能否在不临时设计方案的情况下恢复上一个已知正常状态?
  6. 控制面或状态存储不可用时,哪些流量仍可继续处理?

把扩展当作生产代码比较

自定义插件位于请求处理路径中。盘点每个现有 Kong 插件,并把它映射到 APISIX 等效插件、应用行为、外部策略服务或明确删除项。从 APISIX 迁移到 Kong 时也应采用相同方法。

每个插件都应记录:

字段迁移证据
触发条件与阶段相对于认证、改写、路由和日志的执行时机
配置必填字段、默认值、验证规则与密钥引用
状态本地内存、共享数据库、外部存储或无状态
故障契约状态码、重试、降级、超时和返回请求头
可观测性指标、日志、Trace 属性与原因码
兼容性网关版本、拓扑、版本形态和运行时依赖

测试应围绕行为重写,而不是只比较配置结构。转换后的 YAML 只是迁移输入,不能证明策略执行等价。

把迁移设计成可逆实验

  1. 盘点路由、服务、上游、Consumer、证书、插件与外部依赖。
  2. 分类硬性要求、可选行为、失效配置和特定版本能力。
  3. 转换一个小而有代表性的范围,其中包含一种认证流程、一项有状态策略和一个容易失败的上游。
  4. 验证Schema,并使用固定版本启动候选网关。
  5. 回放经过脱敏且贴近生产的流量,比较状态码、请求头、路由、策略决策、日志与 Trace。
  6. 压测等价拓扑,使用公开方法而不是直接引用厂商数字。
  7. 影子或灰度流量,但不要让两个网关同时修改同一个下游操作。
  8. 切换流量,同时设置回滚阈值、负责人并保留源配置。
  9. 观测错误率、尾延迟、拒绝结果、上游分布、资源使用和配置收敛。

不要一开始迁移所有路由。代表性范围应尽早暴露最困难的状态、安全与扩展差异。

评估升级与故障恢复

在概念验证中至少执行一次升级和一次回滚。两种网关都需要固定数据面、控制面、插件、声明式 Schema 和编排资源之间的兼容关系,并测试以下故障:

  • 配置存储或控制面不可用;
  • 发布了无效配置;
  • 新旧数据面版本同时运行;
  • 自定义插件加载失败;
  • 证书或密钥刷新失败;
  • 节点使用最后已知配置重启;
  • 状态或 Schema 迁移后执行回滚。

Kong 的拓扑选择会改变升级顺序和数据库工作;APISIX 的 etcd、分离与 Standalone 模式会改变依赖和配置恢复路径。应比较真正计划运行的拓扑,而不是两套默认的本地安装。

做出有条件的选择

如果团队重视动态 etcd 模型、Standalone 选项、APISIX 插件集或其特定集成生态,APISIX 可能更合适。如果团队已经采用声明式/decK 流程、PostgreSQL 或 Hybrid 拓扑、Kong 插件组合或 Konnect 服务,Kong 可能更合适。如果硬性能力只存在于另一版本、团队无法维护所需依赖,或自定义行为占迁移主体,两者都可能不是合适选择。

只有所有硬性要求通过后,才使用加权评分。建议维度包括正确性、策略覆盖、变更安全、恢复、可观测性、扩展维护、代表性策略下的延迟、基础设施成本、许可与支持。

决策检查清单

  • 是否注明准确版本、版本形态与拓扑?
  • 是否验证了期望状态与漂移管理流程?
  • 所有必要插件是否都有行为测试?
  • 是否演练过备份、升级、回滚和控制面故障?
  • 跑分是否采用等价拓扑且可复现?
  • Kubernetes、多区域和数据驻留边界是否清楚?
  • 在生产证据充分之前,迁移是否保持可逆?

总结

APISIX 与 Kong 的选择,本质上是一个被包装成功能对比的运维模型决策。先明确硬性要求,再比较等价的拓扑和版本形态,测试插件语义并演练恢复。真正更合适的网关,是团队能够证明其行为并安全运维的产品,而不是功能清单看起来更长的产品。

常见问题

APISIX 是否始终比 Kong 更快?

不存在跨版本、硬件、拓扑、协议、插件、TLS 设置和负载形态都成立的通用结论。应针对计划部署的环境开展受控测试。

声明式配置能否直接让网关具备 GitOps 能力?

它能提供帮助,但只把配置放进 Git 并不是完整交付系统。仍需要验证、密钥管理、差异审查、环境提升、漂移检测、可观测性和回滚。

迁移工具能否代替迁移测试?

不能。配置转换可以加快资产迁移,但只有行为与故障测试才能证明策略等价。

后续步骤

使用可复现的 Traefik、Kong 与 APISIX 跑分方法,了解 API 网关插件设计,并通过金丝雀流量规划可逆发布。

获取方案