kong 和konga网关部署及使用

Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。

Kong主要有三个组件:

Kong Server :基于nginx的服务器,用来接收API请求。

Apache Cassandra/PostgreSQL :用来存储操作数据。

Kong dashboard:官方推荐UI管理工具,当然,也可以使用 restfull 方式 管理admin api。

Kong采用插件机制进行功能定制,插件集(可以是0或N个)在API请求响应循环的生命周期中被执行。插件使用Lua编写,目前已有几个基础功能:HTTP基本认证、密钥认证、CORS(Cross-Origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及Nginx监控。

1.docker 安装kong

docker pull kong:3.0

2.docker 下载postgres

docker network create kong-net    ##创建网络
docker pull postgres:9.6

注意:postgres的版本最好是9.6.x以下的。

3.启动postgres

docker run --privileged=true --name kong-database -e "POSTGRES_USER=kong" -e POSTGRES_PASSWORD=kong  --network=kong-net -p 5432:5432 -v /my/local/path:/var/lib/postgresql/data -d postgres:9.6

然后使用docker ps查看是否启动成功

4.启动Kong

4.1 准备数据库

docker run --rm --network=kong-net  -e "KONG_LOG_LEVEL=debug" -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database"  -e "KONG_PG_PASSWORD=kong" -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database"  kong:3.0 kong migrations bootstrap

4.2 启动kong

docker run -d --name kong --network=kong-net   -e "KONG_DATABASE=postgres"    -e "KONG_PG_HOST=kong-database"     -e "KONG_PG_PORT=5432" -e "KONG_PG_PASSWORD=kong"    -e "KONG_PG_DATABASE=kong"     -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database"  -e "KONG_PROXY_ACCESS_LOG=/dev/stdout"   -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout"  -e "KONG_PROXY_ERROR_LOG=/dev/stderr"  -e "KONG_ADMIN_ERROR_LOG=/dev/stderr"  -e "KONG_ADMIN_LISTEN=0.0.0.0:8001"  -e "KONG_ADMIN_LISTEN_SSL=0.0.0.0:8444"  -p 8000:8000   -p 8443:8443    -p 8001:8001     -p 8444:8444     kong:3.0
 
8000:对应的http请求代理端口
8001:  http接口的管理端口
8443:  对应的https请求的代理端口
8444:  https接口的管理端口

然后根据docker ps命令查看kong是否启动成功。

5.验证是否成功启动

 curl -i http://localhost:8001

6.安装Konga可视化

docker pull pantsel/konga
 
docker run  -d -p 1337:1337 \
        --network kong-net \
        --name konga \
        -e "DB_ADAPTER=postgres" \
        -e "DB_URI=postgresql://kong:kong@kong-database/kong" \
        pantsel/konga

konga默认端口是1337,这里也需要对外暴露

启动成功之后,输入http://ip:1337/register,检查konga是否安装成功

首先注册一个账号。

  1. Kong应用
    7.1创建连接点

默认的端口是8001当然可以在启动kong的时候自己创建映射端口。

7.2 创建Upstreams

输入name,然后提交

点击刚添加的upstream点击DETAILS添加targets,然后点击ADD TARGET输入target(ip+port)后点击SUBMIT TARGET即可,ip为本地电脑ip保证kong容器内可访问,端口为本地服务端口,这个地方可以理解为你的springboot服务的ip+端口




7.3 配置对应的services和routes

输入name、host(可以与前面Upstreams的name保持一致)

protocol(协议类型,这里是http)

port这里是8000,kong启动之后,http的代理端口是8000

service保存后,点击service name进入详情页面,然后点击Routes添加路由规则

点击ADD ROUTE输入name、paths(输入转发规则需按回车才生效),Strip Path(是否把匹配成功的paths删除后在转发后端服务器.),Preserve Host(转发后端是否带host参数,默认不带,Protocols 只保留http即可,最后点击SUBMIT ROUTE



8.测试网关是否可用

配置网关前

配置网关后

9.命令行创建upstream、target、service、route

9.1配置 upstream

curl -X POST http://localhost:8001/upstreams --data "name=helloUpstream"

9.2 配置 target

curl -X POST http://localhost:8001/upstreams/helloUpstream/targets --data "target=后端微服务ip:端口" --data "weight=100"

9.3 配置service

curl -X POST http://localhost:8001/services --data "name=hello" --data "host=helloUpstream" --data "port=8000" --data "protocol=http"

9.4 配置route

以service id作为标识
curl -X POST http://localhost:8001/routes --data "paths[]=/hello" --data "service.id=3650cc19-f314-4b87-a7e4-b07c63ad434e"
也可以后面加参数命名
curl -X POST http://localhost:8001/routes --data "paths[]=/hello" --data "service.id=3650cc19-f314-4b87-a7e4-b07c63ad434e" --data "name=dsds"
相关推荐
爬山算法21 分钟前
Maven(28)如何使用Maven进行依赖解析?
java·maven
2401_857439691 小时前
SpringBoot框架在资产管理中的应用
java·spring boot·后端
怀旧6661 小时前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节
李老头探索1 小时前
Java面试之Java中实现多线程有几种方法
java·开发语言·面试
芒果披萨1 小时前
Filter和Listener
java·filter
qq_4924484461 小时前
Java实现App自动化(Appium Demo)
java
阿华的代码王国1 小时前
【SpringMVC】——Cookie和Session机制
java·后端·spring·cookie·session·会话
找了一圈尾巴2 小时前
前后端交互通用排序策略
java·交互
哎呦没4 小时前
SpringBoot框架下的资产管理自动化
java·spring boot·后端
m0_571957586 小时前
Java | Leetcode Java题解之第543题二叉树的直径
java·leetcode·题解