云原生集成開發(fā)環(huán)境——TitanIDE
通過網(wǎng)頁在任何地方更安全、更高效地編碼2022-04-11
831
近日,kaiyun開云創(chuàng)新SolarMesh正式發(fā)布 v1.10.2 版本,本次版本更新的主題是流量插件。SolarMesh允許開發(fā)者對流經(jīng)服務(wù)的流量在入站、出站時進(jìn)行編碼增強(qiáng),達(dá)到對業(yè)務(wù)流量的切面編程(AOP Aspect Oriented Programming)能力。
近年來,服務(wù)網(wǎng)格(Service Mesh)一直被稱為下一代微服務(wù)技術(shù),這種技術(shù)架構(gòu)相比SOA架構(gòu)(面向服務(wù)架構(gòu))而言,更加強(qiáng)調(diào)業(yè)務(wù)邏輯與服務(wù)治理邏輯的分層及解耦,在業(yè)務(wù)邏輯和基礎(chǔ)實施邏輯間劃分出清晰的邊界。
不同于以SpringCloud為代表的SDK實現(xiàn)方式,在服務(wù)網(wǎng)格架構(gòu)下,服務(wù)與服務(wù)之間的通信通過代理服務(wù)——sidecar進(jìn)行,所有流經(jīng)的流量都會被代理劫持,再由代理轉(zhuǎn)發(fā)到業(yè)務(wù)服務(wù),以此來實現(xiàn)業(yè)務(wù)邏輯和基礎(chǔ)實施邏輯間的分離。下圖清晰地展現(xiàn)了在服務(wù)網(wǎng)格中應(yīng)用的通信結(jié)構(gòu):
圖片來自:Pattern: Service Mesh(http://philcalcado.com/2017/08/03/pattern_service_mesh.html)
這種架構(gòu)不僅實現(xiàn)了業(yè)務(wù)無侵入的流量管控,在業(yè)務(wù)上更是為業(yè)務(wù)研發(fā)人員提供了一條全新的業(yè)務(wù)拓展路線,面向流量編程。如果業(yè)務(wù)研發(fā)人員將一段業(yè)務(wù)直接注入到sidecar當(dāng)中,由sidecar執(zhí)行,就相當(dāng)于為流量做了一次動態(tài)增強(qiáng),利用服務(wù)網(wǎng)格代碼無侵入的特性,將類似于Spring的切面編程能力擴(kuò)展到所有業(yè)務(wù)服務(wù)當(dāng)中。
SolarMesh在 v1.10.2 版本中引入了流量插件的概念,將一些輕量級的業(yè)務(wù)封裝成插件,在SolarMesh的界面上為應(yīng)用流量在入站、出站時進(jìn)行編碼增強(qiáng),達(dá)到對業(yè)務(wù)流量的切面編程(AOP Aspect Oriented Programming)能力??梢詰?yīng)用于對流量有業(yè)務(wù)訴求的使用場景,例如對敏感業(yè)務(wù)數(shù)據(jù)的過濾,在系統(tǒng)需要停機(jī)更新前下發(fā)更新通知,對特定核心接口的數(shù)據(jù)上報等。
示例項目
此次演示使用了一個典型的電商項目mall-swarm(https://github.com/macrozheng/mall-swarm)
mall-swarm是一套微服務(wù)商城系統(tǒng),采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技術(shù),同時提供了基于Vue的管理后臺方便快速搭建系統(tǒng)。mall-swarm在電商業(yè)務(wù)的基礎(chǔ)集成了注冊中心、配置中心、監(jiān)控中心、網(wǎng)關(guān)等系統(tǒng)功能。
由于mall-swarm依賴眾多,部署麻煩,我們將mall-swarm的所有中間件做了一份k8s部署yaml,讓所有的中間件都部署到集群內(nèi)方便測試,改造后源碼開源在mall-swarm-istio(https://github.com/solarmesh-cn/mall-swarm-istio),所以我們這次使用mall-swarm改造版。
前置條件
安裝 SolarMesh v1.10.2 及以上版本
在k8s集群中部署了mall-swarm-istio項目
服務(wù)接入了sidecar,并且訪問正常
首先需要在流量插件庫中聲明已有的插件
重啟solar-controller組件,更新流量插件庫
在mall-swarm-istio項目中,訪問首頁->訂單->訂單詳情頁面,可以看到,對外暴露的手機(jī)號碼是以明文形式展示在頁面上的。
在某些場景中,以明文展示真實手機(jī)會存在一些安全隱患。所以我們希望可以對手機(jī)號碼進(jìn)行加密,讓用戶不能直接拿到訂單上的真實手機(jī)號碼。在這樣的場景下,我們就可以借助流量插件的能力,在數(shù)據(jù)響應(yīng)給前端之前對數(shù)據(jù)進(jìn)行清洗,加密敏感信息。
訪問SolarMesh的流量視圖頁面,查看整個項目的流量拓?fù)洹?/span>
由于手機(jī)號碼是從mall-admin這個應(yīng)用返回的數(shù)據(jù),所以我們只需要控制住mall-admin這個應(yīng)用的流量,讓它的敏感數(shù)據(jù)不能響應(yīng)到應(yīng)用之外。
選擇mall-admin,打開流量插件側(cè)邊欄。
添加一個數(shù)據(jù)清洗流量插件,這個插件會在響應(yīng)數(shù)據(jù)中清洗掉所有手機(jī)號碼。
保存數(shù)據(jù)清洗流量插件,這樣流量插件就會在應(yīng)用上生效了。
再次訪問首頁->訂單->訂單詳情頁面,現(xiàn)在這個頁面的手機(jī)號碼就不再是明文顯示,而是加密之后的狀態(tài)。
總結(jié)
上文中,我們使用了一個簡單的例子實現(xiàn)了對手機(jī)號碼的清洗加密工作,流量插件的工作原理是在 SolarMesh v1.9.1 版本更新中發(fā)布的WASM(https://mp.weixin.qq.com/s/I3fEuX69gAoAaSVhjcaUkg)能力的一個擴(kuò)展。
在實際使用場景中,業(yè)務(wù)研發(fā)人員只需要基于SolarMesh提供的WASM腳手架,根據(jù)企業(yè)自身的業(yè)務(wù)特點進(jìn)行輕量級的函數(shù)式編程,將打包好的插件交付給SolarMesh即可完成對插件庫本身的擴(kuò)展,并利用流量插件能力靈活的對業(yè)務(wù)服務(wù)進(jìn)行增強(qiáng)。輔助用戶利用服務(wù)網(wǎng)格的特性,滿足特定場景下的定制化需求。