Kong与Konga使用

本篇是关于API网关Kong的基本命令行使用以及UI管理界面Konga的基本使用。
前半部分主要使用CLI进行kong设定,实际使用可以直接使用konga在UI界面进行设定。前半部分可以跳过,直接看konga的基本使用

查看节点状态

curl http://localhost:8001/status

配置实例

创建Service
curl -i -k -X POST --url http://localhost:8001/services/ --data 'name=baidu-service' --data 'url=https://www.baidu.com/'
创建route
curl -ik -X POST --url http://localhost:8001/services/baidu-service/routes --data 'hosts[]=con-baidu.com' --data 'paths[]=/api/baidu'
连接测试
curl -k http://localhost:8000/api/baidu --header 'Host: con-baidu.com'

以上测试没有做任何鉴权处理,任何来的请求都会被响应。接下来会做认证

插件

JWT

JWT插件目的是保护API只能被授信用户访问,未授信用户将返回未授权信息。

  • 取得route的id
curl -i -X GET http://localhost:8001/services/baidu-service/routes
  • 返回结果
{"next":null,"data":[{"id":"13cda1d6-3b8a-4e67-9103-6e4843e8d469","tags":null,"updated_at":1575548207,"destinations":null,"headers":null,"protocols":["http","https"],"created_at":1575548207,"snis":null,"service":{"id":"4b924b6f-d1f8-475b-93b7-a2ae396c998e"},"name":null,"preserve_host":false,"regex_priority":0,"strip_path":true,"sources":null,"paths":["\/api\/baidu"],"https_redirect_status_code":426,"hosts":["con-baidu.com"],"methods":null}]}

其中id对应的结果“13cda1d6-3b8a-4e67-9103-6e4843e8d469”就是我们需要的route id

  • 在route上创建plugin
curl -X POST http://localhost:8001/routes/13cda1d6-3b8a-4e67-9103-6e4843e8d469/plugins --data "name=jwt"

其中“13cda1d6-3b8a-4e67-9103-6e4843e8d469”是之前建立的route的id

  • 再次连接测试
curl -k http://localhost:8000/api/baidu --header 'Host: con-baidu.com'

response

{"message":"Unauthorized"}

所以JWT已经生效

consumer

  • 创建用户
curl -i -X POST --url http://localhost:8001/consumers/  --data "username=binTester"
  • 查看
curl -i -X GET --url http://localhost:8001/consumers
  • 返回结果
HTTP/1.1 200 OK
Date: Thu, 05 Dec 2019 13:02:03 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Access-Control-Allow-Origin: *
Server: kong/1.4.0
Content-Length: 144
X-Kong-Admin-Latency: 1

{
"next":null,
"data":[{
        "custom_id":null,
        "created_at":1575550749,
        "id":"aafaa4e0-2e39-45cb-83fd-6406dca211b1",
        "tags":null,
        "username":"binTester"}]}

生成JWT凭证

  • 命令

    curl -i -X POST --url http://localhost:8001/consumers/binTester/jwt --header "Content-Type: application/x-www-form-urlencoded"
  • 确认

    curl -i -X GET --url http://localhost:8001/consumers/binTester/jwt
  • 返回结果

    {
    "next":null,
    "data":[{
    "rsa_public_key":null,
    "created_at":1575551140,
    "consumer":{
        "id":"aafaa4e0-2e39-45cb-83fd-6406dca211b1"
    },
    "id":"908cb301-bfdf-4297-b858-de5503a564a8",
    "tags":null,
    "key":"ZGcfirIUbEkD6TRiEmScGjHI2UB6Fp5F",
    "secret":"vXKwnBGkqfhkhdOPLPSMeLKjah422GH7",
    "algorithm":"HS256"
    }
  • 确认测试

访问 https://jwt.io/ 生成jwt的凭证信息
屏幕快照 2019-12-05 下午9.24.40.png

将encoded的内容copy,使用postman进行测试
屏幕快照 2019-12-05 下午9.26.44.png

header中添加Host内容
屏幕快照 2019-12-05 下午9.27.45.png

发送send收到baidu的回复

ACL

ACL插件可以对授信用户进行分组访问授权API服务。例如userA加入VIP group,userA就可以访问VIP的商品信息API服务。 userB只是普通group,所以userB访问VIP商品信息API接口就会提示不能访问这个服务(You cannot consume this service)

  • 在定义好的route上启用ACL插件,指定白名单
curl -i -X POST --url http://172.17.84.204:8001/routes/13cda1d6-3b8a-4e67-9103-6e4843e8d469/plugins --data "name=acl"  --data "config.whitelist=allow-normal-group"
  • 确认测试

使用postman将之前的请求再次发送,返回结果"You cannot consume this service"

屏幕快照 2019-12-06 下午3.45.57.png

  • 添加用户到group
curl -i -X POST --url http://172.17.84.204:8001/consumers/binTester/acls --data "group=allow-normal-group"

再次使用postman将之前的请求发送,正确返回response

key-auth

key-auth的plugin可以应用在service或route上
最简单的实际应用场景,对某个服务设置key-auth,只有获得了词key-value认证的请求才能够被访问,其他无此认证信息的请求都会被拒绝。防止服务被盗刷

konga安装使用

  • pgsql提前准备
create user konga with password 'konga123';
create database konga with encoding='UTF8' owner konga;
  • 运行docker
docker run -p 1337:1337 --name konga -e "NODE_ENV=production" -e "DB_ADAPTER=postgres" -e "DB_HOST=172.17.84.204" -e "DB_USER=konga" -e "DB_PASSWORD=konga123" -e "DB_DATABASE=konga" pantsel/konga
  • 注册

屏幕快照 2019-12-06 下午5.14.15.png

  • 设置

屏幕快照 2019-12-06 下午5.15.06.png

  • 生成service

屏幕快照 2019-12-09 下午4.47.07.png

  • 生成route

屏幕快照 2019-12-09 下午5.06.00.png
Kong与Konga使用_第1张图片

  • postman请求测试

屏幕快照 2019-12-09 下午5.08.29.png

可以看到我们请求kong的/key/authtest实际调用的是mockbin.org/doc

key-auth

keyauth可以用在service上也可以用在route上。
本例我们用在上面我们建立的route上。
屏幕快照 2019-12-09 下午5.59.53.png
Kong与Konga使用_第2张图片
Kong与Konga使用_第3张图片
Kong与Konga使用_第4张图片
Kong与Konga使用_第5张图片
Kong与Konga使用_第6张图片
接下来生成consumer->Credentials->API KEYS->CREATE API KEY输入键值

现在我们使用之情的请求访问服务时会失败,提示"No API key found in request"
屏幕快照 2019-12-09 下午6.08.15.png

接下来设定API key
屏幕快照 2019-12-09 下午6.24.22.png

可正常访问

basic auth

在service或route上创建basic auth
屏幕快照 2019-12-09 下午7.43.26.png

屏幕快照 2019-12-09 下午7.44.39.png

consumer中新建credentials
屏幕快照 2019-12-09 下午7.45.56.png
Kong与Konga使用_第7张图片

postman测试
屏幕快照 2019-12-09 下午7.58.44.png
Kong与Konga使用_第8张图片

IP地址限定

在service或route上添加IP restriction的plugin
屏幕快照 2019-12-09 下午8.07.58.png

white list设置一个非postman运行主机的ip
屏幕快照 2019-12-09 下午8.20.23.png

屏幕快照 2019-12-10 下午2.20.35.pngpostman访问失败提示"Your IP address is not allowed"
Kong与Konga使用_第9张图片

Bot detection

对service或route创建 bot-detection可以根据User-agent对请求分类到黑名单或白名单。

屏幕快照 2019-12-10 下午2.13.04.png

屏幕快照 2019-12-10 下午2.15.38.png

将User-Agent为kong-botdetection加入黑名单
屏幕快照 2019-12-10 下午2.16.54.png

在postman中将请求的User-Agent设为kong-botdetection发送请求可以看到返回Fobidden消息
屏幕快照 2019-12-10 下午2.20.35.png

rate limiting

可以对service或route通过添加Rate Limiting的plugin进行流量控制。流量为秒/分/时/日/月/年的访问次数。

屏幕快照 2019-12-10 下午2.25.27.png

设置1次/秒
屏幕快照 2019-12-10 下午2.34.45.png

超过这个频率会返回API rate limit exceeded错误信息
屏幕快照 2019-12-10 下午2.38.06.png

request size limiting

对请求的payload size进行设定。设定是以M为单位的
屏幕快照 2019-12-10 下午3.01.08.png

屏幕快照 2019-12-10 下午3.01.40.png

使用postman发送大雨1M的请求会返回Request size limit exceeded
屏幕快照 2019-12-10 下午3.02.16.png

你可能感兴趣的:(kong)