Kong网关快速入门指南
前言
本文描述了Kong网关快速入门指南,作为学习和使用Kong网关参考。
工具和环境:
-
Kong Communiity 2.5
-
Konga 0.14.9
-
本文Kong地址:
http://192.168.0.100:8000
假设已安装和配置Kong网关和Konga控制台。
参见:
Kong网关快速入门指南
为简单起见,下面操作都在Konga控制台上操作完成。
Kong网关架构
说明:
- API Client调用某个API时,请求会经过Consumer、Route、Service、Load Balancer,最后分发到某个Upstream。
- Consumer代表调用API的客户端,可能是一个App,Web或Service。Consumer用来控制谁可以来调用某个API。
- Service代表某个微服务或一组API。
- Route用来对Service作路由控制。一个Service可以有多个Route。
- Load Balancer对Service的多个Upstream作负载均衡。对反向代理(Reverse Proxy)来说,后端服务被视作Upstream。
- Kong网关通过plugin来支持认证、安全控制、流量控制、数据转换和日志等。
参见:
暴露服务
对应场景:一个新的微服务上线。
参见:
添加Service
在Konga中,打开Services,新建Service。
Name: `demo`
Description: `REST API Mock Demo`
Url: `http://httpbin.org`
另外还可以设置:
- Retries - 失败后重试次数,默认值为5
- Connect timeout - 建立连接超时,默认值为60000ms,即60s
- Write timeout - 写超时,默认值为60000ms,即60s
- Read timeout - 读超时,默认值为60000ms,即60s
这里都保持默认值。
需要为Service配置Route后才能访问该Service。
添加Route
在新建的Service下,添加Route。
Name: `demo-route`
Paths: `/demo` # Press <Enter> to add
Protocols: `http`
说明:
- 一个Route可以配多个Path,也就是多个Path都可以分发到同一个Service。
- 通常会对Path命名进行规范管理。
在浏览器中访问http://192.168.0.100:8000/demo/anything,返回结果和直接访问http://httpbin.org/anything 是类似的。
保护你的服务
对应场景:服务流量控制。
参见
添加Rate Limiting插件
在该Service下,添加插件,选择 Traffic Control / Rate Limiting。
Consumer: # 保持为空,表示对所有Consumer生效
minute: 5 # 限制每分钟5次调用,只作演示用
说明:
- Rate Limiting插件支持按每秒/分钟/小时/天/月/年进行限制,实际使用时请根据实际情况设定。
- 不指定Consumer时,根据
ip
作限制。
在浏览器中不断刷新http://192.168.0.100:8000/demo/anything ,超过限制次数后返回错误信息:
{
"message": "API rate limit exceeded"
}
等到限制窗口结束后,又可以正常使用。
用Postman或Insomina REST Client来测试http://192.168.0.100:8000/demo/anything ,观察Response headers。
示例:
ratelimit-limit: 5
ratelimit-remaining: 0
ratelimit-reset: 28
retry-after: