介绍

Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。

Kong是一个在 Nginx 中运行的Lua应用程序,并且可以通过lua-nginx模块实现,Kong不是用这个模块编译Nginx,而是 OpenResty 一起发布,OpenResty已经包含了 lua-nginx-module, OpenResty 不是 Nginx的分支,而是一组扩展其功能的模块。它的核心是实现数据库抽象,路由和插件管理,插件可以存在于单独的代码库中,并且可以在几行代码中注入到请求生命周期的任何位置。

Kong主要有三个组件:

  • Kong Server :基于nginx的服务器,用来接收API请求。
  • Apache Cassandra/PostgreSQL :用来存储操作数据。
  • Kong dashboard:官方推荐UI管理工具,当然,也可以使用 restfull 方式 管理admin api。

Kong的主要功能包括:

  • 高级路由、负载平衡、健康检查——所有这些都可以通过管理 API 或声明性配置进行配置。
  • 使用 JWT、基本身份验证、ACL 等方法对API 进行身份验证和授权。
  • 代理、SSL/TLS 终止以及对 L4 或 L7 流量的连接支持。
  • 用于实施流量控制、req/res转换、日志记录、监控和包括插件开发人员中心的插件。
  • 复杂的部署模型,如声明式无数据库部署和混合部署(控制平面/数据平面分离),没有任何供应商锁定。
  • 本机入口控制器支持服务Kubernetes。



插件提供了扩展网关使用的高级功能。许多 Kong Inc. 和社区开发的插件(如 AWS Lambda、Correlation ID 和 Response Transformer)都在插件中心展示。



官网:

https://docs.konghq.com/

github:

https://github.com/kong/kong

https://github.com/pantsel/konga

安装教程

这里推荐使用docker安装,并且推荐使用docker-compose进行安装,因为可以安装图形化界面konge,省去了kong和konge整合的烦恼,而且安装部署方便。

docker安装可参考我之前写的这篇博文:Docker简易安装教程

如果还是想用linux方式安装,安装方式以及问题可参考这篇博文:https://blog.csdn.net/qq_33067315/article/details/108635407

docker-compose安装

docker-compose安装命令如下:

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

安装成功之使用docker-compose --version查看安装版本,docker-compose的yml的配置文件说明可参考:https://www.runoob.com/docker/docker-compose.html,这里就不再过多描述了。

kong和konga的compose.yml文件

在了解docker-compose之后,我们首先在/opt/目录下创建kong文件夹,然后使用touch命令创建一个docker-compose.yml文件,然后添加如下配置:

docker-compose.yml

version: '3'
services:
kong-database:
image: postgres:9.6
restart: always #每次总是启动
networks:
- kong-net
environment:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_PASSWORD: kong
ports:
- "5432:5432"
#######################
# 执行数据库迁移
######################
kong-migration:
image: kong:latest
command: "kong migrations bootstrap"
networks:
- kong-net
restart: on-failure
environment:
- KONG_DATABASE=postgres
- KONG_PG_DATABASE=kong
- KONG_PG_PASSWORD=kong
- KONG_PG_HOST=kong-database
links:
- kong-database #连接的是kong-database服务的
depends_on:
- kong-database #依赖于kong-database服务 #####################
# kong gateway
#####################
kong:
image: kong:latest
restart: always
networks:
- kong-net
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_PASSWORD: kong
KONG_PROXY_LISTEN: 0.0.0.0:8000
KONG_PROXY_LISTEN_SSL: 0.0.0.0:8443
KONG_ADMIN_LISTEN: 0.0.0.0:8001
depends_on:
- kong-migration
links:
- kong-database
healthcheck:
test: ["CMD", "curl", "-f", "http://kong:8001"]
interval: 5s
timeout: 2s
retries: 15
ports:
- "8001:8001"
- "8000:8000"
- "8443:8443"
#######################
#以下两个是konga GUI
#######################
konga-prepare:
image: pantsel/konga:latest
command: "-c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga" #注意是用户名:密码@数据库服务名称:端口
networks:
- kong-net
restart: on-failure
links:
- kong-database
depends_on:
- kong #依赖kong服务
- kong-database #依赖kong-database服务 konga:
image: pantsel/konga:latest
restart: always
networks:
- kong-net
environment:
DB_ADAPTER: postgres
DB_HOST: kong-database
DB_USER: kong
DB_DATABASE: konga
DB_PASSWORD: kong #必须加上密码,不然会失败
depends_on:
- kong
- kong-database
ports:
- "1337:1337"
networks:
kong-net:
driver: bridge

上述配置完毕之后,在/opt/kong该目录下输入如下命令,进行启动

docker-compose up -d

然后输入docker-compose ps进行查看是否启动成功,成功示例图如下:

一个简单使用示例

本示例主要讲解一下网关中最常用的路由转发,原先是A服务配置B服务的地址,然后A服务直接请求B,现在则是A服务配置网关服务的地址,然后请求网关服务,网关服务将A的请求转发到B服务。

这里需要使用konga,因为有图形化界面,操作较为简单明了,当然用命令也可以实现,方法在上述的官方文档中给出了示例,这里就不再过多描述了。

在浏览器输入konga的地址,地址为:ip:1337,打开界面之后,默认是需要创建一个管理员的账号的,按照示例图的填写即可,示例图如下:

注册完毕之用创建的账和密码进行登录,然后填写kong服务的ip和端口,我这里设置的是8001,名称这里我填写的kong,可以随意,示例图如下:



注:由于当时填写忘记截图了,就用了配置好的截图,实际效果基本一致。

一个简单路由转发示例:

kong服务地址: 192.168.10.102

本地服务version查看地址: 192.168.6.14

登录konga,点击services,点击add new service,创建一个服务,配置信息填写如下:

然后点击该服务,在里面添加路由,然后填写路由相关信息。

配置信息如下:



然后在本地的电脑的hosts文件添加如下kong服务和域名的映射:

windows路径: C:\Windows\System32\drivers\etc\hosts

linux路径: /etc/hosts

192.168.10.102 pancm.com

映射ok之后,启动本地的服务,在浏览器访问 http://pancm.com:8000/或http://pancm.com:8000/version都可看到版本信息

完整的请求流程如下:

浏览器域名请求->通过hosts文件找到地址->请求kong服务地址->根据服务路由配置进行转发->请求配置服务的接口地址->返回数据

其他

音乐推荐

原创不易,如果感觉不错,希望给个推荐!您的支持是我写作的最大动力!

版权声明:

作者:虚无境

博客园出处:http://www.cnblogs.com/xuwujing

CSDN出处:http://blog.csdn.net/qazwsxpcm    

个人博客出处:http://www.panchengming.com

最新文章

  1. MDK for ARM (keil) 编译后的信息
  2. 游戏 gui button
  3. servlet-3_0-final-spec
  4. hdu 1861-游船出租
  5. js截取所需字符串长度
  6. OpenJudge 2802 小游戏 / Poj 1101 The Game
  7. HTTP,TCP,Socket
  8. javascript特殊运算符(in,instanceof,typeof,delete,void,逗号)
  9. Encoding filter 编码过滤器
  10. C# 调用程序集方法
  11. websocket c++ example
  12. 【angular5项目积累总结】avatar组件
  13. 流媒体技术学习笔记之(九)减少VLC 延迟的方法
  14. tablix“Tablix1”有一个具有内部成员的详细信息成员
  15. IntelliJ IDEA 历史版本下载地址
  16. jsp中excel文件的创建与读取
  17. nginx+tomcat实现负载均衡以及session共享(linux centos7环境)
  18. CF898A Rounding
  19. MVC过滤器的使用总结
  20. Zabbix学习之路(五)之MySQL监控

热门文章

  1. PHP获取文件扩展名的常用方法小结【五种方式】
  2. (转) PHP实现从1累加到100(1+2+….+100=)的几种思路,挺有意思的!!!
  3. Pandas高级教程之:自定义选项
  4. 微信小程序云开发-数据库-获取用户添加的数据到数据库
  5. Linux虚拟机扩展磁盘
  6. 2021 NOI冬令营
  7. Python脚本:删除文件夹下的重复图片,实现图片去重
  8. idea创建web工程、配置tomcat及基本配置
  9. 前端知识点--CSS overflow 属性
  10. ifix重用性模块化开发纪实(以污水处理泵站为例)