云原生集成开发环境——TitanIDE
通过网页在任何地方更安全、更高效地编码2022-04-11
831
近日,kaiyun开云创新SolarMesh正式发布 v1.10.2 版本,本次版本更新的主题是流量插件。SolarMesh允许开发者对流经服务的流量在入站、出站时进行编码增强,达到对业务流量的切面编程(AOP Aspect Oriented Programming)能力。
近年来,服务网格(Service Mesh)一直被称为下一代微服务技术,这种技术架构相比SOA架构(面向服务架构)而言,更加强调业务逻辑与服务治理逻辑的分层及解耦,在业务逻辑和基础实施逻辑间划分出清晰的边界。
不同于以SpringCloud为代表的SDK实现方式,在服务网格架构下,服务与服务之间的通信通过代理服务——sidecar进行,所有流经的流量都会被代理劫持,再由代理转发到业务服务,以此来实现业务逻辑和基础实施逻辑间的分离。下图清晰地展现了在服务网格中应用的通信结构:
图片来自:Pattern: Service Mesh(http://philcalcado.com/2017/08/03/pattern_service_mesh.html)
这种架构不仅实现了业务无侵入的流量管控,在业务上更是为业务研发人员提供了一条全新的业务拓展路线,面向流量编程。如果业务研发人员将一段业务直接注入到sidecar当中,由sidecar执行,就相当于为流量做了一次动态增强,利用服务网格代码无侵入的特性,将类似于Spring的切面编程能力扩展到所有业务服务当中。
SolarMesh在 v1.10.2 版本中引入了流量插件的概念,将一些轻量级的业务封装成插件,在SolarMesh的界面上为应用流量在入站、出站时进行编码增强,达到对业务流量的切面编程(AOP Aspect Oriented Programming)能力。可以应用于对流量有业务诉求的使用场景,例如对敏感业务数据的过滤,在系统需要停机更新前下发更新通知,对特定核心接口的数据上报等。
示例项目
此次演示使用了一个典型的电商项目mall-swarm(https://github.com/macrozheng/mall-swarm)
mall-swarm是一套微服务商城系统,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。
由于mall-swarm依赖众多,部署麻烦,我们将mall-swarm的所有中间件做了一份k8s部署yaml,让所有的中间件都部署到集群内方便测试,改造后源码开源在mall-swarm-istio(https://github.com/solarmesh-cn/mall-swarm-istio),所以我们这次使用mall-swarm改造版。
前置条件
安装 SolarMesh v1.10.2 及以上版本
在k8s集群中部署了mall-swarm-istio项目
服务接入了sidecar,并且访问正常
首先需要在流量插件库中声明已有的插件
重启solar-controller组件,更新流量插件库
在mall-swarm-istio项目中,访问首页->订单->订单详情页面,可以看到,对外暴露的手机号码是以明文形式展示在页面上的。
在某些场景中,以明文展示真实手机会存在一些安全隐患。所以我们希望可以对手机号码进行加密,让用户不能直接拿到订单上的真实手机号码。在这样的场景下,我们就可以借助流量插件的能力,在数据响应给前端之前对数据进行清洗,加密敏感信息。
访问SolarMesh的流量视图页面,查看整个项目的流量拓扑。
由于手机号码是从mall-admin这个应用返回的数据,所以我们只需要控制住mall-admin这个应用的流量,让它的敏感数据不能响应到应用之外。
选择mall-admin,打开流量插件侧边栏。
添加一个数据清洗流量插件,这个插件会在响应数据中清洗掉所有手机号码。
保存数据清洗流量插件,这样流量插件就会在应用上生效了。
再次访问首页->订单->订单详情页面,现在这个页面的手机号码就不再是明文显示,而是加密之后的状态。
总结
上文中,我们使用了一个简单的例子实现了对手机号码的清洗加密工作,流量插件的工作原理是在 SolarMesh v1.9.1 版本更新中发布的WASM(https://mp.weixin.qq.com/s/I3fEuX69gAoAaSVhjcaUkg)能力的一个扩展。
在实际使用场景中,业务研发人员只需要基于SolarMesh提供的WASM脚手架,根据企业自身的业务特点进行轻量级的函数式编程,将打包好的插件交付给SolarMesh即可完成对插件库本身的扩展,并利用流量插件能力灵活的对业务服务进行增强。辅助用户利用服务网格的特性,满足特定场景下的定制化需求。