Istio+K8s,微服務(wù)的雙劍合璧!
原創(chuàng)【51CTO.com原創(chuàng)稿件】很多企業(yè)都會(huì)面臨從單體應(yīng)用向微服務(wù)架構(gòu)的轉(zhuǎn)型,也會(huì)衍生出更多的分布式場(chǎng)景需求。隨著規(guī)模和復(fù)雜度的不斷增長(zhǎng),如何才能更好的理解、高效的管理服務(wù)網(wǎng)格呢?
本節(jié)篇幅較長(zhǎng),我們主要圍繞以下幾點(diǎn)來(lái)展開(kāi):
- 什么是服務(wù)網(wǎng)格?
- 初識(shí) Istio
- 核心特性
- 流程架構(gòu)
- 核心模塊
- Envoy 進(jìn)階
- 方案暢想
對(duì)許多公司來(lái)說(shuō),Docker 和 Kubernetes 這樣的工具已經(jīng)解決了部署問(wèn)題,或者說(shuō)幾乎解決了。
但他們還沒(méi)有解決運(yùn)行時(shí)的問(wèn)題,這就是服務(wù)網(wǎng)格(Service Mesh)的由來(lái)。
什么是服務(wù)網(wǎng)格?
服務(wù)網(wǎng)格(Service Mesh)用來(lái)描述組成這些應(yīng)用程序的微服務(wù)網(wǎng)絡(luò)以及它們之間的交互。
它是一個(gè)用于保證服務(wù)間安全、快速、可靠通信的網(wǎng)絡(luò)代理組件,是隨著微服務(wù)和云原生應(yīng)用興起而誕生的基礎(chǔ)設(shè)施層。
它通常以輕量級(jí)網(wǎng)絡(luò)代理的方式同應(yīng)用部署在一起。比如 Sidecar 方式,如下圖所示:
我們對(duì)上圖做個(gè)解釋?zhuān)篠ervice Mesh 設(shè)計(jì)一般劃分為兩個(gè)模塊,控制面和數(shù)據(jù)面。對(duì)于應(yīng)用來(lái)說(shuō),所有流量都會(huì)經(jīng)過(guò)數(shù)據(jù)面進(jìn)行轉(zhuǎn)發(fā)。
順利轉(zhuǎn)發(fā)的前提:數(shù)據(jù)面需要知道轉(zhuǎn)發(fā)的目標(biāo)地址,目標(biāo)地址本身是由一些業(yè)務(wù)邏輯來(lái)決定的(例如服務(wù)發(fā)現(xiàn))。
所以自然而然地,我們可以推斷控制面需要負(fù)責(zé)管理數(shù)據(jù)面能正常運(yùn)行所需要的一些配置:
- 需要知道某次請(qǐng)求轉(zhuǎn)發(fā)去哪里:服務(wù)發(fā)現(xiàn)配置。
- 外部流量進(jìn)入需要判斷是否已經(jīng)達(dá)到服務(wù)流量上限:限流配置。
- 依賴(lài)服務(wù)返回錯(cuò)誤時(shí),需要能夠執(zhí)行相應(yīng)的熔斷邏輯:熔斷配置。
Serivce Mesh 可以看作是一個(gè)位于 TCP/IP 之上的網(wǎng)絡(luò)模型,抽象了服務(wù)間可靠通信的機(jī)制。
但與 TCP 不同,它是面向應(yīng)用的,為應(yīng)用提供了統(tǒng)一的可視化和控制。
Service Mesh 具有如下優(yōu)點(diǎn):
- 屏蔽分布式系統(tǒng)通信的復(fù)雜性(負(fù)載均衡、服務(wù)發(fā)現(xiàn)、認(rèn)證授權(quán)、監(jiān)控追蹤、流量控制等等),服務(wù)只用關(guān)注業(yè)務(wù)邏輯。
- 真正的語(yǔ)言無(wú)關(guān),服務(wù)可以用任何語(yǔ)言編寫(xiě),只需和 Service Mesh 通信即可。
- 對(duì)應(yīng)用透明,Service Mesh 組件可以單獨(dú)升級(jí)。
Service Mesh 目前也面臨一些挑戰(zhàn):
- Service Mesh 組件以代理模式計(jì)算并轉(zhuǎn)發(fā)請(qǐng)求,一定程度上會(huì)降低通信系統(tǒng)性能,并增加系統(tǒng)資源開(kāi)銷(xiāo)。
- Service Mesh 組件接管了網(wǎng)絡(luò)流量,因此服務(wù)的整體穩(wěn)定性依賴(lài)于 Service Mesh,同時(shí)額外引入的大量 Service Mesh 服務(wù)實(shí)例的運(yùn)維和管理也是一個(gè)挑戰(zhàn)。
隨著服務(wù)網(wǎng)格的規(guī)模和復(fù)雜性不斷的增長(zhǎng),它將會(huì)變得越來(lái)越難以理解和管理。
Service Mesh 的需求包括服務(wù)發(fā)現(xiàn)、負(fù)載均衡、故障恢復(fù)、度量和監(jiān)控等。
Service Mesh 通常還有更復(fù)雜的運(yùn)維需求,比如 A/B 測(cè)試、金絲雀發(fā)布、速率限制、訪(fǎng)問(wèn)控制和端到端認(rèn)證。
Service Mesh 的出現(xiàn),彌補(bǔ)了 Kubernetes 在微服務(wù)的連接、管理和監(jiān)控方面的短板,為 Kubernetes 提供更好的應(yīng)用和服務(wù)管理。
因此,Service Mesh 的代表 Istio 一經(jīng)推出,就被認(rèn)為是可以和 Kubernetes 形成雙劍合璧效果的微服務(wù)管理的利器,受到了業(yè)界的推崇。
Istio 提供了對(duì)整個(gè)服務(wù)網(wǎng)格的行為洞察和操作控制的能力,以及一個(gè)完整的滿(mǎn)足微服務(wù)應(yīng)用各種需求的解決方案。
Istio 主要采用一種一致的方式來(lái)保護(hù)、連接和監(jiān)控微服務(wù),降低了管理微服務(wù)部署的復(fù)雜性。
初識(shí) Istio
Istio 發(fā)音「意絲帝歐」,重音在意上。官方給出的 Istio 的總結(jié),簡(jiǎn)單明了:
- Istio lets you connect, secure, control, and observe services.
連接、安全、控制和觀測(cè)服務(wù)。
簡(jiǎn)單來(lái)說(shuō),Istio 針對(duì)現(xiàn)有的服務(wù)網(wǎng)格,提供一種簡(jiǎn)單的方式將連接、安全、控制和觀測(cè)的模塊,與應(yīng)用程序或服務(wù)隔離開(kāi)來(lái),從而開(kāi)發(fā)人員可以將更多的精力放在核心的業(yè)務(wù)邏輯上。
以下是 Istio 的核心功能:
- HTTP、gRPC、WebSocket 和 TCP 流量的自動(dòng)負(fù)載均衡。
- 通過(guò)豐富的路由規(guī)則、重試、故障轉(zhuǎn)移和故障注入,可以對(duì)流量行為進(jìn)行細(xì)粒度控制。
- 可插入的策略層和配置 API,支持訪(fǎng)問(wèn)控制、速率限制和配額。
- 對(duì)出入集群入口和出口中所有流量的自動(dòng)度量指標(biāo)、日志記錄和追蹤。
- 通過(guò)強(qiáng)大的基于身份的驗(yàn)證和授權(quán),在集群中實(shí)現(xiàn)安全的服務(wù)間通信。
從較高的層面來(lái)說(shuō),Istio 有助于降低這些部署的復(fù)雜性,并減輕開(kāi)發(fā)團(tuán)隊(duì)的壓力。
它是一個(gè)完全開(kāi)源的服務(wù)網(wǎng)格,作為透明的一層接入到現(xiàn)有的分布式應(yīng)用程序里。它也是一個(gè)平臺(tái),擁有可以集成任何日志、遙測(cè)和策略系統(tǒng)的 API 接口。
Istio 多樣化的特性使我們能夠成功且高效地運(yùn)行分布式微服務(wù)架構(gòu),并提供保護(hù)、連接和監(jiān)控微服務(wù)的統(tǒng)一方法。
核心特性
Istio 以統(tǒng)一的方式提供了許多跨服務(wù)網(wǎng)格的關(guān)鍵功能:
①流量管理
Istio 簡(jiǎn)單的規(guī)則配置和流量路由允許我們控制服務(wù)之間的流量和 API 調(diào)用過(guò)程。
Istio 簡(jiǎn)化了服務(wù)級(jí)屬性(如熔斷器、超時(shí)和重試)的配置,并且讓它輕而易舉的執(zhí)行重要的任務(wù)(如 A/B 測(cè)試、金絲雀發(fā)布和按流量百分比劃分的分階段發(fā)布)。
有了更好的對(duì)流量的可視性和開(kāi)箱即用的故障恢復(fù)特性,我們就可以在問(wèn)題產(chǎn)生之前捕獲它們,無(wú)論面對(duì)什么情況都可以使調(diào)用更可靠,網(wǎng)絡(luò)更健壯。
②安全
Istio 的安全特性解放了開(kāi)發(fā)人員,使其只需要專(zhuān)注于應(yīng)用程序級(jí)別的安全。
Istio 提供了底層的安全通信通道,并為大規(guī)模的服務(wù)通信管理認(rèn)證、授權(quán)和加密。
有了 Istio,服務(wù)通信在默認(rèn)情況下就是受保護(hù)的,可以在跨不同協(xié)議和運(yùn)行時(shí)的情況下實(shí)施一致的策略,而所有這些都只需要很少甚至不需要修改應(yīng)用程序。
Istio 是獨(dú)立于平臺(tái)的,可以與 Kubernetes(或基礎(chǔ)設(shè)施)的網(wǎng)絡(luò)策略一起使用。
但它更強(qiáng)大,能夠在網(wǎng)絡(luò)和應(yīng)用層面保護(hù) Pod 到 Pod 或者服務(wù)到服務(wù)之間的通信。
③可觀察性
Istio 健壯的追蹤、監(jiān)控和日志特性讓我們能夠深入的了解服務(wù)網(wǎng)格部署。通過(guò) Istio 的監(jiān)控能力,可以真正的了解到服務(wù)的性能是如何影響上游和下游的。
而它的定制 Dashboard 提供了對(duì)所有服務(wù)性能的可視化能力,并讓我們看到它如何影響其他進(jìn)程。
Istio 的 Mixer 組件負(fù)責(zé)策略控制和遙測(cè)數(shù)據(jù)收集。它提供了后端抽象和中介,將一部分 Istio與后端的基礎(chǔ)設(shè)施實(shí)現(xiàn)細(xì)節(jié)隔離開(kāi)來(lái),并為運(yùn)維人員提供了對(duì)網(wǎng)格與后端基礎(chǔ)實(shí)施之間交互的細(xì)粒度控制。
所有這些特性都使我們能夠更有效地設(shè)置、監(jiān)控和加強(qiáng)服務(wù)的 SLO。當(dāng)然,底線(xiàn)是我們可以快速有效地檢測(cè)到并修復(fù)出現(xiàn)的問(wèn)題。
④平臺(tái)支持
Istio 獨(dú)立于平臺(tái),被設(shè)計(jì)為可以在各種環(huán)境中運(yùn)行,包括跨云、內(nèi)部環(huán)境、Kubernetes、Mesos 等等。
我們可以在 Kubernetes 或是裝有 Consul 的 Nomad 環(huán)境上部署 Istio。
Istio 目前支持:
- Kubernetes 上的服務(wù)部署。
- 基于 Consul 的服務(wù)注冊(cè)。
- 服務(wù)運(yùn)行在獨(dú)立的虛擬機(jī)上。
⑤整合和定制
Istio 的策略實(shí)施組件可以擴(kuò)展和定制,與現(xiàn)有的 ACL、日志、監(jiān)控、配額、審查等解決方案集成。
流程架構(gòu)
Istio 服務(wù)網(wǎng)格邏輯上分為數(shù)據(jù)平面(Control Plane)和控制平面(Data Plane),架構(gòu)圖如下所示:
數(shù)據(jù)平面(Data Plane)
由一組以 Sidecar 方式部署的智能代理 Envoy 組成。Envoy 被部署為 Sidecar,和對(duì)應(yīng)服務(wù)在同一個(gè) Kubernetes pod 中。
這允許 Istio 將大量關(guān)于流量行為的信號(hào)作為屬性提取出來(lái),而這些屬性又可以在 Mixer 中用于執(zhí)行策略決策,并發(fā)送給監(jiān)控系統(tǒng),以提供整個(gè)網(wǎng)格行為的信息。
這些代理可以調(diào)節(jié)和控制微服務(wù)及 Mixer 之間所有的網(wǎng)絡(luò)通信。
控制平面(Control Plane)
負(fù)責(zé)管理和配置代理來(lái)路由流量,此外配置 Mixer 以實(shí)施策略和收集遙測(cè)數(shù)據(jù)。
主要包含如下幾部分內(nèi)容:
- Mixer:策略和請(qǐng)求追蹤。
- Pilot:提供服務(wù)發(fā)現(xiàn)功能,為智能路由(例如 A/B 測(cè)試、金絲雀部署等)和彈性(超時(shí)、重試、熔斷器等)提供流量管理功能。
- Citadel:分發(fā) TLS 證書(shū)到智能代理。
- Sidecar injector:可以允許向應(yīng)用中無(wú)侵入的添加功能,避免為了滿(mǎn)足第三方需求而添加額外的代碼。
核心模塊
上文提到了很多技術(shù)名詞,我們需要重點(diǎn)解釋一下:
①什么是 Sidecar 模式?
Sidecar 是一種將應(yīng)用功能從應(yīng)用本身剝離出來(lái)作為單獨(dú)進(jìn)程的設(shè)計(jì)模式,可以允許向應(yīng)用中無(wú)侵入的添加功能,避免為了滿(mǎn)足第三方需求而添加額外的代碼。
在軟件架構(gòu)中,Sidecar 附加到主應(yīng)用,或者叫父應(yīng)用上,以擴(kuò)展、增強(qiáng)功能特性,同時(shí) Sidecar 與主應(yīng)用是松耦合的。
Sidecar 是一種單節(jié)點(diǎn)多容器的應(yīng)用設(shè)計(jì)形式,主張以額外的容器來(lái)擴(kuò)展或增強(qiáng)主容器。
②Envoy 的作用是什么?
Envoy 是一個(gè)獨(dú)立的進(jìn)程,旨在與每個(gè)應(yīng)用程序服務(wù)器一起運(yùn)行。
所有 Envoy組成了一個(gè)透明的通信網(wǎng)格,其中每個(gè)應(yīng)用程序發(fā)送和接收來(lái)自本地主機(jī)的消息,并且不需要知道網(wǎng)絡(luò)拓?fù)洹?/p>
與傳統(tǒng)的服務(wù)通信服務(wù)的庫(kù)方法相比,進(jìn)程外架構(gòu)有兩個(gè)實(shí)質(zhì)性好處:
- Envoy 支持任何編程語(yǔ)言寫(xiě)的服務(wù)。只用部署一個(gè) Envoy 就可以在 Java、C++、Go、PHP、Python 等服務(wù)間形成網(wǎng)格。
- 任何使用過(guò)大型面向服務(wù)的體系結(jié)構(gòu)的人都知道,部署庫(kù)升級(jí)可能會(huì)非常痛苦。Envoy 可以在整個(gè)基礎(chǔ)設(shè)施中迅速部署和升級(jí)。
Envoy 以透明的方式彌合了面向服務(wù)的體系結(jié)構(gòu)使用多個(gè)應(yīng)用程序框架和語(yǔ)言的情況。
③Mixer
Mixer 是一個(gè)獨(dú)立于平臺(tái)的組件,負(fù)責(zé)在服務(wù)網(wǎng)格上執(zhí)行訪(fǎng)問(wèn)控制和使用策略,并從 Envoy 代理和其他服務(wù)收集遙測(cè)數(shù)據(jù),代理提取請(qǐng)求級(jí)屬性,發(fā)送到 Mixer 進(jìn)行評(píng)估。有關(guān)屬性提取和策略評(píng)估的更多信息,請(qǐng)參見(jiàn) Mixer 配置。
Mixer 中包括一個(gè)靈活的插件模型,使其能夠接入到各種主機(jī)環(huán)境和基礎(chǔ)設(shè)施后端,從這些細(xì)節(jié)中抽象出 Envoy 代理和 Istio 管理的服務(wù)。
④Pilot
控制面中負(fù)責(zé)流量管理的組件為 Pilot,它為 Envoy Sidecar 提供服務(wù)發(fā)現(xiàn)功能,為智能路由(例如 A/B 測(cè)試、金絲雀部署等)和彈性(超時(shí)、重試、熔斷器等)提供流量管理功能。
它將控制流量行為的高級(jí)路由規(guī)則轉(zhuǎn)換為特定于 Envoy 的配置,并在運(yùn)行時(shí)將它們傳播到 Sidecar。
⑤Istio 如何保證服務(wù)通信的安全?
Istio 以可擴(kuò)縮的方式管理微服務(wù)間通信的身份驗(yàn)證、授權(quán)和加密。Istio 提供基礎(chǔ)的安全通信渠道,使開(kāi)發(fā)者可以專(zhuān)注于應(yīng)用層級(jí)的安全。
Istio 可以增強(qiáng)微服務(wù)及其通信(包括服務(wù)到服務(wù)和最終用戶(hù)到服務(wù)的通信)的安全性,且不需要更改服務(wù)代碼。
它為每個(gè)服務(wù)提供基于角色的強(qiáng)大身份機(jī)制,以實(shí)現(xiàn)跨集群、跨云端的互操作性。
如果我們結(jié)合使用 Istio 與 Kubernetes(或基礎(chǔ)架構(gòu))網(wǎng)絡(luò)政策,Pod 到 Pod 或服務(wù)到服務(wù)的通信在網(wǎng)絡(luò)層和應(yīng)用層都將安全無(wú)虞。
Istio 以 Google 的深度防御策略為基礎(chǔ)構(gòu)建而成,以確保微服務(wù)通信的安全。
當(dāng)我們?cè)?Google Cloud 中使用 Istio 時(shí),Google 的基礎(chǔ)架構(gòu)可讓我們構(gòu)建真正安全的應(yīng)用部署。
Istio 可確保服務(wù)通信在默認(rèn)情況下是安全的,并且我們可以跨不同協(xié)議和運(yùn)行時(shí)一致地實(shí)施安全政策,而只需對(duì)應(yīng)用稍作調(diào)整,甚至無(wú)需調(diào)整。
Envoy 進(jìn)階
Istio 使用 Envoy 代理的擴(kuò)展版本,Envoy 是以 C++ 開(kāi)發(fā)的高性能代理,用于調(diào)解服務(wù)網(wǎng)格中所有服務(wù)的所有入站和出站流量。
Envoy 的許多內(nèi)置功能被 Istio 發(fā)揚(yáng)光大,例如:
- 動(dòng)態(tài)服務(wù)發(fā)現(xiàn)
- 負(fù)載均衡
- TLS 終止
- HTTP2 & gRPC 代理
- 熔斷器
- 健康檢查、基于百分比流量拆分的灰度發(fā)布
- 故障注入
- 豐富的度量指標(biāo)
Envoy 分為主線(xiàn)程、工作線(xiàn)程、文件刷新線(xiàn)程,其中主線(xiàn)程就是負(fù)責(zé)工作線(xiàn)程和文件刷新線(xiàn)程的管理和調(diào)度。
而工作線(xiàn)程主要負(fù)責(zé)監(jiān)聽(tīng)、過(guò)濾和轉(zhuǎn)發(fā),工作線(xiàn)程里面會(huì)包含一個(gè)監(jiān)聽(tīng)器,如果收到一個(gè)請(qǐng)求之后會(huì)通過(guò)過(guò)濾鏈來(lái)進(jìn)行數(shù)據(jù)過(guò)濾。
前面兩個(gè)都是非阻塞的,唯一一個(gè)阻塞的是這種 IO 操作的,會(huì)不斷地把內(nèi)存里面一些緩存進(jìn)行落盤(pán)。
總結(jié)來(lái)說(shuō),我們可以圍繞如下五方面:
①服務(wù)的動(dòng)態(tài)注冊(cè)和發(fā)現(xiàn)
Envoy 可以選擇使用一組分層的動(dòng)態(tài)配置 API 來(lái)進(jìn)行集中管理。
這些層為 Envoy 提供了動(dòng)態(tài)更新,后端群集的主機(jī)、后端群集本身、HTTP 路由、偵聽(tīng)套接字和通信加密。
為了實(shí)現(xiàn)更簡(jiǎn)單的部署,后端主機(jī)發(fā)現(xiàn)可以通過(guò) DNS 解析 (甚至完全跳過(guò)) 完成,層也可以替換為靜態(tài)配置文件。
②健康檢查
構(gòu)建 Envoy 網(wǎng)格的建議方法是將服務(wù)發(fā)現(xiàn)視為最終一致的過(guò)程。Envoy 包括一個(gè)運(yùn)行狀況檢查子系統(tǒng),該子系統(tǒng)可以選擇對(duì)上游服務(wù)集群執(zhí)行主動(dòng)運(yùn)行狀況檢查。
然后,Envoy 使用服務(wù)發(fā)現(xiàn)和運(yùn)行狀況檢查信息的聯(lián)合來(lái)確定健康的負(fù)載均衡服務(wù)器。Envoy 還支持通過(guò)異常檢測(cè)子系統(tǒng)進(jìn)行被動(dòng)運(yùn)行狀況檢查。
③高級(jí)負(fù)載均衡
分布式系統(tǒng)中不同組件之間的負(fù)載平衡是一個(gè)復(fù)雜的問(wèn)題。
由于 Envoy 是一個(gè)獨(dú)立的代理而不是庫(kù),因此它能夠在一個(gè)位置實(shí)現(xiàn)高級(jí)負(fù)載平衡技術(shù),并使任何應(yīng)用程序都可以訪(fǎng)問(wèn)。
目前 Envoy 包括支持自動(dòng)重試、斷路、通過(guò)外部速率限制服務(wù)限制全局速率、請(qǐng)求隱藏和異常值檢測(cè)。未來(lái)計(jì)劃為 Request Racing 提供支持。
④前端/邊緣系統(tǒng)代理支持
雖然 Envoy 主要是為服務(wù)通信系統(tǒng)而設(shè)計(jì)的,但對(duì)前端/邊緣系統(tǒng)也是很有用的,如:可觀測(cè)性、管理、相同的服務(wù)發(fā)現(xiàn)和負(fù)載平衡算法等。
Envoy 包含足夠的功能,使其可用作大多數(shù) Web 應(yīng)用服務(wù)用例的邊緣代理。這包括作為 TLS 的終點(diǎn)、HTTP/1.1 和 HTTP/2 支持,以及 HTTP L7 路由。
⑤最好的觀察統(tǒng)計(jì)能力
Envoy 的首要目標(biāo)是使網(wǎng)絡(luò)透明。但是在網(wǎng)絡(luò)級(jí)別和應(yīng)用程序級(jí)都無(wú)法避免的容易出現(xiàn)問(wèn)題。
Envoy 包含了對(duì)所有子系統(tǒng)的強(qiáng)有力的統(tǒng)計(jì)支持。statsd 和其他兼容的數(shù)據(jù)提供程序是當(dāng)前支持的統(tǒng)計(jì)接收器,插入不同的統(tǒng)計(jì)接收器也并不困難。
Envoy 可以通過(guò)管理端口查看統(tǒng)計(jì)信息,還支持通過(guò)第三方供應(yīng)商進(jìn)行分布式追蹤。
更多詳情請(qǐng)參考:什么是 Envoy?
- https://www.jianshu.com/p/a6f7f46683e1?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
方案暢想
應(yīng)用上面的原理,我們可以有很多具體的方案應(yīng)用于日常開(kāi)發(fā)。
方案一:應(yīng)用 Istio 改造微服務(wù)
模仿在線(xiàn)書(shū)店的一個(gè)分類(lèi),顯示一本書(shū)的信息。頁(yè)面上會(huì)顯示一本書(shū)的描述,書(shū)籍的細(xì)節(jié)(ISBN、頁(yè)數(shù)等),以及關(guān)于這本書(shū)的一些評(píng)論。
應(yīng)用的端到端架構(gòu):Bookinfo 應(yīng)用中的幾個(gè)微服務(wù)是由不同的語(yǔ)言編寫(xiě)的。
這些服務(wù)對(duì) Istio 并無(wú)依賴(lài),但是構(gòu)成了一個(gè)有代表性的服務(wù)網(wǎng)格的例子:它由多個(gè)服務(wù)、多個(gè)語(yǔ)言構(gòu)成,并且 reviews 服務(wù)具有多個(gè)版本。
用 Istio 改造后架構(gòu)如下:要在 Istio 中運(yùn)行這一應(yīng)用,無(wú)需對(duì)應(yīng)用自身做出任何改變。我們只需要把 Envoy Sidecar 注入到每個(gè)服務(wù)之中。
最終的部署結(jié)果將如下圖所示:
所有的微服務(wù)都和 Envoy Sidecar 集成在一起,被集成服務(wù)所有的出入流量都被 Sidecar 所劫持。
這樣就為外部控制準(zhǔn)備了所需的 Hook,然后就可以利用 Istio 控制平面為應(yīng)用提供服務(wù)路由、遙測(cè)數(shù)據(jù)收集以及策略實(shí)施等功能。
更多細(xì)節(jié),請(qǐng)移步官網(wǎng)示例:
- https://istio.io/latest/zh/docs/examples/bookinfo/
方案二:用 Istio 改造 CI/CD 流程
對(duì)上述流程圖簡(jiǎn)單解釋一下:
- 通過(guò) Docker 對(duì)代碼進(jìn)行容器化處理。
- 通過(guò) Gitlab 托管代碼。
- Jenkins 監(jiān)聽(tīng) Gitlab 下的代碼,觸發(fā)自動(dòng)構(gòu)建,并執(zhí)行 Kustomize 文件。
- Kustomize 通過(guò)配置文件,設(shè)置了 Istio 的配置(染色識(shí)別、流量分發(fā)),并啟動(dòng) K8s 部署應(yīng)用。
- 最終我們通過(guò) Rancher 來(lái)對(duì)多容器進(jìn)行界面化管理。
- 打開(kāi)瀏覽器進(jìn)行訪(fǎng)問(wèn)。
看到這里,相信你也了解了,我們實(shí)現(xiàn)了一個(gè)前端多容器化部署的案例。
它有什么意義呢?
- 首先,當(dāng)然是環(huán)境隔離了,研發(fā)每人一個(gè)容器開(kāi)發(fā),互不干擾。
- 其次,我們可以做很多小流量、灰度發(fā)布等事情。
- 自動(dòng)化部署,一站式的流程體驗(yàn)。
如果你對(duì)容器化還不太了解,請(qǐng)先看看前面兩篇文章:
- Docker 邊學(xué)邊用
- 一文了解 Kubernetes
Istio 還是有很多可圈可點(diǎn)的地方,相信看到這里你也有了更全面的認(rèn)識(shí)。如果你想深入了解,不妨仔細(xì)研究官方示例,并且在實(shí)際項(xiàng)目中不斷打磨。
參考資料:
- Istio 官網(wǎng)
- 什么是 Envoy
- 微服務(wù)之 Service Mesh
- 什么是 Service Mesh
- Istio 如何連接、管理和保護(hù)微服務(wù) 2.0?
- 在 MOSN 中玩轉(zhuǎn) dubbo-go
作者:jartto
編輯:陶家龍
征稿:有投稿、尋求報(bào)道意向技術(shù)人請(qǐng)聯(lián)絡(luò) editor@51cto.com
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】