istio x230-1

Istio簡(jiǎn)介

Istio提供了完整的非侵入式的微服務(wù)治理解決方案,解決微服務(wù)的管理梭稚、網(wǎng)絡(luò)連接以及安全管理等應(yīng)用網(wǎng)絡(luò)治理問(wèn)題
無(wú)需修改代碼就能夠?qū)崿F(xiàn)微服務(wù)的負(fù)載均衡,服務(wù)與服務(wù)之間的認(rèn)證授權(quán)以及流量的監(jiān)控和治理。從整個(gè)基礎(chǔ)設(shè)施角度上看,可以將它理解為PaaS平臺(tái)上的一個(gè)面向微服務(wù)管理平臺(tái)的補(bǔ)充串远。


image

Istio與Kubernetes

Kubernetes提供了部署、升級(jí)和有限的運(yùn)行流量管理能力儿惫,利用service的機(jī)制來(lái)做服務(wù)注冊(cè)和發(fā)現(xiàn)澡罚,轉(zhuǎn)發(fā),通過(guò)kubeproxy有一定的轉(zhuǎn)發(fā)和負(fù)載均衡能力肾请。但并不具備上層如熔斷留搔、限流、降級(jí)铛铁、調(diào)用鏈治理等能力隔显。
Istio則很好的補(bǔ)齊了Kubernetes在微服務(wù)治理上的這部分能力却妨,同時(shí)是基于Kubernetes構(gòu)建的,但不是像SpringCloud Netflix等完全重新做一套括眠。


image

Istio流量管理能力介紹

Istio彪标,用于連接、保護(hù)掷豺、控制和觀測(cè)服務(wù)

1捞烟、 服務(wù)連接

image.gif

如上圖所示的Istio架構(gòu)圖,讓我們關(guān)注控制面的Pilot当船,它是Istio實(shí)現(xiàn)流量管理的核心組件题画。
而在數(shù)據(jù)面,每個(gè)Pod德频,都會(huì)被注入1個(gè)Proxy婴程。Istio通過(guò)Pilot下發(fā)配置信息給數(shù)據(jù)面每1個(gè)Pod的Proxy,從而通過(guò)這些Proxy抱婉,間接地控制每1個(gè)Pod之間以及和外部的連接档叔。Proxy通常采用另一個(gè)知名的開(kāi)源項(xiàng)目Envoy來(lái)實(shí)現(xiàn)。
1個(gè)Pilot和(N+N)個(gè)(Service+Proxy)組合蒸绩,便形成了Service Mesh衙四,即服務(wù)網(wǎng)格。有了這一套服務(wù)網(wǎng)格系統(tǒng)患亿,對(duì)服務(wù)之間的流量進(jìn)行管理传蹈,便不在話下。

2步藕、流量管理

從服務(wù)間的流量管理角度而言惦界,Istio可以實(shí)現(xiàn)這4項(xiàng)功能:請(qǐng)求路由、服務(wù)發(fā)現(xiàn)和負(fù)載均衡咙冗、故障處理和故障注入沾歪。

A.請(qǐng)求路由

image

Istio引入了Version的概念,可以通過(guò)(Current Version雾消,Canary Version)對(duì)服務(wù)進(jìn)行進(jìn)一步細(xì)分灾搏。基于這種劃分立润,通過(guò)Pilot狂窑,可以下發(fā)配置到Service A的Proxy,使得其95%的流量路由至Service B的Current版本桑腮,5%的流量路由至Service B的Canary版本泉哈。當(dāng)然也可以選擇雨露均沾,各分50%流量,或者霸道總裁丛晦,讓Canary版本占有100%的流量巨缘。


image

除了按照百分比在不同版本之間分發(fā)流量,你還可以按照請(qǐng)求內(nèi)容采呐,將請(qǐng)求路由至不同的版本。
這一切改變搁骑,都只需要你改動(dòng)一個(gè)叫VirtualService的配置文件斧吐,眨個(gè)眼的功夫,Istio就已經(jīng)通過(guò)Pilot幫你把新的配置下發(fā)下去了仲器。

** B.****服務(wù)發(fā)現(xiàn)和負(fù)載均衡**


image.gif

服務(wù)網(wǎng)格存在3個(gè)生命周期的動(dòng)態(tài)循環(huán):服務(wù)注冊(cè)煤率、服務(wù)發(fā)現(xiàn)、負(fù)載均衡乏冀。
kubernetes容器管理平臺(tái)已經(jīng)提供了服務(wù)注冊(cè)表蝶糯,以跟蹤服務(wù)的負(fù)載實(shí)例,所以Pilot能輕而易舉地獲知服務(wù)網(wǎng)格內(nèi)的所有服務(wù)注冊(cè)信息辆沦,并將這些信息告知所有服務(wù)里的Proxy昼捍,Proxy根據(jù)這些信息執(zhí)行服務(wù)發(fā)現(xiàn),動(dòng)態(tài)更新其負(fù)載均衡池肢扯。一個(gè)服務(wù)通常有多個(gè)負(fù)載實(shí)例妒茬,Service A請(qǐng)求Service B時(shí),可以配置不同的負(fù)載均衡模式:輪詢(xún)蔚晨、隨機(jī)和帶權(quán)重的最少請(qǐng)求乍钻。
假設(shè)此時(shí)Service B的某個(gè)負(fù)載實(shí)例出現(xiàn)故障,因?yàn)镾ervice A中的Proxy會(huì)定期地執(zhí)行服務(wù)發(fā)現(xiàn)铭腕,從而能及時(shí)將故障實(shí)例從其負(fù)載均衡池里排出银择。

C.故障處理

Envoy 提供了一套開(kāi)箱即用,可選的故障處理功能累舷,對(duì)應(yīng)用中的服務(wù)大有裨益浩考。這些功能包括:

  • 超時(shí)機(jī)制
  • 具備超時(shí)預(yù)算,并進(jìn)行有限重試被盈,重試之間的時(shí)長(zhǎng)可抖動(dòng)
  • 并發(fā)連接數(shù)和上游服務(wù)請(qǐng)求數(shù)限制
  • 對(duì)負(fù)載均衡池中的每個(gè)成員進(jìn)行主動(dòng)(定期)運(yùn)行健康檢查
  • 細(xì)粒度熔斷器(被動(dòng)健康檢查)- 適用于負(fù)載均衡池中的每個(gè)實(shí)例

以Service A請(qǐng)求調(diào)用Service B為例怀挠。

對(duì)于功能1。若Service B明確地知道10s以后的超時(shí)害捕,必定會(huì)帶來(lái)失敗绿淋,那將超時(shí)時(shí)長(zhǎng)縮短,使得Service A可以更快得知結(jié)果并作出應(yīng)對(duì)尝盼,不失為一個(gè)明智之舉吞滞。

對(duì)于功能2。對(duì)超載的Service B來(lái)說(shuō),重試之間的抖動(dòng)極大的降低了重試造成的影響裁赠,而超時(shí)預(yù)算確保Service A在可預(yù)測(cè)的時(shí)間范圍內(nèi)獲得響應(yīng)(成功/失數钅)。

對(duì)于功能3佩捞。限制Service A或其他服務(wù)對(duì)Service B的連接數(shù)和請(qǐng)求數(shù)绞幌,可以使得Service B免于遭遇DDOS攻擊,或承受過(guò)重的流量負(fù)擔(dān)而崩潰一忱。

對(duì)于功能4和5莲蜘。主動(dòng)和被動(dòng)健康檢查的組合最大限度地減少了在負(fù)載平衡池中訪問(wèn)不健康實(shí)例的機(jī)會(huì)。當(dāng)與平臺(tái)級(jí)健康檢查(例如由 Kubernetes 或 Mesos 支持的檢查)相結(jié)合時(shí)帘营,應(yīng)用程序可以確保將不健康的負(fù)載實(shí)例快速地從服務(wù)網(wǎng)格中去除票渠,從而最小化請(qǐng)求失敗和延遲產(chǎn)生影響。

總之芬迄,這些功能使得服務(wù)網(wǎng)格能夠耐受故障節(jié)點(diǎn)问顷,并防止本地故障導(dǎo)致的其他節(jié)點(diǎn)的穩(wěn)定性下降。

D.故障注入

雖然Proxy為在Istio上運(yùn)行的服務(wù)提供了上節(jié)所言的大量故障處理機(jī)制禀梳,但測(cè)試整個(gè)服務(wù)網(wǎng)格所組成應(yīng)用的端到端的故障恢復(fù)能力依然是必須的杜窄。錯(cuò)誤配置的故障恢復(fù)策略(例如,跨服務(wù)調(diào)用的不兼容/限制性超時(shí))可能導(dǎo)致應(yīng)用程序中的關(guān)鍵服務(wù)持續(xù)不可用算途,從而破壞用戶體驗(yàn)羞芍。

Istio 能在不殺死負(fù)載實(shí)例的情況下,將協(xié)議特定的故障注入到網(wǎng)絡(luò)中郊艘,在 TCP 層制造數(shù)據(jù)包的延遲或損壞荷科。我們的理由是,無(wú)論網(wǎng)絡(luò)級(jí)別的故障如何纱注,應(yīng)用層觀察到的故障都是一樣的畏浆,并且可以在應(yīng)用層注入更有意義的故障(例如,HTTP經(jīng)典的4xx和5xx錯(cuò)誤代碼)狞贱,以檢驗(yàn)和改善應(yīng)用的韌性刻获。

運(yùn)維人員可以為符合特定條件的請(qǐng)求配置故障,還可以進(jìn)一步限制遭受故障的請(qǐng)求的百分比瞎嬉⌒保可以注入兩種類(lèi)型的故障:延遲和中斷。延遲是計(jì)時(shí)故障氧枣,模擬網(wǎng)絡(luò)延遲上升或上游服務(wù)超載的情況沐兵。中斷是模擬上游服務(wù)的崩潰故障。中斷通常以 HTTP 錯(cuò)誤代碼或 TCP 連接失敗的形式表現(xiàn)便监。

依舊以Service A請(qǐng)求調(diào)用Service B為例扎谎。

若給Service B設(shè)定了10s的延時(shí)或503中斷碳想,則Service A將至少10s后才能得到請(qǐng)求的響應(yīng)或請(qǐng)求的響應(yīng)為503錯(cuò)誤,通過(guò)多種場(chǎng)景覆蓋測(cè)試毁靶,可以得到Service A面對(duì)這些場(chǎng)景時(shí)的綜合表現(xiàn)情況胧奔,從而做出針對(duì)性的改良,增加其韌性预吆。

3龙填、Istio實(shí)踐

Istio有4個(gè)配置文件,幫我們?nèi)轿坏囟ㄖ埔陨纤辛髁抗芾硇枨? VirtualService, DestinationRule, ServiceEntry和 Gateway:

  • 通過(guò)配置VirtualService拐叉,可以實(shí)現(xiàn)請(qǐng)求路由的功能岩遗;
  • 通過(guò)配置DestinationRule,可以實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和負(fù)載均衡巷嚣、故障處理和故障注入的功能;
  • 通過(guò)配置ServiceEntry钳吟,讓服務(wù)網(wǎng)格內(nèi)的服務(wù)廷粒,可以看到外面的世界;
  • 通過(guò)配置Gateway红且,讓服務(wù)網(wǎng)格的服務(wù)坝茎,可以被全世界看到;
    有了以上4大法寶暇番,我們對(duì)服務(wù)網(wǎng)格進(jìn)行流量管理的所有需求嗤放,都可以被滿足了。

75%的概率走向helloworld的v1版本壁酬,以25%走向v2版本

apiVersion:networking.Istio.io/v1alpha3
kind:VirtualService
metadata:
  name:helloworld
spec:
  hosts:
    - helloworld
  http:
  - route:
    - destination:
        host:helloworld
        subset:v1
      weight:75
    - destination:
        host: helloworld
        subset: v2
     weight: 25

apiVersion:networking.Istio.io/v1alpha3
kind:DestinationRule
metadata:
  name: helloworld
spec:
  host: helloworld
  subsets:
  - name:v1
    labels:
      version: v1
  - name: v2
   labels:
      version: v2

訪問(wèn)www.baidu.com來(lái)獲取一些信息

apiVersion:networking.Istio.io/v1alpha3
kind:ServiceEntry
metadata:
  name: baiduapis
spec:
  hosts:
  - "*.baidu.com"
  ports:
  - number:443
    name:https
    protocol:http

apiVersion:networking.Istio.io/v1alpha3
kind:DestinationRule
metadata:
 name: baiduapis
spec:
  host: "*.baidu.com"

提供外部路由

apiVersion:networking.Istio.io/v1alpha3
kind:Gateway
metadata:
  name: helloworld-gateway
spec:
    selector:
      Istio:ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - 'helloworld.com'

apiVersion:networking.Istio.io/v1alpha3
kind:VirtualService
metadata:
 name: bookinfo
spec:
 hosts:
    - 'helloworld.com'
  gateways:
  - helloworld-gateway
  http:
  - route:
   - destination:
        host: helloworld
        port:
          number: 9080
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末次酌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舆乔,更是在濱河造成了極大的恐慌岳服,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件希俩,死亡現(xiàn)場(chǎng)離奇詭異吊宋,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)颜武,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)璃搜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人鳞上,你說(shuō)我怎么就攤上這事这吻。” “怎么了篙议?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵橘原,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)趾断,這世上最難降的妖魔是什么拒名? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮芋酌,結(jié)果婚禮上增显,老公的妹妹穿的比我還像新娘。我一直安慰自己脐帝,他們只是感情好同云,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著堵腹,像睡著了一般炸站。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疚顷,一...
    開(kāi)封第一講書(shū)人閱讀 52,246評(píng)論 1 308
  • 那天旱易,我揣著相機(jī)與錄音,去河邊找鬼腿堤。 笑死阀坏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笆檀。 我是一名探鬼主播忌堂,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼酗洒!你這毒婦竟也來(lái)了士修?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤樱衷,失蹤者是張志新(化名)和其女友劉穎李命,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體箫老,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡封字,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耍鬓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阔籽。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖牲蜀,靈堂內(nèi)的尸體忽然破棺而出笆制,到底是詐尸還是另有隱情,我是刑警寧澤涣达,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布在辆,位于F島的核電站证薇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏匆篓。R本人自食惡果不足惜浑度,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸦概。 院中可真熱鬧箩张,春花似錦、人聲如沸窗市。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咨察。三九已至论熙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摄狱,已是汗流浹背脓诡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留二蓝,地道東北人誉券。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓指厌,卻偏偏與公主長(zhǎng)得像刊愚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子踩验,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359