概述
什么是 Kong
Kong 是一个在 Nginx 中运行的 Lua 应用程序,可以通过 lua-nginx 模块实现,Kong 不是用这个模块编译 Nginx,而是与 OpenRestry 一起发布,OpenRestry 已经包含了 lua-nginx-module,OpenRestry 是 Nginx 的一组扩展功能模块。
为什么是 Kong
Kong 是一个 Api Gateway,通过插件的形式提供负载均衡,日志记录,身份验证,速率限制,转换等功能。
Kong 可以很轻松扩展功能,模块化,可以运行在任何基础设施上。
术语
Route:是请求的转发规则,按照 Hostname 和 PATH,将请求转发给 Service。
Services:是多个 Upstream 的集合,是 Route 的转发目标。
Consumer:是 API 的用户,里面记录用户的一些信息。
Plugin:是插件,plugin 可以是全局的,绑定到 Service,绑定到 Router,绑定到 Consumer。
Certificate:是 https 证书。
Sni:是域名与 Certificate 的绑定,指定了一个域名对应的 https 证书。
Upstream:是负载均衡策略。
Target:是最终处理请求的 Backend 服务。
特性
- 动态负载均衡
- 基于散列的负载均衡
- 断路器
- 健康检查
- Websockets
- OAuth2.0
- 日志记录
安全性
Syslog
监控
转发代理
认证
速率限制
故障检测和恢复
……
更多详情参考:https://docs.konghq.com/hub/
开源 / 企业对比
架构
架构图
1.1 版本以后支持无 db 模式
执行流程
加入 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…: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
:
8444ssl
pg_host
=10.20
.
1.190pg_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
使用
01upstream
02target
03service
04routers
05 验证
06 插件
1.Base-auth
创建 consumer
创建 Basic-auth-credential
服务开启 Basic-auth
验证
未加用户信息,没权限,效果如下:
加入用户信息后,效果如下:
集成
01Dns 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/faizalprib…
02Agent 轮询
1. 架构图
agent 负责监听注册中心,动态调用 kong admin API 创建 upstream、target、service、router 等资源。
用户通过 boms 平台调用 admin API 修改 router 信息,实现服务转发功能,在此数据基础之上在启用插件,丰富功能。
开发
01 命令行
https://docs.konghq.com/1.0.x…
02Admin API
https://docs.konghq.com/1.0.x…
例如:
03 插件开发
https://docs.konghq.com/1.0.x… 插件开发工具包。
参考
https://docs.konghq.com Kong 官方文档
https://docs.konghq.com/hub/k… 插件文档
https://www.lijiaocn.com/%E6%… dns-srv 详解
https://github.com/faizalprib…
https://github.com/YeautyYE/n…
https://github.com/quancheng-…