docker下安装kong和konga以及简单使用
kong是什么
Kong是可扩展的开源 API层 (也称为API网关或API中间件)。Kong在任何RESTful API之前运行,并通过Plugins扩展,
Plugins提供了核心平台之外的其他功能和服务。
使用kong的好处
可扩展:Kong只需添加更多机器即可轻松地水平扩展,这意味着您的平台几乎可以处理任何负载,同时保持较低的延迟。
模块化:Kong可以通过添加新的插件来扩展,这些插件可以通过RESTful Admin API轻松配置。
可在任何基础架构上运行:Kong可在任何地方运行。您可以将Kong部署在云或本地环境中,包括单个或多个数据中心设置,以及公共,私有或仅邀请API。
KONG以及KONGA的安装
由于本地安装比较麻烦,这里最好使用docker进行安装
安装请点击:https://blog.csdn.net/qism007/article/details/89521454
需要注意的是: 配置里面的DB_HOST是 容器的Gateway 千万不要写成了 ipaddress 以及konga的初始化的时候 如果不成功的话 试试下面这个
docker run --rm pantsel/konga:latest -c prepare -a postgres -u postgresql://konga:konga@{容器Gateway}/konga
上面的三个konga 分别是 用户名、密码和database 里面得ip地址是 运行 docker inspect kong-database 后得 Gateway 得地址
安装完成之后
试着访问:
linux访问: curl -i http://localhost:8001/
谷歌访问: http:// {ip} :8001/
需要注意的是:
安装的时候如果没有开放端口 0.0.0.0:8001,那么浏览器上是无法访问
访问成功的话,会拿到一大堆字符串,,说明kong已经安装完成、 但是没有格式化
如果需要格式化的话 可以使用linux的一个jq插件 这里不在赘述
konga
运行之后在浏览器访问:http://ip:1337/
然后注册用户 输入kong节点的连接地址 一个konga可以管理多个kong的节点
界面如下:
KONG的基本使用
一:反向代理
-
配置服务
$ curl -i -X POST \ --url http://localhost:8001/services/ \ --data 'name=example-service' \ --data 'url=http://www.baidu.com/'
通过post请求添加一个服务(service) 成功的话会收到返回码 201
-
为服务匹配路线route
$ curl -i -X POST \ --url http://localhost:8001/services/example-service/routes \ --data 'hosts[]=example.com'
指定了服务名称以及标头
-
测试访问
前提是需要在本机的host文件中(c:\windows\system32\drivers\etc) 添加ip与域名的映射 访问地址:http://example.com:8000/
二: 负载均衡
-
准备 :在几台不同的tomcat下部署三个不同的html文件(其实跟nginx的配置差不多只不过写法不同而已)
#首先创建upstream curl -X POST http://{ip}:8001/upstreams \ --data "name=address.v1.service" #为upstream添加第一个目标对象(target) curl -X POST http://{ip}:8001/upstreams/address.v1.service/targets \ --data "target={ip}:9999" \ --data "weight=100" #为upstream添加第二个目标对象(target) curl -X POST http://{ip}:8001/upstreams/address.v1.service/targets \ --data "target={ip}:8888" \ --data "weight=50" #创建一个针对上游的服务 指定上游(upstream)的主机名 指定path: ip+端口后的访问地址 curl -X POST http://{ip}:8001/services/ \ --data "name=address-service" \ --data "host=address.v1.service" \ --data "path=/index.html" #创建路由routes curl -X POST http://{ip}:8001/services/address-service/routes/ \ --data "hosts[]=address.mydomain.com" #最后进行访问 address.mydomain.com:8080 就可以进行负载均衡了
三: kong插件的基本使用
-
速率限制: rate-limiting 防止用户频繁操作
#为每个请求添加速率限制 curl -i -X POST http://localhost:8001/plugins \ --data name=rate-limiting \ --data config.minute=5 \ --data config.policy=local # config.minute 每分钟请求的次数 config.hour:每小时请求的次数 config.policy 限制策略:计数器存储在本地节点上 # 当超过请求次数之后 就不能访问了 curl -X POST http://localhost:8001/services/example_service/plugins \ --data "name=rate-limiting" \ --data "config.minute=5" \ --data "config.hour=10000" \ --data "config.policy=local"
-
代理缓存 proxy-cache 提高访问速度
#cache_ttl 缓存实体的时间 config.strategy:缓存的存储方式 curl -i -X POST http://localhost:8001/services/example_service/plugins \ --data name=proxy-cache \ --data config.content_type="application/json; charset=utf-8" \ --data config.cache_ttl=300 \ --data config.strategy=memory # 验证 记下响应头 curl -i -X GET http://localhost:8000/mock/request # miss和hit :miss表示从上游获得响应 hit表示从缓存中获取 # 删除所有代理缓存 curl -i -X DELETE http://localhost:8001/proxy-cache
-
api网关验证 保证接口的安全性
#开启key-auth插件 在route上进行密钥插件配置 curl -X POST http://localhost:8001/routes/mocking/plugins \ --data name=key-auth #访问curl -i http://localhost:8000/mock 出现{"message": "No API key found in request"} 需要配置具有关联密钥的消费者 consumers #创建消费者 消费者并不是针对某一用户 而是代表某一个子系统的消费者 curl -i -X POST http://localhost:8001/consumers/ \ --data username=consumer \ --data custom_id=consumer #生成密钥 可自己指定 也可自动生成 密钥在返回结果 这一步需要记录密钥 curl -X POST http://localhost:8001/consumers/consumer/key-auth -d '' # 或者 key=密钥 curl -i -X POST http://localhost:8001/consumers/consumer/key-auth \ --data key={密钥} #验证密钥是否ok curl -i http://localhost:8000/mock/request \ -H 'apikey:{密钥}' #删除插件 curl -X DELETE http://localhost:8001/plugins/{<plugin-id>} #禁用插件 curl -X PATCH http://localhost:8001/routes/mocking/plugins/{<plugin-id>} \ --data enabled=false
-
kongAPI回传 为了保护8001端口
简单来说呢 就是为了保护8001的端口 比如在konga连接kong节点的时候 需要进行密钥的验证 否则不能连接 就是:把http:// ip:8001 作为一个api 然后其他的按照第三步( api网关验证)来
kong里面还有很多插件 感兴趣的可以去官网详细了解https://konghq.com/
konga的简单介绍
- 图解 比较简单 上面的了解了 这个就会了
konga官网: https://github.com/pantsel/konga