Kong的基本用法

Kong的基本用法

十一月 12, 2019

基本概念

  • Service: 最终转发到的服务地址
  • Routes: 路由规则设置(依据不同的Route规则,转发到不同的Service)
  • Consumers: 消费者(实际上就是用户)
  • Plugins: 各种即插即用的插件(例如ACL,Auth,Log等等…)
  • Upstreams: 用来做Load Banlance的

Service

官方文档:
Create Service
我们看下里面几个重要的参数:

  • name: 服务名
  • retries: 失败重试次数
  • protocol: 该服务支持http还是https,默认http
  • url: 服务地址
  • read_timeout: 读取服务的超时时间

下来我们通过konga来设置一下看看:
Server-Detail设置
Server-Detail设置
通过上面的图,我们可以看到,实际上就是设置了一个service,指向一个后端的服务,读取超时时间为1s,重试5次。

Route

官方文档:
Create Route
参数说明:

  • name: 路由名称
  • protocol: 该服务支持http还是https,还是都支持。 [“http”,”https”]
  • methods: http方法
  • hosts: 域名
  • paths: 路由规则
  • strip_path: 转发到服务上,是否要截取调path
  • service_id: 服务id
    Route-Detail设置
    Route-Detail设置

我们设置了path为/server1的get请求规则,并且转发后路由是不截取的。
下面我们来看下service的代码:

const express = require('express');
const app = express()
const port = 3000

app.get('/server1/hello', (req, res) => res.send("Hello Server1"));

app.get('/server1/timeout',(req,res)=>{console.log(1)})

app.listen(port, () => console.log(`Server1 listening on port ${port}`))

请求网关试试:

demo1

再来看个请求,我们看下超时和重试:
demo2
我们发现由于服务端在1s内一直没有返回数据,所以网关重试了5次,最后返回超时。完全符合我们当时设计的逻辑

Consumer

Create Consumer

  • username: 用户名
  • custom_id: 用户id(唯一标识,可以存实际数据里面的id)
    demo3

Plugins

Kong的插件设计十分灵活,即插即用。并且它可以针对service,route也可以针对consumer。
Create Plugins
下来我们来创建一个针对service的basic auth认证插件。
demo4
然后我们到刚才新建的用户那里创建credentials用于进行basic认证
demo4
我们再来访问下前面的接口
demo4
发现现在需要登录认证了

Upstreams

demo5
实际上target就是要负载的服务器地址。
接着就是创建个service,host指向刚才创建的upstreams。
demo5
最后创建route指向这个service。
demo5
代码:

// server1
app.get('/lb',(req,res)=> res.send('lb1'))

// server2
app.get('/lb',(req,res)=> res.send('lb2'))

结果:
demo5
上图的返回值会返回lb1或者lb2