API网关——Kong实践分享
分类:技术社区 发布时间:2019/7/4 0:00:00

概述


01 什么是Kong

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



02 为什么是Kong

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

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




 

03 术语

Route:是请求的转发规则,按照Hostname和PATH,将请求转发给Service。
Services:是多个Upstream的集合,是Route的转发目标。
Consumer:是API的用户,里面记录用户的一些信息。
Plugin:是插件,plugin可以是全局的,绑定到Service,绑定到Router,绑定到Consumer。
Certificate:是https证书。
Sni:是域名与Certificate的绑定,指定了一个域名对应的https证书。
Upstream:是负载均衡策略。
Target:是最终处理请求的Backend服务。

 

04 特性
  • 动态负载均衡
  • 基于散列的负载均衡
  • 断路器
  • 健康检查
  • Websockets
  • OAuth2.0
  • 日志记录
  • 安全性
  • Syslog
  • 监控
  • 转发代理
  • 认证
  • 速率限制
  • 故障检测和恢复
……

更多详情参考:https://docs.konghq.com/hub/


05 开源/企业对比

 




架构


01 架构图

 


1.1版本以后支持无db模式

 
02 执行流程

加入kong后,每个客户端对API的请求将首先到达Kong,然后被代理到最终API,在请求和响应之间,Kong将执行任何已安装的插件,扩展API功能集,Kong有效的成为每个API的入口点。



部署


Kong支持在任何基础设施上运行,支持docker、packages、vagrant、Homebrew、CloudFormation、AWS、Azure、Kubernetes等。

本次部署基于package方式,部署软件版本。


软件 版本
Kong 1.0.3
Postgresql 9.6
Kong-dashboard 3.5.0
   
 

01
部署Postgresql


docker run 
--
name postgres 
-
e POSTGRES_PASSWORD
=
123456
 
-

5432
:
5432
 
-
d postgres
:
9.6



02
创建用户及数据库

# 登陆

psql 
-
U postgres 
-

10.20
.
1.190
 
-

5432



#创建用户

create user kong 
with
 password 

kong
’;



#创建数据库

create database kong owner kong
;



#退出控制台

\q



03
下载安装包

wget:https://kong.bintray.com/kong-rpm/centos/7/:kong-1.0.3.el7.noarch.rpm

 
04
安装配置

#安装rpm

yum install kong
-
1.0
.
3.el7.noarch
.
rpm



#拷贝配置

cp 
/
etc
/
kong
/
kong
.
conf
.
default
 
/
etc
/
kong
/
kong
.
conf



#配置

admin_listen 
=
 
0.0
.
0.0
:
8001
,
 
0.0
.
0.0
:
8444
 ssl

pg_host 
=
 
10.20
.
1.190

pg_port 
=
 
5432

pg_user 
=
 kong

pg_password 
=
 kong

pg_database 
=
 kong


保存并退出。



05
启动kong

#数据库迁移,初始化表

kong migrations bootstrap 
-

/
etc
/
kong
/
kong
.
conf 

vv



#启动

kong start 
-

/
etc
/
kong
/
kong
.
conf



06

部署kong-dashboard

dashboard目前只支持kong版本1.0.3,kong最新版本不支持,使用pgbi/kong-dashboard镜像

#启动dashboard



docker run 
-

8888
:
8080
 pgbi
/
kong
-
dashboard start 
--
kong
-
url http
:
//10.20.1.190:8001



使用


01 upstream





02 target





03 service





04 routers





05 验证





06 插件

1.Base-auth

创建consumer





创建Basic-auth-credential



 

服务开启Basic-auth





验证


未加用户信息,没权限,效果如下:





加入用户信息后,效果如下:






集成


01
Dns SRV

Kong利用Dns轮询访问后端应用。



1.架构图





 

2.检查服务域名

使用Dns做服务发现,查看boms-user-service服务如下:

# dig @10.20.11.118 -p 8600 boms-user-service.service.dc1.consul SRV

 





含义解释:





调用服务域名boms-user-service.service.dc1.consul,通过dns解析找到实例ip+port,如上例中10.20.11.118:8081。



3.修改kong配置

vim 编辑kong.conf,增加:

dns_resolver
:
 
127.0
.
0.1
:
8600



4.kong中使用

在kong中手动增加一个service,host填入服务域名,增加router,即可转发。



5.总结

需要手动在kong中创建服务,并且仅适用consul注册中心。

https://github.com/faizalpribadi/kongsul

 

02

Agent 轮询

1.架构图

 



agent负责监听注册中心,动态调用kong admin API创建upstream、target、service、router等资源。



用户通过boms平台调用admin API修改router信息,实现服务转发功能,在此数据基础之上在启用插件,丰富功能。





开发

01
命令行

https://docs.konghq.com/1.0.x/cli/



02

Admin API

https://docs.konghq.com/1.0.x/admin-api/

例如:



 

03

插件开发

https://docs.konghq.com/1.0.x/pdk/ 插件开发工具包。





参考

https://docs.konghq.com Kong官方文档

https://docs.konghq.com/hub/kong-inc 插件文档

https://www.lijiaocn.com/%E6%8A%80%E5%B7%A7/2017/03/06/dns-srv.html dns-srv 详解

https://github.com/faizalpribadi/kongsul

https://github.com/YeautyYE/nacos-nginx-template

https://github.com/quancheng-ec/eureka-kong-register
体验创新云技术带来核心业务效率显著提升
立即预约,加速企业数字化转型进程
Copyright ⓒ 2022 苏州博纳讯动软件有限公司 国徽 苏ICP备13004761号 法律声明及隐私政策