kong笔记——Service、Route路由功能

kong笔记 目录导航

在上两篇文章,我们主要介绍了kong的概念以及kong的部署,相信大家对kong已经有了基本认识,那么我们该如何使用它呢?

kong的功能有许多,我们一个一个来,先从kong的路由功能开始把~~~

kong的路由主要涉及到两个组件,serviceroute,接下来我们来谈谈究竟把~~~~

定义

  • service服务

    就是我们自己定义的上游服务,通过Kong匹配到相应的请求要转发的地方, Service 可以与下面的Route进行关联,一个Service可以有很多Route,匹配到的Route就会转发到Service中, 当然中间也会通过Plugin的处理,增加或者减少一些相应的Header或者其他信息。

  • route路由

    Route实体定义匹配客户端请求的规则. 每个路由都与一个服务相关联,而服务可能有多个与之相关联的路由. 每一个匹配给定路线的请求都将被提交给它的相关服务。

route和service的组合(以及它们之间的关注点分离)提供了一种强大的路由机制, 可以在Kong中定义细粒度的入口点,从而引导您的访问到不同upstream服务。

其执行流程为:

kong笔记——Service、Route路由功能_第1张图片

实战

目标:实践Kong的service和route基础配置功能,实现简单的API接口代理功能。

效果:通过kong代理www.baidu.com,使用kong的地址跳转到百度页面。

主要分为两个方式配置,分别为:

  1. konga方式;
  2. kong命令方式

如下:

konga方式

打开konga后台管理画面,打开Service

kong笔记——Service、Route路由功能_第2张图片

配置service

kong笔记——Service、Route路由功能_第3张图片

参数含义:

属性 描述
name 服务名称
retries 代理失败后重试的次数
protocol 与上游通信的协议
host 上游的主机服务
port 上游服务的端口号
path 请求上游服务的路径
connect_timeout 连接上游服务超时时间,默认为 60000 毫秒
write_timeout 将请求发送到上游服务的超时时间,默认为 60000 毫秒
read_timeout 从上游服务器读取超时时间,默认为 60000 毫秒
tags 标签
url 简写属性一次性设置 protocol、host、port 和 path。

在这里,我们只填写了name跟url字段,其他暂时均选择默认,有需求的可以自定义修改

接下来,我们来给这个service配置对应的route路由

kong笔记——Service、Route路由功能_第4张图片

添加route

kong笔记——Service、Route路由功能_第5张图片

相关参数

kong笔记——Service、Route路由功能_第6张图片

参数详情

属性 描述
name 自选 名称。
protocols 此路由应允许的协议列表。设置为[“https”]时,将通过请求升级到HTTPS来回答HTTP请求。默认为[“http”,“https”]
methods 半可选 与此Route匹配的HTTP方法列表。使用http或https协议时,必须至少设置一个hosts, paths, or methods
hosts 半可选 与此路由匹配的域名列表。使用httphttps协议时,必须至少设置一个hosts, paths, 或者 methods。使用表单编码时,符号是hosts [] = example.com&hosts [] = foo.test。使用JSON,使用Array。
paths 半可选 与此路由匹配的路径列表。使用httphttps协议时,必须至少设置一个必须至少设置一个hosts, paths, 或者 methods。使用表单编码时,符号是paths [] = / foo&paths [] = / bar。使用JSON,使用数组。
headers 半可选 一个或多个按头名索引的值列表,如果在请求中显示,将导致此路由匹配。不能使用此属性的头:应使用属性指定主机。Host``hosts
https_redirect_status_code 状态代码孔响应时,路由的所有属性匹配,除了协议,即如果请求的协议是,而不是。 如果该字段设置为 301、302、307 或 308,则由孔注入头部。接受的值是: , , , , . .违约:。HTTP``HTTPS``Location``426``301``302``307``308``426
regex_priority 自选 用于选择哪条路由解析给定请求的数字,当多条路由同时使用正则表达式匹配时。当两条路径匹配路径并具有相同的regex_priority时,将使用较旧的路径(最低的created_at)。请注意,非正则表达式路由的优先级不同(较长的非正则表达式路由在较短的路由之前匹配)。默认为0
strip_path 通过其中一条path匹配Route时,从上游请求URL中删除匹配的前缀。默认为true
path_handling 自选 在向上游发送请求时,控制服务路径、路由路径和请求路径的组合方式。请参阅上文,详细描述每个行为。接受的值是: . .违约:。"v0"``"v1"``"v0"
preserve_host 通过其中一个主机域名匹配Route时,请使用上游请求标头中的请求主机头。如果设置为false,则上游主机头将是服务主机的头。
request_buffering 是否启用请求身体缓冲。借用 HTTP 1.1,关闭带有大块传输编码的数据的服务可能有意义。违约:。true
response_buffering 是否启用响应主体缓冲。借用 HTTP 1.1,关闭带有大块传输编码的数据的服务可能有意义。违约:。true
snis 半可选 使用流路由时与此路由匹配的SNI列表。使用tcptls协议时,必须至少设置一个snissourcesdestinations
sources 半可选 使用流路由时与此路由匹配的传入连接的IP源列表。每个条目都是一个对象,其字段为“ip”(可选地为CIDR范围表示法)和/或“port”。使用tcptls协议时,必须至少设置一个snissourcesdestinations
destinations 半可选 使用流路由时,与此路由匹配的传入连接的IP目标列表。每个条目都是一个对象,其字段为“ip”(可选地为CIDR范围表示法)和/或“port”。使用tcptls协议时,必须至少设置一个snissourcesdestinations
tags 自选 与路由相关的可选字符串集,用于分组和筛选。
service 自选 此路由所关联的服务。这是Route代理流量的地方,使用表单encode。表示法是service.id = 。使用JSON,使用“service”:{“id”:“”}

通过以上的设置,kong的路由功能已经设置好了,那么我们就来测试一下吧~~~~

在浏览器输入:

http://kong服务的ip:8000/myPath

即可跳转到百度的页面

或者

在shell上输入curl http://localhost:8000/myPath

kong笔记——Service、Route路由功能_第7张图片

kong命令方式

其实引入此模块主要是为了方便这些场景

  1. 只安装了kong,没有安装可视化页面;
  2. 项目启动时,需要编写kong相关的脚本,从而需要一些命令;

步骤如下:

  • 创建service服务

    curl -i -X POST \
      --url http://localhost:8001/services/ \
      --data 'name=baidu-test' \
      --data 'url=http://www.baidu.com'
    
  • 为service添加route

    curl -i -X POST \
      --url http://localhost:8001/services/baidu-test/routes \
      --data 'name=baidu-route' \
      --data 'paths[]=/myPath'
    
  • 验证是否成功

    curl http://localhost:8000/myPath
    

然后就可以去验证了~~~~~~~

这里在科普一些我们常用的命令吧:

  • 查看kong现存的service

    curl -i -X GET \
      --url http://localhost:8001/services
    
  • 查看某个service下存在的routes

    curl -i -X GET \
      --url http://localhost:8001/services/baidu-test/routes
    
  • 更新某个service的配置

    curl -i -X PUT \
      --url http://localhost:8001/services/baidu-test \
      --data 'protocol=http' \
      --data 'host=www.javahly.com' \ 
      --data 'port=80'
    
  • 删除某个services的配置

    curl -i -X DELETE \
      --url http://localhost:8001/services/baidu-test 
    

    其余的可查看一下官方文档

    官方文档

踩坑点

  1. 在这里记录一个小坑:

    route模块下的配置:strip_path字段和path_handling字段,这两个是联动的,具体对应关系如下:

    S.PATH R.PATH R.STRIP_PATH R.PATH_HANDLING REQUEST PATH PROXIED PATH
    /s /fv0 false v0 /fv0req /s/fv0req
    /s /fv1 false v1 /fv1req /sfv1req
    /s /tv0 true v0 /tv0req /s/req
    /s /tv1 true v1 /tv1req /sreq
    /s /fv0/ false v0 /fv0/req /s/fv0/req
    /s /fv1/ false v1 /fv1/req /sfv1/req
    /s /tv0/ true v0 /tv0/req /s/req
    /s /tv1/ true v1 /tv1/req /sreq

    什么意思呢,这两个字段设置是用来决定你访问的真是路径的

    比如你的设置如下

    paths =/myPath,

    strip_path=true,

    path_handling=v0,

    你service配置的url是http://www.baidu.com;

    那么根据以上配置,你访问kong的请求地址是:http://localhost:8000/myPath/123,其真实的访问地址是:http://www.baidu.com/123

  2. 通过kong命令添加多个path路径时,是这样的:

    curl -i -X POST \
      --url http://localhost:8001/services/baidu-test/routes \
      --data 'name=baidu-route' \
      --data 'paths[]=/myPath&paths[] = /test'
    

    而不是加,的方式

最后,附加一张konga操作页面的说明图

kong笔记——Service、Route路由功能_第8张图片

你可能感兴趣的:(kong,kong,service,route)