Istio入門實戰(zhàn)

服務(wù)治理形態(tài)

微服務(wù)化通過拆分服務(wù)獨立化邓线,給我們帶來了很多好處淌友,比如獨立部署運維,功能內(nèi)聚自治骇陈,便于敏捷開發(fā)震庭,快速迭代,更好的伸縮性你雌。但是器联,業(yè)務(wù)本身的規(guī)模和復(fù)雜度并沒有變少,同時微服務(wù)化也給開發(fā)和運維帶來新的復(fù)雜性婿崭,比如網(wǎng)絡(luò)可靠性拨拓,通信安全,服務(wù)間調(diào)用鏈追蹤等等氓栈。這時渣磷,就需要引入一些通過工具來做通過的工作,比如服務(wù)注冊發(fā)現(xiàn)授瘦,負(fù)載均衡醋界,鏈路追蹤等等,統(tǒng)稱為服務(wù)治理提完。服務(wù)治理經(jīng)過以下三種形態(tài)的演變:

  • 應(yīng)用程序中包含治理邏輯
    業(yè)務(wù)代碼和治理邏輯耦合形纺,微服務(wù)越多,重復(fù)的代碼越多


    圖1.png
  • 治理邏輯獨立代碼
    治理邏輯抽取成SDK代碼氯葬,減少重復(fù)代碼挡篓,業(yè)務(wù)代碼依賴SDK,業(yè)務(wù)代碼和治理邏輯在一個進程內(nèi)帚称,典型代表Spring Cloud框架


    圖2.png
  • 治理邏輯獨立進程
    治理邏輯再解耦一層官研,從業(yè)務(wù)代碼剝離出,業(yè)務(wù)代碼和治理邏輯以獨立的進程運行闯睹,真正治理邏輯下沉戏羽,典型的Sidecar模式(服務(wù)網(wǎng)格),典型框架技術(shù)就是本文要講的Istio


    圖3.png

Istio 簡介

Istio 是一個開源服務(wù)網(wǎng)格楼吃,它透明地分層到現(xiàn)有的分布式應(yīng)用程序上始花。Istio 的強大功能提供了一種統(tǒng)一且更有效的方式來保護妄讯、連接和監(jiān)控服務(wù)。Istio 是負(fù)載均衡酷宵、服務(wù)到服務(wù)身份驗證和監(jiān)控的途徑——幾乎不需要更改服務(wù)代碼亥贸。

Istio 作為服務(wù)網(wǎng)格技術(shù)具體落地方案,目前已是服務(wù)網(wǎng)格技術(shù)的事實標(biāo)準(zhǔn)浇垦。

2017年5月由Google與IBM聯(lián)合發(fā)布炕置,2018年7月發(fā)布1.0版本,2019年3月發(fā)布1.1版本(生產(chǎn)GA版本)

主要功能

  • 通過豐富的路由規(guī)則男韧、重試朴摊、故障轉(zhuǎn)移和故障注入對流量行為進行細(xì)粒度控制
  • 支持訪問控制、速率限制和配額的可插拔策略層和配置 API
  • HTTP此虑、gRPC甚纲、WebSocket 和 TCP 流量的自動負(fù)載平衡
  • 集群內(nèi)所有流量的自動指標(biāo)、日志和跟蹤朦前,包括集群入口和出口
  • 使用 TLS 加密介杆、強大的基于身份的身份驗證和授權(quán)來保護集群中的服務(wù)到服務(wù)通信

使用場景

Istio 專為可擴展性而設(shè)計,可以處理各種部署需求况既。Istio 的控制平面不僅可以在 Kubernetes 上運行这溅,您可以將部署在該集群中的應(yīng)用程序添加到您的網(wǎng)格中,將網(wǎng)格擴展到其他集群棒仍,甚至連接虛擬機或在 Kubernetes 之外運行的其他端點

Istio 安裝

Linux服務(wù)器上直接下載或者Github Istio release上下載安裝包

curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.13.2 TARGET_ARCH=x86_64 sh -

#解壓
tar -xvf  istio-1.13.2-linux-amd64.tar.gz

cd istio-1.13.2
export PATH=$PWD/bin:$PATH #配置環(huán)境變量

istioctl install --set profile=demo -y

輸出結(jié)果如下:


安裝.png
#查看詳細(xì)命令
istioctl -h

Istio將自動將sidecar容器注入到以標(biāo)記istio-injection=enabled命名空間的容器中

kubectl lable namespace default istio-injection=enabled

安裝可視化組件(可選)

kubectl apply -f samples/addons

查看pod列表


可視化.png

istio 安裝和部署實例都是基于kubernetes的聲明式API

部署示例應(yīng)用

以官網(wǎng)提供的bookinfo為例悲靴,Reviews 包含三個服務(wù)版本,分別對應(yīng)三個Deployment

bookinfo.png
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

應(yīng)用程序啟動完成莫其,查看pod列表


Pod.png

通過kubectl describe pod/xxxx ,可查看每個pod里面癞尚,不僅包含業(yè)務(wù)容器,還包含一個istio-init容器(init容器類型)和istio-proxy容器乱陡,這次sidecar已自動注入了浇揩。

#查看自定義資源
kubect get customresourcedefinition
自定義資源.png

路由規(guī)則配置

istio提供多豐富的對象實現(xiàn)路由規(guī)則配置,比如VirtualService憨颠,DestinationRule胳徽,Gateway,Service Entry 爽彤,WorkloadEntry等养盗。

  • 按權(quán)重訪問review-v2 review-v3版本
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews-route
spec:
  hosts:
  - reviews.default.svc.cluster.local
  http:
  - route:
    - destination:
        host: reviews.default.svc.cluster.local
        subset: v2
      weight: 25
    - destination:
        host: reviews.default.svc.cluster.local
        subset: v3
      weight: 75
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews-destination
spec:
  host: reviews.default.svc.cluster.local
  subsets:
  - name: v2
    labels:
      version: v2
  - name: v3
    labels:
      version: v3

Istio 架構(gòu)概述

架構(gòu)圖

arch.png
  • 數(shù)據(jù)平面
    數(shù)據(jù)平面由一組 sidecar 的代理(Envoy)組成, 與業(yè)務(wù)容器綁定在一起(k8s創(chuàng)建業(yè)務(wù)pod時自動注入pod中)即共享一個pod,真正執(zhí)行流量控制管理适篙,同時會向控制面輸出日志及監(jiān)控數(shù)據(jù)往核。如下所示:


    Istio-pod.png

Envoy 是采用C++實現(xiàn)的高性能網(wǎng)絡(luò)代理服務(wù),由Lyft開源的CNCF項目

  • 控制平臺
    控制平面Istiod通過管理和配置 Envoy 來管理流量,主要包括Pilot,Mixer,Citadel等服務(wù)組件,默認(rèn)安裝在istio-system命名空間


    Pod.png

Pilot 是Istio控制面流量管理和服務(wù)發(fā)現(xiàn)的核心組件嚷节,人稱Istio的司令官
Mixer 負(fù)責(zé)執(zhí)行訪問策略和收集遙測數(shù)據(jù)的組件
Citadel是Istio的安全組件聂儒,主要負(fù)責(zé)證書的頒發(fā)和輪換

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虎锚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子衩婚,更是在濱河造成了極大的恐慌窜护,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谅猾,死亡現(xiàn)場離奇詭異柄慰,居然都是意外死亡,警方通過查閱死者的電腦和手機税娜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藏研,“玉大人敬矩,你說我怎么就攤上這事〈赖玻” “怎么了弧岳?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長业踏。 經(jīng)常有香客問我禽炬,道長,這世上最難降的妖魔是什么勤家? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任腹尖,我火速辦了婚禮,結(jié)果婚禮上伐脖,老公的妹妹穿的比我還像新娘热幔。我一直安慰自己,他們只是感情好讼庇,可當(dāng)我...
    茶點故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布绎巨。 她就那樣靜靜地躺著,像睡著了一般蠕啄。 火紅的嫁衣襯著肌膚如雪场勤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天歼跟,我揣著相機與錄音和媳,去河邊找鬼。 笑死嘹承,一個胖子當(dāng)著我的面吹牛窗价,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叹卷,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼撼港,長吁一口氣:“原來是場噩夢啊……” “哼坪它!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起帝牡,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤往毡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后靶溜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體开瞭,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年罩息,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗤详。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓷炮,死狀恐怖葱色,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娘香,我是刑警寧澤苍狰,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站烘绽,受9級特大地震影響淋昭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜安接,卻給世界環(huán)境...
    茶點故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一翔忽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赫段,春花似錦呀打、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至给涕,卻和暖如春豺憔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背够庙。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工恭应, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耘眨。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓昼榛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剔难。 傳聞我的和親對象是個殘疾皇子胆屿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,587評論 2 350

推薦閱讀更多精彩內(nèi)容