API网关系列之Kong的介绍以及安装
一、API网关产生背景
在微服务的架构中,一个大的应用会被拆分成多个小的单一的服务提供出来,这些小的服务有自己的处理,有自己的数据库(也可以共用),也许语言也是不一样的,他们可以部署在一个或多个服务器上,其实也就是对复杂的应用进行了解耦,那为什么微服务需要API网关呢?
首先我们看看微服务后产生的问题:
- 客户端需要知道多个服务地址
- 通用的功能怎么处理?例如鉴权、流量控制、日志等
- 以前一个功能可能是一次请求就可以完成,现在可能要多个服务一起进行才可以,那如何减少客户端请求的时间呢?
由于以上几点的问题,所以在所有的服务前面还需要定义一个代理,即API网关,所有的客户端请求都必须经过API网关代理到真实的服务地址,这也可以有效的避免真实地址的暴露,同时API网关也可以集成鉴权、流量控制、日志、API聚合、黑白名单等。
二、kong的介绍
Kong是由Mashape开发的并且于2015年开源的一款API网关框架,基于nginx以及 OpenResty 研发,主要特点是高性能以及其强大的扩展性,由于本身是基于nginx进行开发,因此网上很多关于nginx的调优等资料都可以用到kong的上面,包括负载均衡、或者充当web服务器等
kong的扩展是通过插件机制进行的,并且也提供了插件的定制示例方法,插件定义了一个请求从进入到最后反馈到客户端的整个生命周期,所以可以满足大部分的定制需求,本身kong也已经集成了相当多的插件,包括CORS跨域、logging、限流、转发、健康检查、熔断等,API聚合功能从github上看也已经进入开发阶段。
kong插件介绍地址:https://konghq.com/plugins/.
kong相关文档地址:https://getkong.org/docs/
三、kong的安装
本次安装是在CentOS7.3下进行
步骤一、pg数据库安装,一步步执行如下的脚本
//获取下载的rpm
yum install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm
//执行安装
yum install postgresql95-server
//初始化数据库
/usr/pgsql-9.5/bin/postgresql95-setup initdb
//设置开机启动
systemctl enable postgresql-9.5
//启动服务
systemctl start postgresql-9.5
步骤二、pg数据库远程访问设置(如果不需要的话,那也可以不用管)
修改/var/lib/pgsql/9.5/data/pg_hba.conf,增加如下配置

修改/var/lib/pgsql/9.4/data/postgresql.conf,修改以下配置

步骤三:kong服务安装
由于官网repo仓库的版本才更新到0.10.4版本(估计官方忘记或者太懒了),所以目前只能用rpm包的方式进行安装,rpm包下载地址:https://bintray.com/kong/kong-community-edition-rpm/download_file?file_path=centos/7/kong-community-edition-0.12.3.el7.noarch.rpm
下载好后,到文件目录下执行:
rpm -ivh kong-community-edition-0.12..el7.noarch.rpm
kong version
步骤四、数据库配置
kong连数据库,需要我们在pg上建立密码为kong的kong用户,数据库名也为kong
su - postgres//进入数据库
-bash-4.2$ psql
postgres=# CREATE USER kong WITH PASSWORD 'kong'; CREATE DATABASE kong OWNER kong;//建立数据库以及用户
步骤五、修改kong配置
进入/usr/local/share/lua/5.1/kong/templates目录,修改kong_defaults.lua里的pg_password=kong,保存
步骤六、启动
kong migrations up//初始化数据库
kong start//启动命令
Kong 在启动后,一个是 8000,一个是 8001,8000端口是请求进入端口,用户发送请求先到 Kong 项目的 8000 端口,kong根据配置的规则转发到真实的后台服务地址。而8001 端口则是管理端口,插件设置、API的增删改查、以及负载均衡等一系列的配置都是通过8001端口进行管理
最后、浏览器访问IP:8000,如果出现{"message":"no API found with those values"}
注意点:如果有防火墙的话,最好先关掉防火墙
四、总结
kong在我看来是可以很好的完成了API网关的职责,基于nginx开发,插件开发方便,支持负载均衡,支持日志等,对于K8S也可以轻松部署使用
这次介绍比较简单,大家如果有不同的建议、意见或者问题的话,可以留言一起讨论,kong有打算是写成一个系列的,目前自己也在摸索当中,可能会不定期更新,谢谢大家
作者: Mango
出处: http://www.cnblogs.com/OMango/
关于自己:专注.Net桌面开发以及Web后台开发,开始接触微服务、docker以及k8s等互联网相关(越来越觉得自己像运维了)
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,如有问题, 可站内留言联系.
API网关系列之Kong的介绍以及安装的更多相关文章
- openresty开发系列10--openresty的简单介绍及安装
openresty开发系列10--openresty的简单介绍及安装 一.Nginx优点 十几年前,互联网没有这么火,软件外包开发,信息化建设,帮助企业做无纸化办公,收银系统,工厂erp,c/s架构偏 ...
- HTTP API网关选择之一Kong介绍
为什么需要 API 网关 在微服务架构之下,服务被拆的非常零散,降低了耦合度的同时也给服务的统一管理增加了难度.如上图左所示,在旧的服务治理体系之下,鉴权,限流,日志,监控等通用功能需要在每个服务中单 ...
- Flume系列一之架构介绍和安装
Flume架构介绍和安装 写在前面 在学习一门新的技术之前,我们得知道了解这个东西有什么用?我们可以使用它来做些什么呢?简单来说,flume是大数据日志分析中不能缺少的一个组件,既可以使用在流处理中, ...
- Kafka系列一之架构介绍和安装
Kafka架构介绍和安装 写在前面 还是那句话,当你学习一个新的东西之前,你总得知道这个东西是什么?这个东西可以用来做什么?然后你才会去学习它,使用它.简单来说,kafka既是一个消息队列,如今,它也 ...
- 微服务系列(二):使用 API 网关构建微服务
编者的话|本文来自 Nginx 官方博客,是微服务系列文章的第二篇,本文将探讨:微服务架构是如何影响客户端到服务端的通信,并提出一种使用 API 网关的方法. 作者介绍:Chris Richardso ...
- .NET Core微服务之基于Ocelot实现API网关服务(续)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.负载均衡与请求缓存 1.1 负载均衡 为了验证负载均衡,这里我们配置了两个Consul Client节点,其中ClientServic ...
- 开源API网关,你选对了么?
开源API网关,你选对了么? api网关的本质 不用扯那么多,也不用画图,一句话说清楚 api网关:流量总入口,得以集中控制! 就这么简单 api网关协议上最基本要支持HTTP 和 WebSocket ...
- 使用 Node.js 搭建一个 API 网关
原文地址:Building an API Gateway using Node.js 外部客户端访问微服务架构中的服务时,服务端会对认证和传输有一些常见的要求.API 网关提供共享层来处理服务协议之间 ...
- 使用 Node.js 搭建API 网关
外部客户端访问微服务架构中的服务时,服务端会对认证和传输有一些常见的要求.API 网关提供共享层来处理服务协议之间的差异,并满足特定客户端(如桌面浏览器.移动设备和老系统)的要求. 微服务和消费者 微 ...
随机推荐
- Java经典编程题50道之九
一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. public class Example09 { public s ...
- tensorflow_mnist数据集一直加载错误的解决办法
tensorflow数据集一直加载错误的解决办法: from tensorflow.examples.tutorials.mnist import input_data mnist = input_d ...
- Dubbo广播模式下报错:Can't assign requested address解决办法
原因: 尝试使用Dubbo的multicast模式,发现一运行就报Can't assign requested address的错误,造成这种原因的主要是系统中开启了IPV6协议(比如window7) ...
- ubuntu python3.6 找不到_sqlite3
sudo apt-get install libsqlite3-dev 然后重新编译python: sudo ./configure --with-ssl sudo make -j8 sudo mak ...
- C. Vasya and String
原题链接 C. Vasya and String High school student Vasya got a string of length n as a birthday present. T ...
- HDU - 4496 City 逆向并查集
思路:逆向并查集,逆向加入每一条边即可.在获取联通块数量的时候,直接判断新加入的边是否合并了两个集合,如果合并了说明联通块会减少一个,否则不变. AC代码 #include <cstdio> ...
- mysql数据库基本使用(增删改查)
数据库db,database 数据库:依照某种数据模型进行组织并存放到存储器的数据集合dbms,database management system 数据库管理系统:用来操作和管理数据库的大型服务软件 ...
- SQL Server使用侦听器IP访问时遇到"The target principal name is incorrect. Cannot generate SSPI context"
在测试SQL Server 2016 Always On时,在创建侦听器后,在客户端使用SSMS, 可以用侦听器名称访问Always On集群,但是使用侦听器IP访问时遇到"The targ ...
- MxNet+R︱用R语言实现深度学习(单CPU/API接口,一)
MxNet有了亚马逊站台之后,声势大涨,加之接口多样化,又支持R语言所以一定要学一下.而且作为R语言的fans,为啥咱们R语言就不能上深度学习嘞~ -------------------------- ...
- Hi3531支持2GByte内存
型号为K4B4G1646B-HCKO 1.修改DDRC_RNKCFG 为 0x142 2.修改arch/arm/mach-godnet/include/mach/vmalloc.h 扩大 vmallo ...