kong如何API网关

联启 网络工具 14

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

kong如何API网关-第1张图片-电脑手机工具软件下载 - 免费实用工具合集 | 联启科技

以下是 Kong 如何作为 API 网关工作的核心概念和流程:

核心架构与工作流程

客户端 (Client) 
    ↓
Kong API 网关 (Kong Gateway)
    ↓ (根据路由规则)
上游服务 (Upstream Service)

核心组件

  • Service(服务):代表后端的 API 或微服务(如用户服务、订单服务)
  • Route(路由):定义进入请求的匹配规则(如路径 /users/*、方法 GET、Host 头等)
  • Upstream(上游):后端服务的真实地址(如 http://user-service:8080)及负载均衡配置
  • Target(目标):Upstream 中的具体节点(如 service-1:8080service-2:8080
  • Plugin(插件):为请求/响应链添加的功能(认证、限流、日志、转换等)
  • Consumer(消费者):API 的使用者/客户端,用于认证和访问控制

工作流程

请求到达 → 匹配 Route → 执行 Plugin 链 → 转发到 Service/Upstream → 响应返回 → 执行后处理 Plugin

详细步骤:

  1. 接收请求:客户端发送 HTTP 请求到 Kong 的监听端口(默认 8000/8443)
  2. 路由匹配:Kong 根据配置的 Routes 规则匹配请求的 Method、Path、Host、Headers 等
    • 如果匹配到 Route,继续处理
    • 如果未匹配,返回 404
  3. 插件执行(请求阶段):执行与该 Route 或 Service 关联的所有插件
    • 认证插件:Key Authentication、OAuth2、JWT、Basic Auth、LDAP 等
    • 安全插件:IP 限制、ACL、CORS、Bot Detection
    • 流量控制:Rate Limiting、Request Size Limiting
    • 协议转换:gRPC-web、WebSocket、GraphQL
    • 其他:日志、缓存、请求转换等
  4. 负载均衡:如果服务配置了 Upstream 和多个 Targets,Kong 进行负载均衡(round-robin、least-connections 等)
  5. 转发请求:将请求转发到后端目标地址(可以重写请求头、路径等)
  6. 接收响应:从后端服务接收响应
  7. 插件执行(响应阶段):执行响应相关的插件(如响应转换、缓存响应、响应日志等)
  8. 返回响应:将处理后的响应返回给客户端

典型配置示例

使用 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 的三种部署模式

  1. DB-less 模式:配置存储在 YAML/JSON 文件中,适合静态配置和 CI/CD
  2. 传统模式:使用 PostgreSQL/Cassandra 数据库,支持动态配置(Admin API)
  3. 混合模式:控制平面(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

抱歉,评论功能暂时关闭!