博客專欄

EEPW首頁 > 博客 > 服務(wù)網(wǎng)格自動故障檢測及流量切換方案

服務(wù)網(wǎng)格自動故障檢測及流量切換方案

發(fā)布人:天翼云開發(fā)者 時間:2024-06-17 來源:工程師 發(fā)布文章

本文分享自天翼云開發(fā)者社區(qū)《服務(wù)網(wǎng)格自動故障檢測及流量切換方案》,作者:s****n

隨著云原生技術(shù)的發(fā)展,越來越多的應(yīng)用采用容器,微服務(wù)技術(shù),以istio為代表的服務(wù)網(wǎng)格就是其中最廣泛使用的一種。它在業(yè)務(wù)容器創(chuàng)建時,自動向業(yè)務(wù)服務(wù)的pod中注入proxy容器邊車,將流入和流出業(yè)務(wù)容器的網(wǎng)絡(luò)流量全部劫持到proxy容器,經(jīng)由proxy容器處理后再進行下一步轉(zhuǎn)發(fā)。

Proxy容器的處理規(guī)則通過istiod控制面下發(fā),主要分為流量控制、安全、可觀測性三大類。以可觀測性為例的大量規(guī)則都僅對流經(jīng)的數(shù)據(jù)進行統(tǒng)計,監(jiān)控,鏈路追蹤等附加操作,不影響和改變業(yè)務(wù)本身的請求。但是當(dāng)proxy容器自身或其依賴的服務(wù)出現(xiàn)問題時,因其流量劫持動作,往往會造成整個服務(wù)不可用。

目前處理此類問題的方法,以人工干預(yù)為主,當(dāng)服務(wù)不可用時,通過告警通知運維人員,運維人員進行現(xiàn)場問題定位及處理。在有proxy邊車的場景下,若proxy問題不能快速解決,運維人員也經(jīng)常需要手動去除proxy容器邊車,先恢復(fù)業(yè)務(wù)流量再做細致排查。如果能自動化檢測proxy故障并進行及時處理,會大大提供微服務(wù)框架下的服務(wù)可用性,減少故障帶來的損失及人力排查成本

實現(xiàn)方案如下:

整體結(jié)構(gòu): 

image.png

 

具體方法:

1.在istio控制面加入故障檢測及流量阻斷模塊‘hot-switch’.

2.在istio的邊車代理proxy內(nèi)部加入故障檢測命令,并與控制面故障檢查模塊通信,具體檢測命令例如:

a.Watch相關(guān)pod的proxy容器狀態(tài),當(dāng)容器狀態(tài)為fail時,表示proxy容易已經(jīng)不再存活;

b.通過檢查proxy容器的15021 health端口,若返回值false,則proxy存活但不健康等等;

3.自動檢測確認代理proxy問題后,hot-switch通過進入pod執(zhí)行iptables相關(guān)命令,停止proxy的流量劫持,將流量模式由proxy控制管理,改為直通業(yè)務(wù)容器

a.在pod啟動前,proxy進行流量劫持的過程:首先運行 Init 容器,Init 容器用于設(shè)置 iptables 將進入 pod 的流量劫持到 Envoy sidecar proxy。

具體命令類似 :Istio-iptables -p 15001 -z 15006 -u 1337 -m REDIRECT -i '*' -x "" -b * -d "15090,15201,15020"

envoy sidecar proxy 啟動之后從pilot獲得動態(tài)的規(guī)則,來對進出流量進行控制,流量劫持后的鏈路如下

image.png

b.檢測確認proxy問題后,通過iptables的反向命令,清除流量劫持規(guī)則,可用命令為 istio-clean-iptables

該方案無需人工參與,可自動檢測問題,快速處理,在網(wǎng)格邊車出現(xiàn)故障的時候也能通過一定程度的服務(wù)降級,最大程度保障服務(wù)的基本可用性

*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。




相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉