API网关
首发于API网关

浅谈网关 kong 中的服务(service)与路由(route)

  1. 新建服务


添加名为 runoob,后端对应地址为 runoob.com得服务

curl -i -X POST http://localhost:8001/services/ \
> -d 'name=runoob' \
> -d 'url=http://www.runoob.com'

{
"host":"www.runoob.com",
"created_at":1523341077,
"connect_timeout":60000,
"id":"b60cb914-bcc5-4851-bec3-66b44a2695d6",
"protocol":"http",
"name":"runoob",
"read_timeout":60000,
"port":80,
"path":null,
"updated_at":1523341077,
"retries":5,
"write_timeout":60000
}

2. 新建路由


在步骤1建立的服务中新建路由信息


curl -i -X POST http://localhost:8001/routes/ \
> -d 'hosts[]=html.com' \
> -d 'paths[]=/html' \
> -d 'service.id=b60cb914-bcc5-4851-bec3-66b44a2695d6'
  
{
  "created_at":1523342011,
  "strip_path":true,
  "hosts":[
    "html.com"
  ],
  "preserve_host":false,
  "regex_priority":0,
  "updated_at":1523342011,
  "paths":[
    "/html"
  ],
  "service":{
    "id":"b60cb914-bcc5-4851-bec3-66b44a2695d6"
  },
  "methods":null,
  "protocols":[
    "http",
    "https"
  ],
  "id":"0b6377fb-0892-4381-9578-5e2f52e65ff4"
}

3. 请求路由

curl -i -X GET http://localhost:8000/html --header 'Host: html.com'

返回的就是服务中的 url 地址对应的数据,kong是一个透明代理

4. 基于服务创建一个不传host的路由

curl -i -X POST http://localhost:8001/routes \
> -d 'paths[]=/css' \
> -d 'service.id=b60cb914-bcc5-4851-bec3-66b44a2695d6'

{
  "created_at":1523343658,
  "strip_path":true,
  "hosts":null,
  "preserve_host":false,
  "regex_priority":0,
  "updated_at":1523343658,
  "paths":[
    "/css"
  ],
  "service":{
    "id":"b60cb914-bcc5-4851-bec3-66b44a2695d6"
  },
  "methods":null,
  "protocols":[
    "http",
    "https"
  ],
  "id":"e783fbac-0892-4b51-a696-ee1199f4fcf2"
}


5. 访问步骤4中定义的路由

curl -i -X GET http://localhost:8000/css

和步骤3中返回的数据一样,均为服务 runoob像后端地址 www.runoob.com 请求回来的数据


6. 总结

  • 一个服务就对应与后端一个API。
  • 路由则是定义对这个服务暴露给客户端的请求路径及请求方式。服务与路由是1对多的关系,一个服务可以以多种路由方式暴露给前端访问,该服务对应的上游服务就是1个API。
  • 在路由定义 hosts参数的时候,请求头必须带上对应的Host请求头参数,未定义hosts参数的时候,就能通过步骤5的方式直接请求地址即可访问。

编辑于 2018-04-10

文章被以下专栏收录