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的凭证信息
Kong与Konga使用_第1张图片

将encoded的内容copy,使用postman进行测试
Kong与Konga使用_第2张图片

header中添加Host内容
Kong与Konga使用_第3张图片

发送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"

Kong与Konga使用_第4张图片

  • 添加用户到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

Kong与Konga使用_第5张图片

  • 生成route

Kong与Konga使用_第6张图片

  • postman请求测试

Kong与Konga使用_第7张图片

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

key-auth

keyauth可以用在service上也可以用在route上。
本例我们用在上面我们建立的route上。
Kong与Konga使用_第8张图片
接下来生成consumer->Credentials->API KEYS->CREATE API KEY输入键值

现在我们使用之情的请求访问服务时会失败,提示"No API key found in request"
Kong与Konga使用_第9张图片

接下来设定API key
Kong与Konga使用_第10张图片

可正常访问

basic auth

在service或route上创建basic auth
Kong与Konga使用_第11张图片

Kong与Konga使用_第12张图片

consumer中新建credentials
Kong与Konga使用_第13张图片

postman测试
Kong与Konga使用_第14张图片

IP地址限定

在service或route上添加IP restriction的plugin
Kong与Konga使用_第15张图片

white list设置一个非postman运行主机的ip
Kong与Konga使用_第16张图片

Kong与Konga使用_第17张图片

Bot detection

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

Kong与Konga使用_第18张图片

Kong与Konga使用_第19张图片

将User-Agent为kong-botdetection加入黑名单
Kong与Konga使用_第20张图片

在postman中将请求的User-Agent设为kong-botdetection发送请求可以看到返回Fobidden消息
Kong与Konga使用_第21张图片

rate limiting

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

Kong与Konga使用_第22张图片

设置1次/秒
Kong与Konga使用_第23张图片

超过这个频率会返回API rate limit exceeded错误信息
Kong与Konga使用_第24张图片

request size limiting

对请求的payload size进行设定。设定是以M为单位的
Kong与Konga使用_第25张图片

Kong与Konga使用_第26张图片

使用postman发送大雨1M的请求会返回Request size limit exceeded
Kong与Konga使用_第27张图片

你可能感兴趣的:(kong)