服務網格自動故障檢測及流量切換方案
本文分享自天翼云開發者社區《服務網格自動故障檢測及流量切換方案》,作者:s****n
隨著云原生技術的發展,越來越多的應用采用容器,微服務技術,以istio為代表的服務網格就是其中最廣泛使用的一種。它在業務容器創建時,自動向業務服務的pod中注入proxy容器邊車,將流入和流出業務容器的網絡流量全部劫持到proxy容器,經由proxy容器處理后再進行下一步轉發。
Proxy容器的處理規則通過istiod控制面下發,主要分為流量控制、安全、可觀測性三大類。以可觀測性為例的大量規則都僅對流經的數據進行統計,監控,鏈路追蹤等附加操作,不影響和改變業務本身的請求。但是當proxy容器自身或其依賴的服務出現問題時,因其流量劫持動作,往往會造成整個服務不可用。
目前處理此類問題的方法,以人工干預為主,當服務不可用時,通過告警通知運維人員,運維人員進行現場問題定位及處理。在有proxy邊車的場景下,若proxy問題不能快速解決,運維人員也經常需要手動去除proxy容器邊車,先恢復業務流量再做細致排查。如果能自動化檢測proxy故障并進行及時處理,會大大提供微服務框架下的服務可用性,減少故障帶來的損失及人力排查成本
實現方案如下:
整體結構:
具體方法:
1.在istio控制面加入故障檢測及流量阻斷模塊‘hot-switch’.
2.在istio的邊車代理proxy內部加入故障檢測命令,并與控制面故障檢查模塊通信,具體檢測命令例如:
a.Watch相關pod的proxy容器狀態,當容器狀態為fail時,表示proxy容易已經不再存活;
b.通過檢查proxy容器的15021 health端口,若返回值false,則proxy存活但不健康等等;
3.自動檢測確認代理proxy問題后,hot-switch通過進入pod執行iptables相關命令,停止proxy的流量劫持,將流量模式由proxy控制管理,改為直通業務容器
a.在pod啟動前,proxy進行流量劫持的過程:首先運行 Init 容器,Init 容器用于設置 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獲得動態的規則,來對進出流量進行控制,流量劫持后的鏈路如下
b.檢測確認proxy問題后,通過iptables的反向命令,清除流量劫持規則,可用命令為 istio-clean-iptables
該方案無需人工參與,可自動檢測問題,快速處理,在網格邊車出現故障的時候也能通過一定程度的服務降級,最大程度保障服務的基本可用性
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。