Kong概述

xiaohai 2021-06-03 10:42:09 2159人围观 标签: Kong 
简介Kong是一个在Nginx中运行的Lua应用程序,可以通过lua-nginx模块实现,Kong不是用这个模块编译Nginx,而是与OpenRestry一起发布,OpenRestry已经包含了lua-nginx-module,OpenRestry是Nginx的一组扩展功能模块。

官网地址

https://konghq.com/

Kong是什么?

Kong是一个在Nginx中运行的Lua应用程序,可以通过lua-nginx模块实现,Kong不是用这个模块编译Nginx,而是与OpenRestry一起发布,OpenRestry已经包含了lua-nginx-module,OpenRestry是Nginx的一组扩展功能模块。

Kong的作用

Kong是一个Api Gateway,通过插件的形式提供负载均衡,日志记录,身份验证,速率限制,转换等功能。

Kong可以很轻松扩展功能,模块化,可以运行在任何基础设施上。

Kong的组件

Kong主要有三个组件:

  • Kong Server :基于nginx的服务器,用来接收API请求。

  • Apache Cassandra/PostgreSQL :用来存储操作数据。

  • Kong dashboard:官方推荐UI管理工具,当然,也可以使用 restfull 方式 管理admin api。

Kong采用插件机制进行功能定制,插件集(可以是0或N个)在API请求响应循环的生命周期中被执行。插件使用Lua编写,目前已有几个基础功能:HTTP基本认证、密钥认证、CORS(Cross-Origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及Nginx监控。

Kong的特性

Kong网关具有以下的特性:

  • 可扩展性: 通过简单地添加更多的服务器,可以轻松地进行横向扩展,这意味着您的平台可以在一个较低负载的情况下处理任何请求;

  • 模块化: 可以通过添加新的插件进行扩展,这些插件可以通过RESTful Admin API轻松配置;

  • 在任何基础架构上运行: Kong网关可以在任何地方都能运行。您可以在云或内部网络环境中部署Kong,包括单个或多个数据中心设置,以及public,private 或invite-only APIs。

Kong网关插件

  • 身份认证插件:Kong提供了Basic Authentication、Key authentication、OAuth2.0 authentication、HMAC authentication、JWT、LDAP authentication认证实现。

  • 安全控制插件:ACL(访问控制)、CORS(跨域资源共享)、动态SSL、IP限制、爬虫检测实现。

  • 流量控制插件:请求限流(基于请求计数限流)、上游响应限流(根据upstream响应计数限流)、请求大小限制。限流支持本地、Redis和集群限流模式。

  • 分析监控插件:Galileo(记录请求和响应数据,实现API分析)、Datadog(记录API Metric如请求次数、请求大小、响应状态和延迟,可视化API Metric)、Runscope(记录请求和响应数据,实现API性能测试和监控)。

  • 协议转换插件:请求转换(在转发到upstream之前修改请求)、响应转换(在upstream响应返回给客户端之前修改响应)。

  • 日志应用插件:TCP、UDP、HTTP、File、Syslog、StatsD、Loggly等。

Kong的请求流程

当Kong运行时,每个对API的请求将先被Kong命中,然后这个请求将会被代理转发到最终的API接口。在请求(Requests)和响应(Responses)之间,Kong将会执行已经事先安装和配置好的任何插件,授权您的API访问操作。Kong是每个API请求的入口点(Endpoint)。

Kong概念术语

  • upstream:对上游服务的抽象
  • target:代表了一个物理服务,是ip+port的抽象
  • service:是抽象层面的服务,可以直接映射到一个物理服务,也可以指向一个upstream来做到负载均衡
  • route:是路由的抽象,实际负责request映射到service

默认情况下,Kong监听的端口有8000、8001、8443、8444

其中8000、8443分别是来监来之客户端的Http和Https请求,等价于Nginx默认的80端口和443端口。8001是默认的管理端口,可以通过HTTP Restful Api来动态管理Kong的配置。如使用方式:

curl http://localhost:8001