Kong API网关测试踩坑记录
最近在公司项目中引入Kong作为API网关,经历了从部署到实际使用的完整过程,踩了不少坑,分享一下。
部署环境与配置
我们使用Docker Compose部署Kong,配置文件如下:
version: '3'
services:
kong:
image: kong:2.8
environment:
- KONG_DATABASE=off
- KONG_PROXY_ACCESS_LOG=/dev/stdout
- KONG_ADMIN_ACCESS_LOG=/dev/stdout
- KONG_PROXY_ERROR_LOG=/dev/stderr
- KONG_ADMIN_LISTEN=0.0.0.0:8001
ports:
- "8000:8000"
- "8001:8001"
踩坑记录
问题1:路由匹配优先级混乱 最初配置了多个路由,发现请求总是命中错误的路由。通过查阅文档才发现Kong默认按创建时间排序,新创建的路由会覆盖旧的。解决方法是使用priority字段:
curl -X POST http://localhost:8001/routes/\
-d 'name=api-v1' \
-d 'paths[]=/api/v1' \
-d 'priority=100'
问题2:跨域配置失效 前端请求总是出现CORS错误,最后发现需要在插件中启用cors插件并正确配置:
curl -X POST http://localhost:8001/plugins/ \
-d 'name=cors' \
-d 'config.allow_origins=*' \
-d 'config.allow_methods=GET,POST,PUT,DELETE' \
-d 'config.allow_headers=Content-Type,Authorization'
问题3:超时设置不合理 后端服务响应时间较长,请求经常超时。通过调整proxy_connect_timeout和proxy_send_timeout参数解决:
curl -X POST http://localhost:8001/services/my-service/ \
-d 'config.proxy_connect_timeout=30000' \
-d 'config.proxy_send_timeout=60000'
实战经验
建议在生产环境部署前先在测试环境充分验证路由策略和插件配置,避免线上故障。Kong的路由管理确实比Nginx更灵活,但学习成本也不低。

讨论