导语

腾讯云微服务平台(Tencent Service Framework,TSF)是一个围绕着应用和微服务的 PaaS 平台,提供了应用全生命周期管理、数据化运营、立体化监控和服务治理等功能。其中,API 对外管理是微服务管理中非常重要的一环,涉及多种应用场景。本次实践主要用来验证如何通过 TSF 微服务网关实现对微服务中 API 进行访问、限流、鉴权、重定向等对外管理的控制。

作者简介

王维
多年开发架构经验,熟悉电商、支付业务。熟悉微服务架构的开发与落地。目前主要聚焦于微服务、消息队列及周边中间件。

一、背景概述

在腾讯云微服务平台 TSF 中部署好微服务之后,最终需要提供给消费者进行请求调用。虽然可以将众多微服务直接提供给消费者调用,但是会带来诸多不便与风险。比如:

1. 访问域名、IP、端口众多,导致消费者进行众多配置,容易产生配置错误的情况;

2.无法统一进行限流、鉴权,导致集中治理能力的缺失;

3. 直接将真实的API完整路径对外暴露,增加风险。
        腾讯云 TSF 提供了微服务网关能力来解决上述问题。微服务网关封装了限流、密钥对鉴权、第三方鉴权、设置访问标签等功能,方便用户在界面上管理微服务 API,并做好API的对外管理。

二、环境准备

本次实践采用虚拟机部署模式。

本次实践采用 postman 工具配合验证。

本次实践需要准备以下应用:

1. consumer-demo:服务消费者,普通应用。

2. provider-demo:服务提供者,普通应用。

3. gateway:微服务网关,微服务网关应用。

其中 provider-demo 需要部署两个版本,以便验证通过 Tag 进行路由的功能。示例源码可通过官方 demo 获取,github地址如下:

https://github.com/tencentyun/tsf-simple-demo

(一)新建应用

1.单击【应用中心】下【应用管理】>【新建应用】按钮。填写应用信息,点击【提交】按钮。

2.分别新建两个普通应用consumer-demo、provider-demo。一个微服务网关应用gateway。

3.在应用详情页,【程序包管理】页签,点击【上传程序包】按钮进行程序包上传。

4.选择程序包,填写程序包版本,点击【提交】按钮进行上传。

(二)新建集群

1.新建虚拟机集群

单击【资源中心】下【集群】>【新建集群】按钮。创建一个虚拟机集群。

2.导入云服务器

进入上一步骤中创建的集群的详情页,点击【导入云主机】按钮,选择对应的云主机进行导入。

(三)新建部署组

单击【资源中心】下【部署组】>【新建部署组】按钮,填写部署组信息并单击【保存&下一步】创建部署组。

(四)部署应用

1.选择部署组列表中对应条目中【部署应用】按钮,部署应用。

2.选择对应版本应用程序包,点击【完成】按钮进行部署。

3.部署成功后,在【应用中心】->【服务治理】页面,可以展示出服务实例信息。

4.点击具体的微服务链接进入【接口列表】页签,可以看到对应的API列表。

三、统一对外暴露API

(一)应用场景

为后端众多微服务API对外提供统一的访问入口(访问域名、IP、端口),对外屏蔽具体微服务的IP及端口等信息。方便消费者进行服务调用配置。

(二)操作步骤

1.新建分组

单击【组件中心】>【微服务网关】>【分组管理】。在分组管理页,单击【新建分组】,并填写分组信息。

新建 group-consumer、group-provider两个分组,分别用于托管consumer-demo和provider-demo 服务中的API。分组列表如下:

2.导入API

分别在group-consumer、group-provider两个分组的【API 列表】中,单击【导入 API】,选择对外暴露的微服务下的 API,完成后单击【确认】按钮进行提交。

导入成功后,API列表显示如下。

3.访问API

分组下某个微服务 API 的访问路径为:网关的域名或网关的 IP+port/分组 context/微服务 API 所在的微服务命名空间名称/微服务名称/API 路径。

举例:当分组 context 为 csr,所在命名空间为 cluster-vm-test_default,微服务名称为 consumer-demo,API 路径为/echo/{test}时,则访问路径为域名/csr/cluster-vm-test_default/consumer-demo/echo/{test}。

单击 API 路径后面的复制按钮,会自动复制从 context 以后的路径。粘贴后的内容为/csr/cluster-vm-test_default/consumer-demo/echo-feign/{str}。

使用postman工具,通过网关对consumer-demo服务进行访问。访问路径如下:

http://{ip}:{port}/csr/cluster-vm-test_default/consumer-demo/echo-feign/1256

访问效果如下:

经过上述操作,可以实现API的统一对外暴露。

四、网关限流

(一)应用场景

在需要对外部请求进行请求流量限制的时候,可以通过网关中特定的API进行限流设置,达到限制流量,保护服务的效果。

(二)操作步骤

1.设置限流规则

针对分组 group-consumer 中API 进行限流,例如:QPS设置为1。

API:/csr/cluster-vm-test_default/consumer-demo/echo-feign/{str}

设置成功后,API列表中对应API限流规则显示如下:

2.发起调用

访问路径如下:

http://{ip}:{port}/csr/cluster-vm-test_default/consumer-demo/echo-feign/1256

在postman 中连续快速发起请求,查看效果。可以观察到,产生“429 Too Many Requests”错误,证明限流设置已经生效。

限流错误信息详情如下:

经过上述操作,即可以验证网关限流的作用。

五、网关鉴权

(一)应用场景

微服务网关有可能直接对外暴露给服务消费者,此时访问安全就显得尤为重要。可以通过在微服务网关启动密钥鉴权,来进行访问鉴权的控制。

(二)操作步骤

1.配置密钥对鉴权

在【分组管理】页面,选择某一网关分组(如:group-consumer),进入分组详情页面,在【基本信息】部分,点击【编辑】按钮,对分组进行编辑,对【鉴权类型】项选择【密钥鉴权】,开启密钥鉴权。

在分组详情页面【密钥管理】部分,点击【新建密钥】,输入【密钥名】并点击【提交】按钮,进行密钥的创建。

密钥创建成功后,显示在分组详情页面【密钥管理】部分列表中。

2.不带密钥签名访问

在header中不添加密钥签名信息的情况下,在postman中发起请求,请求失败。

访问路径如下:

http://{ip}:{port}/csr/cluster-vm-test_default/consumer-demo/echo-feign/1256

3.使用密钥签名并发起请求

在代码中生成密钥签名

在请求header中添加对应的密钥签名相关信息,然后发起请求,则可以正常请求。访问路径如下:

http://{ip}:{port}/csr/cluster-vm-test_default/consumer-demo/echo-feign/1256

经过上述操作,即可以验证网关鉴权已经生效。

六、网关Tag插件

(一)应用场景

标签是 TSF 中传递客户业务参数的形式,用户可以通过标签来实现灵活的基于业务参数的服务治理能力并依据标签过滤调用链。典型的标签的使用场景是:通过业务参数实现针对参数值的特殊路由、限流等。

通过微服务网关 Tag 插件将外部请求的请求参数转化为标签,就是其中一种标签配置方式。

(二)操作步骤

1.新建Tag插件

单击【组件中心】下的【微服务网关】>【插件管理】。单击【新建插件】,选择Tag插件类型,并填写插件信息。单击【完成】按钮提交。

2.绑定对象

单击【组件中心】下的【微服务网关】>【插件管理】。点击对应插件条目上的【绑定对象】按钮。

选择要绑定到插件上的网关分组或者API,并单击【提交】按钮,完成插件绑定。

3.配置路由规则

在【应用中心】>【服务治理】页面,点击【provider-demo】服务链接,进入【服务路由】页签,配置路由规则。根据自定义标签 version 进行路由配置,自定义标签version 等于 v1时路由到版本v1;自定标签version等于v2时路由到版本v2。

4.发起请求

在请求header中添加 version  参数。当 version = v1 时,请求被路由到 provider-demo 服务v1版本。访问路径如下:

http://{ip}:{port}/csr/cluster-vm-test_default/consumer-demo/echo-feign/1256

当 version = v2 时,请求被路由到 provider-demo 服务v2版本。

调用链

tag参数

经过上述操作,即可以验证网关Tag插件的作用。

注意:通过Tag插件进行标签转化时,无需在代码中添加putTag的逻辑。此时可以通过在url参数中添加tagName和tagValue参数进行访问,可以发现请求是轮询的分配给v1和v2版本。

七、网关Jwt插件

(一)应用场景

微服务网关有可能直接对外暴露给服务消费者,此时访问安全就显得尤为重要。

除了通过在微服务网关启动密钥鉴权,来进行访问鉴权的控制外。还可以通过 Jwt 插件的方式进行鉴权。

(二)操作步骤

1.新建 Jwt 插件

单击【组件中心】下的【微服务网关】>【插件管理】。单击【新建插件】,选择 Jwt 插件类型,并填写插件信息。单击【完成】按钮提交。

查看插件

2.绑定对象

单击【组件中心】下的【微服务网关】>【插件管理】。点击对应插件条目上的【绑定对象】按钮。

3.验证

不加参数直接发起请求进行验证,请求失败。

生成token

添加token参数和kid参数进行验证,请求成功。

token过期验证,超过token生命周期之后(如:10分钟),同样的token已经失效,无法进行正常请求。

经过上述操作,即可以验证网关Jwt插件的作用。

八、网关OAuth插件

(一)应用场景

微服务网关 OAuth 插件提供了简单的第三方鉴权的能力。外部请求到达网关,网关向第三方服务器发送请求对参数进行校验。

(二)操作步骤

1.自定义鉴权服务

编写自定义鉴权服务,并发布。确保在TSF中可以访问到该鉴权服务对应的鉴权接口。

接口地址:http://{ip}:{port}/auth?userName=hello

接口代码:

2.新建OAuth插件

单击【组件中心】下的【微服务网关】>【插件管理】。单击【新建插件】,选择OAuth插件类型,并填写插件信息。单击【完成】按钮提交。

查看插件

3.绑定对象

4.验证

使用错误的参数(userName = 123)进行请求验证,返回失败。

使用正确的参数(userName = hello)进行请求验证,返回成功。

经过上述操作,即可以验证网关OAuth插件的作用。

九、请求重定向

(一)应用场景

为了不将内部接口信息过分暴露或为了保证上下游系统接口的一致性,通常可以将微服务对外暴露的接口配置新的重定向路径,从而隐藏真实的路径。

(二)操作步骤

单个API

可以通过重定向配置为某一个 API 配置路径别名。

1.新建API

在consumer-demo 服务中新增一个API。新建ConfigController,并添加 config 方法如下:

2.将 consumer-demo 发布到TSF

3.配置重定向

单击组件中心下的【微服务网关】>【重定向配置】。单击【新建重定向配置】,并填写重定向信息。单击【确定】按钮提交。

创建成功后,在重定向配置列表页面展示如下:

4.发起请求

重定向配置成功后,按重定向路径发起请求。

重定向访问路径:

http://{ip}:{port}/config

原访问路径:

http://{ip}:{port}/csr/cluster-vm-test_default/consumer-demo/config

因为重定向规则中配置了禁止访问原路径,所以访问原路径时拒绝访问。

如果将配置改为【允许访问原路径】,则可以正常访问。

对原路径重新发起请求,可以正常访问。

通配API

当前 TSF 微服务网关提供的默认对外访问路径为 `域名/分组名/命名空间/微服务名称/API路径`,可以通过通配符来设置重定向规则支持将较长的路径映射为短路径。

1.配置重定向

请求路径填写为:/provider/(.*)

原路径填写为:/pro/www-cluster-vm_default/provider-demo/echo/$1

此时,通过网关直接请求 /provider/(.*)`等请求会直接被转发到 /pro/www-cluster-vm_default/provider-demo/echo

2.发起请求

重定向配置成功后,按重定向路径发起请求。

重定向访问路径:

http://{ip}:{port}/provider/123

对原路径重新发起请求,可以发现和重定向路径请求的返回结果一模一样。

原访问路径:

http://{ip}:{port}/pro/www-cluster-vm_default/provider-demo/echo/123

经过上述操作,即可以验证网关重定向已经生效可以正常使用。

总结

综上所述,腾讯云微服务平台 TSF  ,提供了丰富的微服务治理能力。同时,我们可以通过 TSF 微服务网关,进行 API 的统一管理,包括:对外暴露、限流、鉴权、路由等。从而规避开篇所说的 API 管理面临的诸多问题,使得 API 的对外管理更加安全、便捷、优雅。

END

腾云忆想技术干货| 基于TSF的API对外管理实践相关推荐

  1. 腾云忆想技术文|CREDIS在TMF平台中的落地实践

    导语 Credis是腾讯云在开源reids的基础上打造的一款高新能.易扩展.可监控的缓存数据库服务,结合在腾讯移动金融开发平台中的网关服务.消息推送.数据同步.移动分析.移动监控等移动中台服务中的应用 ...

  2. 腾云忆想售后运维TAC中心聚力西南,蝶变升级技术赋能高效运维市场

    近日,腾云忆想售后运维TAC中心(全称为腾讯云私有化售后技术支持中心)全新升级,聚力西南,新增GNOC和WARROM作战实验室,通过大屏可远程监测运维情况,针对故障应急恢复开展跨地域联合作战,通过蝶变 ...

  3. 腾云忆想构建云化IT生态,助力我国“双循环经济”数字化升级

    新冠肺炎疫情全球蔓延,世界经济与国际局势瞬息万变.时局变化之中展望"十四五",我国逐步形成了以国内大循环为主体.国内国际双循环相互促进的新发展格局.在新时局中,数字经济是重要的支撑 ...

  4. 中新社、新华报业网等媒体报道腾云忆想云化IT生态,聚焦科技助力“双循环经济”数字化升级

    自"中国制造2025"战略方针提出后,科技行业进入快速发展赛道,加上"新冠"疫情的大考,传统行业数字化转型升级,科技赋能国内"双循环"经济发 ...

  5. 腾云忆想2021回顾|赋能产业智慧升级,助力实体经济发展

    风云变幻 四季交替 365个日升月落 2021年悄然逝去 我们在反复无常的日子里 把握每一分钟 一如既往 奋勇向前 回望2021 1.风云变幻,把握当下 2021年是努力奋斗的一年,也是飞速成长的一年 ...

  6. 技术干货 | 基于MindSpore更好的理解Focal Loss

    [本期推荐专题]物联网从业人员必读:华为云专家为你详细解读LiteOS各模块开发及其实现原理. 摘要:Focal Loss的两个性质算是核心,其实就是用一个合适的函数去度量难分类和易分类样本对总的损失 ...

  7. 技术干货 | 基于 Qt Quick Plugin 快速构建桌面端跨平台组件

    导读:桌面端的 UI 开发框架对比移动端.Web 端的成熟方案,一直处于不温不火的状态.随着疫情掀起的风波,桌面端在线教育.视频会议等需求不断涌现.本文将围绕 Qt Quick 的优势来介绍如何快速创 ...

  8. 技术干货 | 基于 Doris 构建的小程序私域流量增长

    作者:赵煜杨  百度资深研发工程师  负责手百小程序数据产品工程架构 本次分享大纲如下: 小程序私域精细化运营能力介绍 用户分层技术难点 用户分层的架构和解决方案 未来规划 小程序目前使用百度云 P ...

  9. 技术干货 | 基于MindSpore详解Perplexity语言模型评价指标

    01 原理介绍 在研究生实习时候就做过语言模型的任务,当时让求PPL值,当时只是调包,不求甚解,哈哈哈,当时也没想到现在会开发这个评价指标,那现在我来讲一下我对这个指标的了解,望各位大佬多多指教. 这 ...

最新文章

  1. java中Integer装箱的注意
  2. python面相对象编程指南_Python面向对象编程指南
  3. 网络数据注入工具HexInject
  4. before vue路由钩子_vue组件级路由钩子函数介绍,及实际应用
  5. 记一次OutOfMemory定位过程
  6. ITK:创建一个图像区域
  7. Morphling:云原生部署 AI , 如何把降本做到极致?
  8. 基于POLARDB数据库的压测实践
  9. cad统计多条线段总长度插件_超级实用CAD技巧应用汇总!技巧大全、插件合集、快捷键合集等...
  10. 建议你一定要尝试的副业排名TOP1
  11. Python读写txt
  12. 二叉排序树删除节点_二叉排序树的创建、插入和删除
  13. requests 证书验证
  14. IDEA安装JRebel插件教程
  15. 彻底删除dll文件,填坑!
  16. 模拟小型电子商务网站绘制ER图
  17. 使用Battery Historian采集android耗电数据
  18. MT-考试座位-颜色排序
  19. 小强开饭店-从单体应用到微服务
  20. Router Support for Fine-Grained Latency Measurements阅读笔记

热门文章

  1. 公众号h5页面跳转到小程序
  2. djano 字段不重复_硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题...
  3. 利用bowtie2去除宿主基因
  4. 元宇宙、Web3.0潮起,欧科云链:区块链+大数据深耕科技创新
  5. 群晖NAS安装甜糖官方docker镜像,利用闲置带宽赚电费
  6. python常见异常以及处理方法
  7. PHP二开APP分发源码+免IOS/免签封包分发
  8. vue java实现登录_SpringBoot+Vue+Redis实现单点登录(一处登录另一处退出登录)
  9. 利用列表巧妙打印杨辉三角
  10. C/C++项目开发:双色球彩票系统!C语言告诉你中奖并不是偶然!