如果每个服务都要实现包括认证、统计、安全校验等功能,会有很多重复的工作。API 网关的作用就是把这些公共的东西抽取出来,如右图,下面的这几个服务,每个服务都只关心自身业务相关的东西,和业务无关的东西全部都丢到API 网关上,即 API 网关就是把公共的东西如统计、安全、限流、限速、缓存等提取出来做了一个中间层。
Kong 是在客户端和(微)服务间转发API通信的API网关,通过插件扩展(Lua)功能。插件在 API 请求响应循环的生命周期中被执行。Kong是一个在Nginx运行的Lua应用程序,由lua-nginx-module实现。Kong和OpenResty一起打包发行,其中已经包含了lua-nginx-module。OpenResty不是Nginx的分支,而是一组扩展其功能的模块。
Kong 有两个主要组件:
Kong Server :基于nginx的服务器,用来接收 API 请求。
Apache Cassandra:用来存储操作数据。
基础功能:KHTTP 基本认证、密钥认证、CORS( Cross-origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API 请求限流、请求转发以及 nginx 监控。
查看节点信息
curl http://localhost:8001
部分返回字段含义:
node_id : 正在运行的kong节点的uuid,当kong启动时随机生成,每次kong重启时这个uuid都会变
availabel_on_server : kong节点上安装的plugins的名称
enabled_in_cluster : kong节点中启用的插件,即在数据库中生成了对应存储表
查询节点状态
curl http://localhost:8001/status
部分返回字段含义:
total_requests : 客户端请求总数
connections_active : 包括等待连接的活动客户端连接的当前数量
connections_accepted : 接受的客户端连接的总数
connections_handled : 处理连接的总数。一般来说,除非达到一定的资源限制,否则参数值与接受值相同
connections_reading : 当前Kong正在读取请求头的连接数
connections_writing : NGINX将响应写入客户端的连接的当前数量
connections_waiting : 等待请求的空闲客户端连接的当前数量
reachable : 反映数据库连接状态的布尔值。注意,此标志不反映数据库本身的健康状况
查询路由列表
curl -i -X GET --url http://localhost:8001/routes/
查询一个服务关联的所有路由
GET /services/{service name or id}/routes
curl -i -X GET --url http://localhost:8001/services/example-serviceA/routes
查询消费者列表
curl -i -X GET /consumers/{username or id}
查看服务
curl -i -X GET http://localhost:8001/services
查看服务name的服务属性
GET http://localhost:8001/services/{service id/name}
查看与指定route id绑定的服务。
GET http://localhost:8001/routes/{routes id}/service
查看指定plugin 插件(/plugins/{plugin id}/service)的服务
GET http://localhost:8001/plugins/{plugin id}/service