幫你解讀云原生網(wǎng)絡(luò)代理MOSN透明劫持技術(shù)

本文為大家介紹云原生網(wǎng)絡(luò)代理 MOSN如何實(shí)現(xiàn)透明高效的攔截,這是Service Mesh 設(shè)計(jì)中的一大難點(diǎn)。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了翁源免費(fèi)建站歡迎大家使用!

MOSN 是一款使用 Go 語(yǔ)言開(kāi)發(fā)的網(wǎng)絡(luò)代理軟件,作為云原生的網(wǎng)絡(luò)數(shù)據(jù)平面,旨在為服務(wù)提供多協(xié)議、模塊化、智能化、安全的代理能力。MOSN 是 Modular Open Smart Network-proxy 的簡(jiǎn)稱,可以與任何支持 xDS API 的 Service Mesh 集成,亦可以作為獨(dú)立的四、七層負(fù)載均衡、API Gateway、云原生 Ingress 等使用。
MOSN:https://github.com/mosn/mosn

在由 Istio 定義的 Service Mesh 體系中,服務(wù)治理相關(guān)邏輯由獨(dú)立的 Sidecar 進(jìn)程處理,如服務(wù)發(fā)現(xiàn)、故障注入、限流熔斷等等。這些處理邏輯是 Service Mesh 著重要解決的問(wèn)題。通常在談?wù)摰?Service Mesh 時(shí),會(huì)優(yōu)先關(guān)注在這些點(diǎn)上,但是在落地過(guò)程中,有一個(gè)問(wèn)題同等重要但往往容易被忽視。這個(gè)問(wèn)題概括起來(lái),就是流量是如何被導(dǎo)入到Sidecar的監(jiān)聽(tīng)端口的。

在數(shù)據(jù)平面的 Sidecar 中攔截進(jìn)出應(yīng)用容器的流量,這一直以來(lái)就是 Istio Service Mesh 中一切功能的基礎(chǔ),如何實(shí)現(xiàn)透明高效的攔截也是 Service Mesh 設(shè)計(jì)中的一大難點(diǎn),本文為大家介紹云原生網(wǎng)絡(luò)代理 MOSN 是如何做到這一點(diǎn)的。

流量接管

如果服務(wù)注冊(cè)/發(fā)布過(guò)程能夠允許適當(dāng)?shù)男薷?,這個(gè)問(wèn)題會(huì)得到極大的簡(jiǎn)化,比如服務(wù)發(fā)布方 Sidecar 將地址修改為 127.0.0.1:15001,訂閱方Sidecar監(jiān)聽(tīng)本機(jī) 15001 端口,當(dāng)訂閱方訪問(wèn) 127.0.0.1:15001 時(shí),流量就自然到達(dá)了本端Sidecar。在這種情況下,無(wú)需在網(wǎng)絡(luò)層面使用重定向技術(shù)就可以達(dá)到目的。

服務(wù)發(fā)布訂閱修改邏輯框圖

流量轉(zhuǎn)發(fā)流程圖

如上圖中,在發(fā)布服務(wù)時(shí),Sidecar 將服務(wù)端原本的地址轉(zhuǎn)換為 Sidecar 自身的端口;服務(wù)訂閱時(shí),訂閱方獲取到的端口則是本地Sidecar 監(jiān)聽(tīng)的端口。這一方案的優(yōu)勢(shì)很明顯,邏輯都收斂在了 Sidecar 中,除了需要對(duì) Sidecar 服務(wù)注冊(cè)/發(fā)布流程進(jìn)行改造外,不需要其他組件的參與,但是缺點(diǎn)也很明顯,如果業(yè)務(wù)模型不存在注冊(cè)中心,或者是服務(wù)發(fā)布/訂閱 SDK 不能進(jìn)行改造,這個(gè)方案就行不通了,而在 Mesh 落地場(chǎng)景中,這個(gè)條件恰恰較難滿足。

目前大多數(shù)業(yè)務(wù)的邏輯架構(gòu)都不符合 Istio 定義的云原生體系,為了享受到 Service Mesh 在服務(wù)治理方面的優(yōu)勢(shì),需要選擇合適的流量劫持方案。一般而言,流量劫持工作在 L4 層,在進(jìn)行劫持技術(shù)選型時(shí)需要考慮三個(gè)方面的問(wèn)題:

  • 第一是環(huán)境適配,包括容器、虛擬機(jī)、物理機(jī)、內(nèi)核、系統(tǒng)發(fā)行版等方面的考慮,確保劫持方案在運(yùn)行環(huán)境中能夠正常工作;
  • 第二是控制靈活簡(jiǎn)單,包括如何維護(hù)劫持規(guī)則,劫持規(guī)則如何下發(fā)等;
  • 第三是性能,確保在業(yè)務(wù)運(yùn)行期間,劫持本身不會(huì)帶來(lái)過(guò)大的開(kāi)銷;

下面將從這三個(gè)層面分析 MOSN 在落地過(guò)程中的一些思考。

環(huán)境適配

在環(huán)境適配性上,最容易想到的是 iptables,作為一項(xiàng)古典網(wǎng)絡(luò)技術(shù),iptables 使用簡(jiǎn)單,功能靈活,幾乎所有現(xiàn)代生產(chǎn)級(jí)內(nèi)核版本與 OS 發(fā)行版都默認(rèn)具備使用條件,Istio 社區(qū)也使用 iptables 做流量透明劫持。

iptables 流量劫持原理圖

盡管環(huán)境適應(yīng)性強(qiáng),但是基于 iptables 實(shí)現(xiàn)透明劫持存在以下問(wèn)題:

  • DNAT 模式下,需要借助于 conntrack 模塊實(shí)現(xiàn)連接跟蹤,在連接數(shù)較多的情況下,會(huì)造成較大的消耗,同時(shí)可能會(huì)造成 track 表滿的情況。為了避免這個(gè)問(wèn)題,可以使用 TProxy 取代 DNAT,但受限于內(nèi)核版本,TProxy 應(yīng)用于 outbound 存在一定缺陷。
  • iptables 屬于常用模塊,全局生效,不能顯式的禁止相關(guān)聯(lián)的修改,可管控性比較差。
  • iptables 重定向流量本質(zhì)上是通過(guò) loopback 交換數(shù)據(jù),outbond 流量將兩次穿越協(xié)議棧,在大并發(fā)場(chǎng)景下會(huì)損失轉(zhuǎn)發(fā)性能。

針對(duì) oubound 流量,還可以使用hook connect 來(lái)實(shí)現(xiàn),如圖所示:

hook connect邏輯框圖

無(wú)論采用哪種透明劫持方案,均需要解決獲取真實(shí)目的 IP/端口的問(wèn)題,使用 iptables 方案通過(guò) getsockopt 方式獲取,TProxy 可以直接讀取目的地址,通過(guò)修改調(diào)用接口,hook connect 方案讀取方式類似于 TProxy。

由于 MOSN 落地的場(chǎng)景十分復(fù)雜,有容器與 VM 甚至物理機(jī)環(huán)境,有基于 K8s 的云原生應(yīng)用,有基于注冊(cè)中心的微服務(wù),也存在單體應(yīng)用,有些場(chǎng)景對(duì)性能要求非常高,有些則是夠用即可,針對(duì)不同的場(chǎng)景,我們選擇不同的劫持方案進(jìn)行適配。如果應(yīng)用程序通過(guò)注冊(cè)中心發(fā)布/訂閱服務(wù)時(shí),可以結(jié)合注冊(cè)中心劫持流量;在需要用到透明劫持的場(chǎng)景,如果性能壓力不大,使用 iptables DNAT 即可,大并發(fā)壓力下使用 TProxy 與 sockmap 改善性能。

配置管理

通常基于申明式體系構(gòu)建的服務(wù)在部署時(shí)能夠得到全局信息,而非申明式體系往往需要在運(yùn)行期間進(jìn)行動(dòng)態(tài)的配置修改,由于缺乏全局信息,在運(yùn)行期間很難獲取到準(zhǔn)確的服務(wù)間調(diào)用信息。在生成透明劫持規(guī)則時(shí),我們需要明確哪些流量要被重定向到 Sidecar,否則一旦出錯(cuò),而 Sidecar 又無(wú)法處理這部分流量時(shí),將會(huì)使得 Sidecar 變成流量黑洞,比如,某一個(gè)容器內(nèi)的 TCP 流量全部被重定向至 Sidecar,而該容器中存在一個(gè)使用私有協(xié)議承載應(yīng)用數(shù)據(jù)的監(jiān)控 Agent,而 Sidecar 不能識(shí)別該協(xié)議導(dǎo)致無(wú)法爭(zhēng)取轉(zhuǎn)發(fā),只能選擇丟棄。

通常情況下,為了確保 Sidecar 能夠正確的轉(zhuǎn)發(fā)流量,需要滿足兩個(gè)條件,首先是要能夠正確識(shí)別協(xié)議,其次是需要配置轉(zhuǎn)發(fā)規(guī)則,明確下一跳。對(duì)于不滿足這兩個(gè)條件的流量,不應(yīng)將其重定向至 Sidecar。對(duì)于現(xiàn)有的非云原生應(yīng)用,同時(shí)滿足這兩個(gè)條件的代價(jià)非常高,比如,某個(gè)虛擬機(jī)上運(yùn)行了一個(gè)業(yè)務(wù),同時(shí)還運(yùn)行了收集 Metrics 的 Agent、日志采集工具、健康檢查工具等等。而基于 L4 規(guī)則很難精確的將業(yè)務(wù)流量重定向至 Sidecar,如果多個(gè)業(yè)務(wù)混部,可能導(dǎo)致無(wú)法在 L4 層進(jìn)行業(yè)務(wù)流量的區(qū)分??偨Y(jié)起來(lái),為了精確的把流量引至 Sidecar,需要獲得全局的調(diào)用關(guān)系,這一目標(biāo)原本應(yīng)該由 Service Mesh 來(lái)完成,而在流量劫持的場(chǎng)景下,卻成為了 Service Mesh 的前提。

為了使用 Service Mesh 而引入大量的部署運(yùn)維開(kāi)銷是得不償失的。在落地的過(guò)程中,MOSN 引入了多項(xiàng)手段來(lái)降低流量劫持的配置難度。我們將需要精確配置重定向規(guī)則的工作模式定義為精確匹配,與之相對(duì)應(yīng)的是模糊匹配,即不要求精確區(qū)分出需要劫持的流量。降低配置難度的關(guān)鍵在于取消對(duì)于精確規(guī)則的依賴,在配置模糊規(guī)則的前提下,既做到對(duì)于關(guān)心的業(yè)務(wù)流量的治理,同時(shí)也不影響非業(yè)務(wù)流量的正常流程。

我們采用 L4 規(guī)則與 L7 規(guī)則融合的方式下發(fā)模糊的匹配規(guī)則,此規(guī)則下除了包含關(guān)心的業(yè)務(wù)流量外,還可能包含預(yù)期之外的非業(yè)務(wù)流量。對(duì)于業(yè)務(wù)流量,Sidecar 根據(jù)相應(yīng)的服務(wù)治理規(guī)則處理,而對(duì)于非業(yè)務(wù)流量,則保持其默認(rèn)行為不變。在模糊匹配模式下,僅需要為關(guān)心的流量配置服務(wù)治理與轉(zhuǎn)發(fā)規(guī)則,而無(wú)需關(guān)心 miss match 導(dǎo)致流量黑洞。在模糊匹配之外,MOSN仍然保留了精確匹配能力,可以通過(guò)配置項(xiàng)禁用模糊匹配,能夠兼容之前的工作模式。

MOSN 流量劫持模糊匹配邏輯框圖

為了支持更加靈活的配置手段,在配置模糊匹配規(guī)則時(shí),支持默認(rèn)白名單與默認(rèn)黑名單兩種模式。默認(rèn)黑名單模式適合業(yè)務(wù)場(chǎng)景簡(jiǎn)單,業(yè)務(wù)流量特征明顯的場(chǎng)景,由于劫持邏輯的輸入流量少,性能損耗小。默認(rèn)白名單模式適合業(yè)務(wù)特征明顯不明顯的場(chǎng)景,由于劫持邏輯的輸入流量多,可能存在一定的性能損耗,在這種模式下,可以顯示加入黑名單排除相應(yīng)的流量,比如通常業(yè)務(wù)不會(huì)使用除了 80 之外的小于 1024 的端口。

MOSN 通過(guò)模糊規(guī)則匹配的手段極大降低了流量劫持的管理成本,在部署 Service Mesh 時(shí),僅需要“大體上正確”即可,無(wú)需擔(dān)心沒(méi)有完全枚舉流量規(guī)則而產(chǎn)生流量黑洞,而借助于 Service Mesh,可以得到全局的服務(wù)調(diào)用信息,進(jìn)而能夠?qū)ΜF(xiàn)有服務(wù)進(jìn)行精細(xì)化的治理。

數(shù)據(jù)面性能

iptables 存在一個(gè)固有問(wèn)題是在匹配規(guī)則數(shù)量增多時(shí),匹配消耗會(huì)隨之增加,在規(guī)則數(shù)量較多的情況下,會(huì)對(duì)新建連接性能造成較大的影響,為了避免這種情況,可使用 ipset 降低匹配消耗。此外,在內(nèi)核版本滿足要求(4.16 以上)的前提下,通過(guò) sockmap 可以縮短報(bào)文穿越路徑,進(jìn)而改善 outbound 方向的轉(zhuǎn)發(fā)性能。

在討論流量劫持的性能損耗時(shí),需要結(jié)合具體的場(chǎng)景來(lái)看,比如某些場(chǎng)景中只有 iptables dnat能夠滿足環(huán)境適配的要求,在這種情況下,需要考慮的是iptables dnat的數(shù)據(jù)面性能是否能夠滿足業(yè)務(wù)的需求。實(shí)際落地過(guò)程中,需要結(jié)合實(shí)際情況與運(yùn)維難度選擇劫持手段。


創(chuàng)新互聯(lián)面向全國(guó)提供域名注冊(cè)、虛擬主機(jī)、云服務(wù)器、服務(wù)器托管與租用,如需了解,請(qǐng)聯(lián)系QQ:171356849微信:zh18159893430 咨詢,謝謝!

文章題目:幫你解讀云原生網(wǎng)絡(luò)代理MOSN透明劫持技術(shù)
文章路徑:http://www.muchs.cn/article4/dhsie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、移動(dòng)網(wǎng)站建設(shè)、Google、外貿(mào)建站、全網(wǎng)營(yíng)銷推廣、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名