共計 1932 個字符,預(yù)計需要花費 5 分鐘才能閱讀完成。
這篇文章主要介紹 kubernetes 中 Istio 的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
一:簡介
隨著微服務(wù)架構(gòu)的普及,越來越多的應(yīng)用已經(jīng)拆分成了微服務(wù)的架構(gòu)。而微服務(wù)架構(gòu)落地的一個難點,就是如何讓服務(wù)和服務(wù)之間進行穩(wěn)定的通信。
部署微服務(wù)之后,如何做服務(wù)的負載均衡、容錯性、服務(wù)監(jiān)控、日志追蹤以及熔斷等功能都需要考慮周全。
為了讓業(yè)務(wù)團隊返璞歸真,將所有精力集中在業(yè)務(wù)代碼而不是配合微服務(wù)組件寫大量非功能性需求的代碼,Istio 應(yīng)運而生。
Istio 是谷歌、IBM、Lyft 等公司貢獻的開源 Service Mesh 組件。它實現(xiàn)的目標就是讓業(yè)務(wù)開發(fā)不再關(guān)注微服務(wù)之間如何調(diào)用、管理、監(jiān)控等非功能性需求,而是讓 Istio 來處理這些問題。Istio 和 Kubernetes 有天然的支持。
Istio 能輕松解決藍綠發(fā)布和金絲雀發(fā)布的問題。
Istio 能夠做到:
1.HTTP、gRPC、WebSocket 和 TCP 流量的自動負載均衡。
2. 通過豐富的路由規(guī)則、重試、故障轉(zhuǎn)移和故障注入對流量行為進行細粒度控制。
3. 支持訪問控制、速率限制和配額的可拔插策略層和配置 API。
4. 自動指標、日志和集群內(nèi)所有流量的跟蹤,包括集群入口和出口。
5. 通過集群中的服務(wù)之間的強身份斷言來實現(xiàn)服務(wù)間的身份驗證。
通過在整個環(huán)境中部署一個特殊的 sidecar 代理(輔助容器),您可以將 Istio 支持添加到服務(wù)中。安裝了 sidecar 代理之后,(微)服務(wù)之間的所有網(wǎng)絡(luò)通信都通過這個代理。此外,所有的網(wǎng)絡(luò)通信都是使用 Istio 的控制平面功能進行配置和管理的。
二:主要功能
1. 流量管理 (Pilot)??刂品?wù)之間的流量和 API 調(diào)用的流向,使得調(diào)用更靈活可靠,并使網(wǎng)絡(luò)在惡劣情況下更加健壯。
2. 可觀察性。通過集成 zipkin 等服務(wù),快速了解服務(wù)之間的依賴關(guān)系,以及它們之間流量的本質(zhì)和流向,從而提供快速識別問題的能力。
3. 策略執(zhí)行 (mixer)。將組織策略應(yīng)用于服務(wù)之間的互動,確保訪問策略得以執(zhí)行,資源在消費者之間良好分配。策略的更改是通過配置網(wǎng)格而不是修改應(yīng)用程序代碼。
4. 服務(wù)身份和安全 (Istio-auth)。為網(wǎng)格中的服務(wù)提供可驗證身份,并提供保護服務(wù)流量的能力,使其可以在不同可信度的網(wǎng)絡(luò)上流轉(zhuǎn)。
除此之外,Istio 針對可擴展性進行了設(shè)計,以滿足不同的部署需要:
1. 平臺支持。Istio 旨在可以在各種環(huán)境中運行,包括跨云、預(yù)置環(huán)境、Kubernetes、Mesos 等。最初專注于 Kubernetes,但很快將支持其他環(huán)境。
2. 集成和定制。策略執(zhí)行組件可以擴展和定制,以便與現(xiàn)有的 ACL、日志、監(jiān)控、配額、審核等解決方案集成。
三:整體架構(gòu)
分為控制平面和數(shù)據(jù)平面兩部分:
控制平面:Pilot, Mixer, Istio-Auth,分別對 Istio 中的服務(wù)做流量管理,策略配置,安全通信等規(guī)則配置
數(shù)據(jù)平面:所有 pod 上的 Envoy,負責(zé)所有規(guī)則的執(zhí)行
主要構(gòu)成組件:
1.Envoy:用于調(diào)解服務(wù)網(wǎng)格中所有服務(wù)的所有入站和出站流量。支持例如動態(tài)服務(wù)發(fā)現(xiàn),負載均衡,故障注入、流量管理等功能。Envoy 以 sidecar 的方式部署在相關(guān)的服務(wù)的 Pod 中。
2.Pilot:Pilot 負責(zé)收集和驗證配置并將其傳播到各種 Istio 組件。
3.Mixer:負責(zé)在服務(wù)網(wǎng)格上執(zhí)行訪問控制和使用策略,并從 Envoy 代理和其他服務(wù)收集遙測數(shù)據(jù)。
4.Istio-Auth:提供強大的服務(wù)間認證和終端用戶認證。
四:Istio 分布式追蹤實現(xiàn)原理
Istio 服務(wù)網(wǎng)格的核心是 Envoy,是一個高性能的開源 L7 代理和通信總線。在 Istio 中,每個微服務(wù)都被注入了 Envoy Sidecar,該實例負責(zé)處理所有傳入和傳出的網(wǎng)絡(luò)流量。因此,每個 Envoy Sidecar 都可以監(jiān)控所有的服務(wù)間 API 調(diào)用,并記錄每次服務(wù)調(diào)用所需的時間以及是否成功完成。
每當微服務(wù)發(fā)起外部調(diào)用時,客戶端 Envoy 會創(chuàng)建一個新的 span。一個 span 代表一組微服務(wù)之間的完整交互過程,從請求者(客戶端)發(fā)出請求開始到接收到服務(wù)方的響應(yīng)為止。
在服務(wù)交互過程中,客戶端會記錄請求的發(fā)起時間和響應(yīng)的接收時間,服務(wù)器端 Envoy 會記錄請求的接收時間和響應(yīng)的返回時間。
每個 Envoy 都會將自己的 span 視圖信息發(fā)布到分布式追蹤系統(tǒng)。當一個微服務(wù)處理請求時,可能需要調(diào)用其他微服務(wù),從而導(dǎo)致因果關(guān)聯(lián)的 span 的創(chuàng)建,形成完整的 trace。這就需要由應(yīng)用來從請求消息中收集和轉(zhuǎn)發(fā)下列 Header。
以上是“kubernetes 中 Istio 的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!