李宁
作者李宁2019-06-12 11:29
软件架构设计师, 博云

API网关——Kong实践分享

字数 3424阅读 642评论 0赞 2

作者:康学志
来源:博云研究院(公众号:bocloudresearch)

概述

01 什么是Kong

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

02 为什么是Kong

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

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

62ux0x81re4

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 开源/企业对比

rykby4559e

rykby4559e

v59iuhn53o

v59iuhn53o

lyib99j4f29

lyib99j4f29

架构

01 架构图

37ivul6ghgw

37ivul6ghgw

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 -p 5432:5432 -d postgres:9.6

02 创建用户及数据库

# 登陆
psql -U postgres -h 10.20.1.190 -p 5432

#创建用户
create user kong withpassword ‘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 -c /etc/kong/kong.conf -vv

#启动
kong start -c /etc/kong/kong.conf

06 部署kong-dashboard

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

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

使用

01 upstream

nl6cyo0ruqb

nl6cyo0ruqb

02 target

lw8mo0t1sw

lw8mo0t1sw

03 service

79jxmzxwnfq

79jxmzxwnfq

04 routers

8rki9iq8afd

8rki9iq8afd

05 验证

5801ww5m9q4

5801ww5m9q4

06 插件

1.Base-auth
创建consumer
72fwrb99kea

72fwrb99kea

创建Basic-auth-credential
mnerfphtean

mnerfphtean

服务开启Basic-auth
gu0kuuaj1kd

gu0kuuaj1kd

验证
未加用户信息,没权限,效果如下:
1zyb3udpqho

1zyb3udpqho

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

y6lth5uyrd

集成

01 Dns SRV

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

1.架构图
g5hutxdescv

g5hutxdescv

2.检查服务域名
使用Dns做服务发现,查看boms-user-service服务如下:
# dig @10.20.11.118 -p 8600 boms-user-service.service.dc1.consul SRV
lsjc4qn9j8f

lsjc4qn9j8f

含义解释:
p34mckfmr9h

p34mckfmr9h

调用服务域名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.架构图
aelrkidomv5

aelrkidomv5

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/
例如:
20s9l4ujegp

20s9l4ujegp

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

本文由博云研究院原创发表,转载请注明出处。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

关于TWT  使用指南  社区专家合作  厂商入驻社区  企业招聘  投诉建议  版权与免责声明  联系我们
© 2019  talkwithtrend — talk with trend,talk with technologist 京ICP备09031017号-30