Kong 的架构研究与探索

Kong作为比较受欢迎的API网关, 基于OpenRestry , 能充分发挥Nginx epoll 模型的强大并发支持, 并且使用Lua 来对模块进行配置与热插拔.

 

目前使用的是Kong的最新版 1.3.0 , 然后使用的是PostgreSQL用作配置存储, 目前是可以不在后端采用数据库的, 直接使用配置文件来组织和管理规则~

 

首先是Kong的几个关键的概念:

Kong是什么?

Kong的组成?

Kong能干什么?

Kong的扩展性与高可用?

 

第一个问题在开篇已经介绍了, 用作API 网关.

既然是做到网关的功能了, 那网关的关键的功能应该都一应俱全.

比如API转发请求, API注册, API权限控制, API后端负载均衡, API使用统计, API限流.

这些功能都是原生提供了的, 需要在配置的时候, 进行相应的配置并启用插件来实现.

 

Kong的组成, 首先从软件层面来看, 我的Kong 是采用rpm包进行安装的, 也就是预编译好的二进制包, 安装完成后, 进行对应的配置即可启动服务.

为了方便研究和管理, 我还搭建了一个Konga的 图形管理界面. 用于快捷的操作Admin的API来对Kong 进行管理.

新手最好也弄一个这个Konga ,因为光看文档的话, 不一定列出了所有的参数. 在Konga里面的话, 就把能配置的参数都一一列出来了. 虽然看起来上手难度更加高, 但是对于新手的操作的话, 更加友好.

服务启动之后, 主要还是Nginx, 还有用于存储配置的PostgreSQL 数据库.

使用默认的情况下, 进程会监听8000端口和8001端口, 8000端口主要处理API请求, 8001端口的话就是Admin API所监听的端口.

几乎所有的管理都是通过Admin API接口来进行处理的.

 

Kong的内部逻辑组成

主要由以下几个部分组成:

Service

Route

Consumer

Upstream

Plugin

Certificate

 

 

按照发起一次API请求

Client -> Gateway -> Back-end Service 的顺序来简要介绍一下这几个内部的逻辑组件

 

  1. Consumer/anonymous 用户/匿名用户

对于API的访问, 我们需要对无需验证的接口开放访问, 就需要开放匿名用户访问接口, 此处的anonymous 就是用作无需授权进行访问Route

而对于内部接口和计费接口, 需要验证身份进行访问的话, 就需要在内部设定好Consumer 这个角色, 配置好验证方式. 并授予合适的权限给Consumer.

确保Consumer 能访问获得授权的接口.

 

  1. Route: Client 通过匿名或者授权的方式访问到了 Gateway之后,  首先进到的是Route,

Route 定义了各种路由规则和权限来进行访问, 与它关联的组件有 Service, 在匹配到合适的路由规则之后, 会对请求进转发.

 

  1. Service: 匹配到Route之后, 会进入到Service里面, Service里定义了转发到后端的Host, Path, Port 等这些关键信息, 按照Service内定义好的规则将请求转发.
  2. Plugin: 在请求接受到转发全程可以通过插件来实现特定功能.
  3. Certificate: 验证凭据

 

 

Kong能干什么?

OpenRestry 的强大支持下, 能支持相当高的并发访问, 而且加上由Lua语言编写的Kong插件, 新加的配置能立马应用到Kong上面. 有了这些工具的加成,

对于服务API的管理如虎添翼.

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据