1、API网关产生背景nginx
在微服务的架构中,一个大的应用会被拆分红多个小的单一的服务提供出来,这些小的服务有本身的处理,有本身的数据库(也能够共用),也许语言也是不同的,他们能够部署在一个或多个服务器上,其实也就是对复杂的应用进行了解耦,那为何微服务须要API网关呢?
git
首先咱们看看微服务后产生的问题:github
因为以上几点的问题,因此在全部的服务前面还须要定义一个代理,即API网关,全部的客户端请求都必须通过API网关代理到真实的服务地址,这也能够有效的避免真实地址的暴露,同时API网关也能够集成鉴权、流量控制、日志、API聚合、黑白名单等。web
2、kong的介绍sql
Kong是由Mashape开发的而且于2015年开源的一款API网关框架,基于nginx以及 OpenResty 研发,主要特色是高性能以及其强大的扩展性,因为自己是基于nginx进行开发,所以网上不少关于nginx的调优等资料均可以用到kong的上面,包括负载均衡、或者充当web服务器等
docker
kong的扩展是经过插件机制进行的,而且也提供了插件的定制示例方法,插件定义了一个请求从进入到最后反馈到客户端的整个生命周期,因此能够知足大部分的定制需求,自己kong也已经集成了至关多的插件,包括CORS跨域、logging、限流、转发、健康检查、熔断等,API聚合功能从github上看也已经进入开发阶段。
数据库
kong插件介绍地址:https://konghq.com/plugins/.centos
kong相关文档地址:https://getkong.org/docs/跨域
3、kong的安装浏览器
本次安装是在CentOS7.3下进行
步骤1、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
步骤2、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.3.el7.noarch.rpm
kong version
步骤4、数据库配置
kong连数据库,须要咱们在pg上创建密码为kong的kong用户,数据库名也为kong
su - postgres//进入数据库 -bash-4.2$ psql postgres=# CREATE USER kong WITH PASSWORD 'kong'; CREATE DATABASE kong OWNER kong;//创建数据库以及用户
步骤5、修改kong配置
进入/usr/local/share/lua/5.1/kong/templates目录,修改kong_defaults.lua里的pg_password=kong,保存
步骤6、启动
kong migrations up//初始化数据库 kong start//启动命令
Kong 在启动后,一个是 8000,一个是 8001,8000端口是请求进入端口,用户发送请求先到 Kong 项目的 8000 端口,kong根据配置的规则转发到真实的后台服务地址。而8001 端口则是管理端口,插件设置、API的增删改查、以及负载均衡等一系列的配置都是经过8001端口进行管理
最后、浏览器访问IP:8000,若是出现{"message":"no API found with those values"}
注意点:若是有防火墙的话,最好先关掉防火墙
4、总结
kong在我看来是能够很好的完成了API网关的职责,基于nginx开发,插件开发方便,支持负载均衡,支持日志等,对于K8S也能够轻松部署使用
此次介绍比较简单,你们若是有不一样的建议、意见或者问题的话,能够留言一块儿讨论,kong有打算是写成一个系列的,目前本身也在摸索当中,可能会不按期更新,谢谢你们
做者: Mango
出处: http://www.cnblogs.com/OMango/
关于本身:专一.Net桌面开发以及Web后台开发,开始接触微服务、docker以及k8s等互联网相关(愈来愈以为本身像运维了)
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文连接,若有问题, 可站内留言联系.