API网关——Kong实践分享
概述
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= -p : -d postgres:9.6
02
创建用户及数据库
# 登陆
psql -U postgres -h 10.20.1.190 -p
#创建用户
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..el7.noarch.rpm
#拷贝配置
cp /etc/kong/kong.conf.default /etc/kong/kong.conf
#配置
admin_listen = 0.0.0.0:, 0.0.0.0: ssl pg_host = 10.20.1.190 pg_port = 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 : 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 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:
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
API网关——Kong实践分享的更多相关文章
- API 网关 Kong
什么是 API 网关? 所谓网关,主要作用就是连接两个不同网络的设备,而今天所讲的 API 网关是指承接和分发客户端所有请求的网关层. 为什么需要网关层?最初是单体服务时,客户端发起的所有请求都可以直 ...
- Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用
写在前面 Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下kong对比ocelot打动我的 ...
- API网关Kong系列(一)初识
最近工作需要,加上国内Kong的文章相对缺乏(搜来搜去就那么两篇文章),而且官方文档在某些demo上也有一些过时的地方,遂提笔记录下这些,希望能有帮助. 先随大流介绍下KONG(主要参考官网): 官方 ...
- API网关--Kong的实践
1. 什么是Kong 目前互联网后台架构一般是采用微服务,或者类似微服务的形式,应用的请求通常需要访问多个后台系统.如果让每一个后台系统都实现鉴权.限流.负载均衡.审计等基础功能是不合适的,通用的做法 ...
- API网关Kong系列(三)添加服务
进入之前部署好的kong-ui,默认第一次登陆需要配置kong服务的地址 进入API菜单,点击+号 按照要求填入相关信息 至此完成,可以使用诸如 https://your.domain.com:208 ...
- API网关Kong系列(二)部署
部署环境: [OS] centos 6.8(如果是centos6.5,请自行先升级到6.8,否则不支持docker) [Docker] Client version: 1.7.1 Client API ...
- API网关Kong部署和使用文档
KONG安装使用说明 系统版本:ubuntu14 1.下载安装包 $ wget https://github.com/Mashape/kong/releases/download/0.8.3/kong ...
- API网关Kong系列(四)认证配置
目前根据业务需要先介绍2种认证插件:Key Authentication 及 HMAC-SHA1 认证 Key Authentication 向API添加密钥身份验证(也称为API密钥). 然后,消 ...
- API网关Kong
官网:https://konghq.com/ 各种方式安装汇总:https://konghq.com/install/ 命令列表:https://docs.konghq.com/0.14.x/admi ...
随机推荐
- 【J2EE】十三个规范:愿天下苍生,人人如猿。
学习了J2ee后对java这个立足标准化的行为感到深深的佩服. 收买什么都不如收买人心,培养啥子都不如培养 习惯.没错,java就是在培养行业习惯,以一纸规范屹立不倒.毕竟技术什么的层出不穷,再新再前 ...
- Android入门常见问题
前言: 眼下非常多人入门用android studio,可是我觉得这是 一个不好的開始. 一个集成的软件,不用你去部署.那么你就好难去学习究竟层的东西. 以后的问题时.问题所在还是在底层,就像&quo ...
- javaproject积累——树形结构的操作
近期一直被树形结构整的非常头大,又是递归.又是循环.可是,好在我们在经历了千辛万苦后.最终弄出来了.事实上就是组织机构的常规操作,有些是我们过度设计.有些是我们想错了.而对数的逻辑读取,我们就属于想错 ...
- 怎样使用1M的内存排序100万个8位数
今天看到这篇文章.颇为震撼.感叹算法之"神通". 借助于合适的算法能够完毕看似不可能的事情. 最早这个问题是在Stack Overflow站点上面给出的(Sorting numbe ...
- Servlet的部署开发细节以及注意事项
学习servlet最困难的我感觉还是配置,一開始是非常麻烦的.为了较好的学习,一開始还是以手动开发我认为比較好,可是真的有点把握给搞晕了,尤其是部署servlet方面非常麻烦,这里做一下简单的总结,前 ...
- Json——使用Json jar包实现Json字符串与Java对象或集合之间的互相转换
总结一下利用Json相关jar包实现Java对象和集合与Json字符串之间的互相转换: 1.创建的User类: package com.ghj.packageofdomain; public clas ...
- postgres启动过程分析
今天来学习一下pg启动的过程. pg的启动命令./bin/postgres -D path/to/data. 1.主体监控进程 postmaster进程进入无限循环,等待客户端请求并为之提供请求的服务 ...
- PHP-MySQL,PHP-MySQLi,PDO的差异
PHP-MySQL是PHP操作MySQL数据库最原始的Extension ,PHP-MySQLi的i代表Improvement ,提供了更加高级的功能,就Extension而言,本身也增加了安全性.而 ...
- DSL 如何工作
DSL 如何工作 http://computer.howstuffworks.com/dsl.htm 当你连接到因特网时,你可能是通过一个调制解调器 (modem),或办公室的局域网,或者一个电缆调制 ...
- 翻译:A Tutorial on the Device Tree (Zynq) -- Part III
A Tutorial on the Device Tree (Zynq) -- Part III 定义外设 可能你读本文是为了给你的设备写一个Linux驱动,在这方面要推荐著名的<Linux D ...