2. Kong 网关基础回顾:Kong 架构、核心组件与插件系统
在深入回滚护栏与 CI/CD 绑定之前,必须重新夯实 Kong 网关的核心运行机制。Kong 并非简单的反向代理,而是一个基于 Nginx 与 OpenResty 构建的、具备高度可扩展性的 API 网关平台。理解其架构分层与组件职责,是后续设计无损回滚策略的前提。
2.1 整体架构:控制面与数据面分离
Kong 采用典型的 控制面(Control Plane) 与 数据面(Data Plane) 分离架构。控制面负责配置管理与 API 下发,数据面负责处理实际的客户端请求流量。这种分离使得配置变更与流量转发解耦,为灰度发布和回滚提供了架构基础。
架构要点: 数据面节点可以水平扩展,控制面故障不影响已加载的路由规则,但无法下发新配置。
2.2 核心组件详解
Kong 由三个核心组件构成,每个组件在回滚流程中扮演不同角色:
| 组件 | 默认端口 | 核心职责 | 回滚关注点 |
|---|---|---|---|
| Admin API | 8001 (HTTP) / 8444 (HTTPS) | RESTful 配置接口,管理 Service、Route、Upstream、Plugin 等资源 | 回滚时通过 API 批量恢复历史配置快照;支持声明式导入 |
| Proxy | 8000 (HTTP) / 8443 (HTTPS) | 接收客户端请求,匹配 Route,执行插件链,转发至 Upstream | 回滚期间保持旧配置缓存,避免流量中断;支持优雅 reload |
| DB / 存储层 | — | 持久化配置(传统模式)或声明式文件(DB-less 模式) | 回滚本质是 DB 配置的版本切换;DB-less 模式回滚更原子化 |
实战提示: 在 CI/CD 流水线中,回滚操作通常通过 Admin API 的
/config 端点(声明式)或逐个资源 PUT/PATCH 实现。DB-less 模式因其配置文件的版本可控性,在回滚场景中更受 DevOps 团队青睐。
2.3 插件系统概述
插件是 Kong 的核心扩展机制,以 Lua 脚本 形式在请求生命周期的不同阶段(access、header_filter、body_filter、log)执行。插件系统直接影响回滚策略的设计:
- 全局插件 vs 服务/路由级插件: 全局插件作用于所有请求,回滚时必须谨慎;服务/路由级插件可独立回滚。
- 插件配置版本: 插件参数(如限流速率、认证密钥)存储在 DB 中,回滚时需一并恢复。
- 自定义插件: 企业级场景常开发自定义插件(如签名校验、协议转换),其代码版本需与网关配置版本对齐。
2.4 关键概念速查表
以下概念在后续回滚章节中会反复出现,建议熟记:
| 概念 | 说明 | 回滚关联 |
|---|---|---|
| Service | 上游服务的抽象,包含 host、port、protocol | 回滚 Service 配置可快速切换后端版本 |
| Route | 匹配客户端请求的规则(路径、方法、Host) | 回滚 Route 可改变流量分发策略 |
| Upstream | 负载均衡目标组,包含健康检查与权重 | 回滚权重可实现金丝雀发布回退 |
| Target | Upstream 下的具体后端实例 | 回滚时摘除异常 Target |
| Plugin | 可插拔的功能模块(认证、限流、日志等) | 回滚插件配置需注意版本兼容性 |
| Certificate / SNI | TLS 证书与域名绑定 | 回滚证书错误会导致 TLS 握手失败 |
回滚陷阱: 直接回滚 Route 或 Service 时,如果关联的 Plugin 配置未同步回滚,可能导致插件参数与路由规则不匹配(例如限流阈值突然变为 0)。建议在 CI/CD 流水线中将资源组(Service + Route + Plugin)作为原子单元进行版本管理。