kong笔记——Service、Route路由功能
在上两篇文章,我们主要介绍了kong的概念以及kong的部署,相信大家对kong已经有了基本认识,那么我们该如何使用它呢?定义service服务就是我们自己定义的上游服务,通过Kong匹配到相应的请求要转发的地方, Service 可以与下面的Route进行关联,一个Service可以有很多Route,匹配到的Route就会转发到Service中, 当然中间也会通过Plugin的处理,增加或者减少
在上两篇文章,我们主要介绍了kong的概念以及kong的部署,相信大家对kong已经有了基本认识,那么我们该如何使用它呢?
kong的功能有许多,我们一个一个来,先从kong的路由
功能开始把~~~
kong的路由主要涉及到两个组件,service
和route
,接下来我们来谈谈究竟把~~~~
定义
-
service服务
就是我们自己定义的上游服务,通过Kong匹配到相应的请求要转发的地方, Service 可以与下面的Route进行关联,一个Service可以有很多Route,匹配到的Route就会转发到Service中, 当然中间也会通过Plugin的处理,增加或者减少一些相应的Header或者其他信息。
-
route路由
Route实体定义匹配客户端请求的规则. 每个路由都与一个服务相关联,而服务可能有多个与之相关联的路由. 每一个匹配给定路线的请求都将被提交给它的相关服务。
route和service的组合(以及它们之间的关注点分离)提供了一种强大的路由机制, 可以在Kong中定义细粒度的入口点,从而引导您的访问到不同upstream服务。
其执行流程为:
实战
目标:实践Kong的service和route基础配置功能,实现简单的API接口代理功能。
效果:通过kong代理www.baidu.com,使用kong的地址跳转到百度页面。
主要分为两个方式配置,分别为:
- konga方式;
- kong命令方式
如下:
konga方式
打开konga后台管理画面,打开Service
配置service
参数含义:
属性 | 描述 |
---|---|
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路由
添加route
相关参数
参数详情
属性 | 描述 |
---|---|
name 自选 | 名称。 |
protocols | 此路由应允许的协议列表。设置为[“https”] 时,将通过请求升级到HTTPS来回答HTTP请求。默认为[“http”,“https”] 。 |
methods 半可选 | 与此Route匹配的HTTP方法列表。使用http或https协议时,必须至少设置一个hosts , paths , or methods 。 |
hosts 半可选 | 与此路由匹配的域名列表。使用http 或https 协议时,必须至少设置一个hosts , paths , 或者 methods 。使用表单编码时,符号是hosts [] = example.com&hosts [] = foo.test 。使用JSON,使用Array。 |
paths 半可选 | 与此路由匹配的路径列表。使用http 或https 协议时,必须至少设置一个必须至少设置一个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列表。使用tcp 或tls 协议时,必须至少设置一个snis ,sources 或destinations 。 |
sources 半可选 | 使用流路由时与此路由匹配的传入连接的IP源列表。每个条目都是一个对象,其字段为“ip”(可选地为CIDR范围表示法)和/或“port”。使用tcp 或tls 协议时,必须至少设置一个snis ,sources 或destinations 。 |
destinations 半可选 | 使用流路由时,与此路由匹配的传入连接的IP目标列表。每个条目都是一个对象,其字段为“ip”(可选地为CIDR范围表示法)和/或“port”。使用tcp 或tls 协议时,必须至少设置一个snis ,sources 或destinations 。 |
tags 自选 | 与路由相关的可选字符串集,用于分组和筛选。 |
service 自选 | 此路由所关联的服务。这是Route代理流量的地方,使用表单encode。表示法是service.id = <service_id> 。使用JSON,使用“service”:{“id”:“<service_id>”} 。 |
通过以上的设置,kong的路由功能已经设置好了,那么我们就来测试一下吧~~~~
在浏览器输入:
http://kong服务的ip:8000/myPath
即可跳转到百度的页面
或者
在shell上输入curl http://localhost:8000/myPath
kong命令方式
其实引入此模块主要是为了方便这些场景
- 只安装了kong,没有安装可视化页面;
- 项目启动时,需要编写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
其余的可查看一下官方文档
踩坑点
-
在这里记录一个小坑:
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
-
通过kong命令添加多个path路径时,是这样的:
curl -i -X POST \ --url http://localhost:8001/services/baidu-test/routes \ --data 'name=baidu-route' \ --data 'paths[]=/myPath&paths[] = /test'
而不是加
,
的方式
最后,附加一张konga操作页面的说明图
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)