Kong 是一个流行的开源 API 网关,它基于 Nginx 和 OpenResty,具有高性能和可扩展性,它位于客户端和后端服务之间,负责处理所有 API 流量,并提供路由、认证、限流、日志、监控等功能。

以下是 Kong 如何作为 API 网关工作的核心概念和流程:
核心架构与工作流程
客户端 (Client)
↓
Kong API 网关 (Kong Gateway)
↓ (根据路由规则)
上游服务 (Upstream Service)
核心组件
- Service(服务):代表后端的 API 或微服务(如用户服务、订单服务)
- Route(路由):定义进入请求的匹配规则(如路径
/users/*、方法GET、Host 头等) - Upstream(上游):后端服务的真实地址(如
http://user-service:8080)及负载均衡配置 - Target(目标):Upstream 中的具体节点(如
service-1:8080、service-2:8080) - Plugin(插件):为请求/响应链添加的功能(认证、限流、日志、转换等)
- Consumer(消费者):API 的使用者/客户端,用于认证和访问控制
工作流程
请求到达 → 匹配 Route → 执行 Plugin 链 → 转发到 Service/Upstream → 响应返回 → 执行后处理 Plugin
详细步骤:
- 接收请求:客户端发送 HTTP 请求到 Kong 的监听端口(默认 8000/8443)
- 路由匹配:Kong 根据配置的 Routes 规则匹配请求的 Method、Path、Host、Headers 等
- 如果匹配到 Route,继续处理
- 如果未匹配,返回 404
- 插件执行(请求阶段):执行与该 Route 或 Service 关联的所有插件
- 认证插件:Key Authentication、OAuth2、JWT、Basic Auth、LDAP 等
- 安全插件:IP 限制、ACL、CORS、Bot Detection
- 流量控制:Rate Limiting、Request Size Limiting
- 协议转换:gRPC-web、WebSocket、GraphQL
- 其他:日志、缓存、请求转换等
- 负载均衡:如果服务配置了 Upstream 和多个 Targets,Kong 进行负载均衡(round-robin、least-connections 等)
- 转发请求:将请求转发到后端目标地址(可以重写请求头、路径等)
- 接收响应:从后端服务接收响应
- 插件执行(响应阶段):执行响应相关的插件(如响应转换、缓存响应、响应日志等)
- 返回响应:将处理后的响应返回给客户端
典型配置示例
使用 Admin API(RESTful 接口)创建配置:
# 1. 添加一个 Service(指向用户服务) curl -i -X POST http://localhost:8001/services \ --data "name=user-service" \ --data "url=http://user-api:8080" # 2. 添加 Route(将 /users/* 请求路由到 user-service) curl -i -X POST http://localhost:8001/services/user-service/routes \ --data "paths[]=/users" \ --data "strip_path=false" # 3. 添加全局认证插件(Key Authentication) curl -i -X POST http://localhost:8001/plugins \ --data "name=key-auth" \ --data "config.key_names=apikey" # 4. 创建一个消费者(客户端) curl -i -X POST http://localhost:8001/consumers \ --data "username=client-app" # 5. 为消费者生成 API Key curl -i -X POST http://localhost:8001/consumers/client-app/key-auth # 6. 添加限流插件(每分钟 100 次请求) curl -i -X POST http://localhost:8001/services/user-service/plugins \ --data "name=rate-limiting" \ --data "config.minute=100" \ --data "config.policy=local"
请求测试:
# 没有 API Key 的请求会被拒绝 curl http://localhost:8000/users/profile # 返回 401 Unauthorized # 带有有效 API Key 的请求,每分钟不超过 100 次 curl http://localhost:8000/users/profile \ -H "apikey: YOUR_API_KEY" # 成功转发到后端服务
Kong 的三种部署模式
- DB-less 模式:配置存储在 YAML/JSON 文件中,适合静态配置和 CI/CD
- 传统模式:使用 PostgreSQL/Cassandra 数据库,支持动态配置(Admin API)
- 混合模式:控制平面(Control Plane)+ 数据平面(Data Plane),数据平面无 DB,适合大规模高可用部署
常见使用场景
- API 统一入口:所有微服务通过 Kong 暴露,统一管理
- 认证授权:JWT、OAuth2、OpenID Connect 等
- 流量控制:限流、熔断、重试、超时
- 协议转换:REST ↔ gRPC、HTTP ↔ WebSocket
- 安全防护:IP 白名单/黑名单、请求体大小限制、CORS
- API 版本管理:通过路由路径或 Header 实现版本控制
- 监控与日志:Prometheus 指标、请求日志、错误追踪
- 灰度发布/蓝绿部署:通过 Upstream 和权重控制流量比例
Kong 作为 API 网关,本质是一个反向代理 + 插件系统,它把公共的横切关注点(认证、限流、日志等)从业务服务中抽离出来,由网关统一处理,让后端服务专注于业务逻辑,它的高性能(基于 Nginx)、丰富的插件生态和灵活的配置方式使其成为云原生架构中常用的 API 网关选择。
标签: API
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。