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
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播