去年在公司實(shí)踐了微服務(wù)掺栅,今年逐步完善了整個(gè)架構(gòu)體系氧卧,包括PaaS平臺(tái)的上線和完善沙绝,7月份的時(shí)候參加螞蟻的一個(gè)技術(shù)分享會(huì)闪檬,了解他們?cè)谕苿?dòng)服務(wù)網(wǎng)格购笆,后面逐步關(guān)注這塊同欠,接觸到Istio样傍。這里做一個(gè)記錄。
微服務(wù)并不像過去那樣新鮮和熱铺遂,這絕對(duì)是一件好事。因?yàn)槲覀円呀?jīng)發(fā)展到基于Kubernetes娃循,Openshift和其他各種集裝箱管理系統(tǒng)的穩(wěn)定可靠的領(lǐng)先地步,而不是生活在前沿集裝箱平臺(tái)的時(shí)代“聘現(xiàn)在笛质,基于這些容器編排提供了很多核心功能捞蚂,如負(fù)載平衡妇押,服務(wù)發(fā)現(xiàn)和安全性,這就是在基礎(chǔ)架構(gòu)上創(chuàng)建所謂的服務(wù)網(wǎng)格姓迅。
Istio就是這樣的一個(gè)服務(wù)網(wǎng)絡(luò)產(chǎn)品敲霍,它是僅次于谷歌Kubernetes的開源貢獻(xiàn)。將Istio稱為熱門話題是輕描淡寫的肩杈。
Istio是控制面板扩然,Envoy是數(shù)據(jù)面板
服務(wù)網(wǎng)格使分布式系統(tǒng)的核心功能(如服務(wù)之間的通信)更易于配置和管理界睁。所有應(yīng)用程序所需的通用網(wǎng)絡(luò)功能集(例如處理超時(shí)兵拢,重試,速率限制访惜,路由和負(fù)載平衡)都可以集中處理腻扇,因此每個(gè)應(yīng)用程序無需單獨(dú)處理這些難題疾牲。
這有助于保持業(yè)務(wù)邏輯分離,因此開發(fā)人員可以專注于使用戶滿意衙解,而不必?fù)?dān)心堆棧的較低層阳柔。Istio通過Envoy提供這套解決方案,數(shù)據(jù)面板處理服務(wù)網(wǎng)格中的所有流量蚓峦,以及構(gòu)成管理策略和配置的控制面板的少數(shù)應(yīng)用程序舌剂,即:
- Pilot - 流量管制 俗稱飛行員
- Mixer - 后端集成
- Citadel - 身份驗(yàn)證和授權(quán)
- Galley - 配置驗(yàn)證
Envoy微服務(wù)代理
Envoy是一個(gè)代理,類似于HAProxy和Nginx暑椰,但專為微服務(wù)架構(gòu)而設(shè)計(jì)霍转。具有以下功能:
- 動(dòng)態(tài)重新配置/熱重啟
- 分階段/金絲雀部署
- 高級(jí)負(fù)載平衡
- 請(qǐng)求路由
- 健康檢查
- 分布式跟蹤
Envoy管理內(nèi)部和外部服務(wù)通信的所有路由要求瑟慈,外部服務(wù)連接受益于故障恢復(fù)功能朋凉,例如超時(shí),重試和斷路器顽冶。Envoy被部署為應(yīng)用程序pod中的sidecar容器召夹,并通過gRPC從Istio控制面板接收其所有配置岩喷。
進(jìn)出應(yīng)用程序的數(shù)據(jù)包被Envoy使用iptables攔截,這允許強(qiáng)大的路由控制和流量可見性监憎,提供詳細(xì)的指標(biāo)纱意。Envoy旨在簡(jiǎn)化高度分布式,面向服務(wù)架構(gòu)中的網(wǎng)絡(luò)和可觀察性的困難鲸阔。高性能和低延遲是任何有價(jià)值的代理的基本特征偷霉,因此使用C ++編寫Envoy是完全合理的迄委。
通過Pilot和Mixer進(jìn)行流量控制和遙測(cè)
Mixer和Pilot是利用Istio服務(wù)網(wǎng)格最重要特征所不可或缺的,即:流量管理和遙測(cè)處理类少。
Pilot
Envoy側(cè)面車從Pilot接收策略以執(zhí)行規(guī)則叙身,例如允許服務(wù)A與服務(wù)B通話,但不允許服務(wù)A與服務(wù)C通話.Pilot提供請(qǐng)求路由和負(fù)載平衡的配置設(shè)置硫狞,以支持分階段發(fā)布曲梗,藍(lán)/綠部署和A / B測(cè)試。
[圖片上傳失敗...(image-4cf5a0-1540467207337)]
由Pilot管理的路由規(guī)則允許Envoy根據(jù)分配給每個(gè)版本的HTTP標(biāo)頭和權(quán)重等條件選擇指定的APP版本妓忍。
[圖片上傳失敗...(image-3f9131-1540467207337)]
來自底層集群基礎(chǔ)設(shè)施比如k8s的服務(wù)注冊(cè)表通過Pilot 發(fā)送到 Envoy 邊車共享給整個(gè)服務(wù)網(wǎng)格,用于動(dòng)態(tài)服務(wù)發(fā)現(xiàn)愧旦。也就是說世剖,Istio不負(fù)責(zé)服務(wù)注冊(cè),服務(wù)注冊(cè)到K8s中笤虫,這樣避免了服務(wù)注冊(cè)的單點(diǎn)風(fēng)險(xiǎn)旁瘫。
Mixer
Mixer有一組支持的適配器,它與Prometheus和Stackdriver等基礎(chǔ)設(shè)施后端對(duì)話琼蚯,以處理和存儲(chǔ)指標(biāo)酬凳,跟蹤和記錄。Envoy將遙測(cè)數(shù)據(jù)發(fā)送到Mixer遭庶,然后Mixer將這些值發(fā)送到配置的后端宁仔。
stio 首先是一個(gè)服務(wù)網(wǎng)絡(luò),但是Istio又不僅僅是服務(wù)網(wǎng)格: 在 Linkerd峦睡, Envoy 這樣的典型服務(wù)網(wǎng)格之上翎苫,Istio提供了一個(gè)完整的解決方案,為整個(gè)服務(wù)網(wǎng)格提供行為洞察和操作控制榨了,以滿足微服務(wù)應(yīng)用程序的多樣化需求煎谍。
Istio在服務(wù)網(wǎng)絡(luò)中統(tǒng)一提供了許多關(guān)鍵功能(以下內(nèi)容來自官方文檔):
流量管理:控制服務(wù)之間的流量和API調(diào)用的流向,使得調(diào)用更可靠龙屉,并使網(wǎng)絡(luò)在惡劣情況下更加健壯呐粘。
可觀察性:了解服務(wù)之間的依賴關(guān)系,以及它們之間流量的本質(zhì)和流向转捕,從而提供快速識(shí)別問題的能力作岖。
策略執(zhí)行:將組織策略應(yīng)用于服務(wù)之間的互動(dòng),確保訪問策略得以執(zhí)行五芝,資源在消費(fèi)者之間良好分配鳍咱。策略的更改是通過配置網(wǎng)格而不是修改應(yīng)用程序代碼。
服務(wù)身份和安全:為網(wǎng)格中的服務(wù)提供可驗(yàn)證身份与柑,并提供保護(hù)服務(wù)流量的能力谤辜,使其可以在不同可信度的網(wǎng)絡(luò)上流轉(zhuǎn)蓄坏。
除此之外,Istio針對(duì)可擴(kuò)展性進(jìn)行了設(shè)計(jì)丑念,以滿足不同的部署需要:
平臺(tái)支持:Istio旨在在各種環(huán)境中運(yùn)行涡戳,包括跨云, 預(yù)置脯倚,Kubernetes渔彰,Mesos等。最初專注于Kubernetes推正,但很快將支持其他環(huán)境恍涂。
集成和定制:策略執(zhí)行組件可以擴(kuò)展和定制,以便與現(xiàn)有的ACL植榕,日志再沧,監(jiān)控,配額尊残,審核等解決方案集成炒瘸。
這些功能極大的減少了應(yīng)用程序代碼,底層平臺(tái)和策略之間的耦合寝衫,使微服務(wù)更容易實(shí)現(xiàn)顷扩。
istio架構(gòu)圖
Istio的關(guān)鍵功能包括:
- HTTP/1.1,HTTP/2慰毅,gRPC和TCP流量的自動(dòng)區(qū)域感知負(fù)載平衡和故障切換隘截。
- 通過豐富的路由規(guī)則,容錯(cuò)和故障注入汹胃,對(duì)流行為的細(xì)粒度控制技俐。
- 支持訪問控制,速率限制和配額的可插拔策略層和配置API统台。
- 集群內(nèi)所有流量的自動(dòng)量度雕擂,日志和跟蹤,包括集群入口和出口贱勃。
- 安全的服務(wù)到服務(wù)身份驗(yàn)證井赌,在集群中的服務(wù)之間具有強(qiáng)大的身份標(biāo)識(shí)。
總結(jié)
在沒有像Istio這樣的服務(wù)網(wǎng)格的情況下管理分階段部署和應(yīng)用程序版本并非易事贵扰。Envoy和Istio控制面板組件通過編碼請(qǐng)求路由配置仇穗,并將該控制權(quán)交給開發(fā)人員來支持組織的DevOps計(jì)劃。
Istio網(wǎng)格的另一個(gè)重要特性是您無需安裝或使用所有組件戚绕。我們建議利用Istio的跟蹤功能來可視化流量在您的服務(wù)和網(wǎng)絡(luò)之間流動(dòng)的方式纹坐。這是開始使用Istio的完美方式,因?yàn)樗梢钥焖佥p松地進(jìn)行配置舞丛,并且無需更改您的微服務(wù)即可開始受益于此遙測(cè)耘子。