openrestry(nginx+luajit) + webadmin

https://konghq.com/    https://docs.konghq.com/
https://github.com/pantsel/konga
https://github.com/kevholditch/gokong

默认他们都存储在db;service与route是最常用的两个概念!

client --> route --> service --> {targets... + upstreams{targets...}...}

  • route: nginx中的location; 一个service可以有多个route; name + protos + methods + hosts + paths
  • service: nginx中的server(虚拟服务体,对应了upstream或target). name + proto + host:port/path + retries + timeout + tags
  • upstream: nginx中的upstream(主要用于实现负载); 名字 + 负载方式 + 健康检测 + tags
  • target: nginx中的upstream中的server; ip:port + weight + tags
  • consumer: downstream client,使用service的用户;可为consumer添加插件,从而自定义其请求的行为.

无db部署

kong conf init # kong.yml

kong.conf: DATABASE=off declarative_config=/path/to/kong.yml

port

8000: listen http request 8443: listen https 8001: admin 8444: https admin

install

dnf install pcre-devel pcre
# 注意:如果监听的地址是127或0.0.0.0或localhost,则外面是不能够访问到的,需改为本机当前使用IP!
# kong会自动到/etc/kong.conf或/etc/kong/kong.conf寻找配置文件,包括/usr/local/kong/nginx-kong.conf都不要修改,都是自动生成的!
vim /etc/kong/kong.conf
kong migrations bootstrap; kong check; kong reload --vv;  # kong start会build出nginx配置文件,并启动nginx!
systemctl start kong;

install konga

docker pull pantsel/konga
# 注意: production模式下无法进行数据库的migration!需要去掉该配置.
docker run -itp 1337:1337 -e "TOKEN_SECRET=gda" -e "DB_ADAPTER=postgres"
   -e "DB_HOST=192.168.0.174" -e "DB_PORT=5432" -e "DB_USER=kong" -e "DB_PASSWORD=kong" -e "DB_DATABASE=kong"
   -e "NODE_ENV=production" --name konga pantsel/konga
# kong-dashboard不好用: docker run -it -p 8080:8080 pgbi/kong-dashboard start --kong-url http://192.168.0.179:8001

admin api

GET /services?tags=tag1,tag2  # tag==tag1 && tag==tag2; 注意,最多五个!不能与或混用!
GET /services?tags=tag1/tag2  # tag==tag1 || tag==tag2
  • 创建一个service成功后会返回一个id
  • 创建service时(POST|PUT),指定的name如果已经存在了,则会创建失败!
  • 修改service时(PATCH|PUT),可以改名字
  • 删除service时(DELETE)可以按名字或id来.path中必需指明servicename或id,body中的name或id也必需指明,但不匹配时也能够删除.删除ok返回204!