Istio被稱作Kubernetes的最佳云原生拍檔。從今天起,我們推出“Istio技術實踐”系列專題,在本專題中,我們將通過技術文章+視頻授課的方式,為大家詳細闡述Istio微服務治理,及在企業級云平臺中的解決方案和實踐。同時,您還可以申請試用靈雀云基于原生Istio和Kubernetes的微服務產品ASM!
什么是Service Mesh?

Service Mesh譯作“服務網格”,作為服務間通信的基礎設施層,Willian Morgan(Linkerd 的CEO)是這樣定義Service Mesh的:
服務網格是一個用于處理服務間通信的基礎設施層,它負責為構建復雜的云原生應用傳遞可靠的網絡請求。在實踐中,服務網格通常實現為一組和應用程序部署在一起的輕量級的網絡代理,但對應用程序來說是透明的。
Service Mesh 實際是處于 TCP/IP 之上的一個抽象層,它假設底層的 L3/L4 網絡能夠點對點地傳輸字節(當然,它也假設網絡環境是不可靠的,所以 Service Mesh 必須具備處理網絡故障的能力)。
Service Mesh 有如下幾個特點:
多語言支持:
支持幾乎所有的語言,可以自由選擇編程語言;
業務開發變革
降低入門門檻,提高穩定性;
業務開發團隊從框架依賴中解放出來,回歸業務;
強化運維管理
對系統強大的管理和控制力;
微服務治理的功能不再和應用有關。

Service Mesh架構圖
微服務體系帶來的問題
實際上,微服務并非一好百好,本質上是以運維的復雜度為代價獲得敏捷性。分布式和微服務系統會帶來哪些挑戰呢?
首當其沖是定位和調試困難。
當遇到bug或者性能問題,原來的方式基本都是逐級排查,從客戶遇到問題的地方開始。因為一個深層次的微服務會引起一系列的上層微服務出現問題。如果發現兩個服務之間的整體調用性能不好,這個時候哪怕你找到某一次性能差的日志或數據,基于這個數據和日志找出來的原因不一定是root cause。這種排查問題的方式就像烽火臺,你只看到了最近的烽火臺,并不知道起點在哪。
第二,測試時數據會有遺漏,缺少完整的測試數據。
最好的測試數據是線上的真實數據。但是線上的請求采集下來還需要獨立開發相應的程序,整體實現很麻煩。另外,如果測試微服務的錯誤處理,對于QA的黑盒測試來說,這還需要一個可配置的錯誤生成器。這點對于測試也是一個獨立的工作。
第三,缺少上線流程。
我們原來使用獨立的微服務作為開關,來判斷是否加載新功能。在新的功能代碼外層加上調用該微服務的代碼,根據返回值來判斷是否執行新功能代碼,上線完成后再把開關代碼刪掉,的確有點麻煩。上線前需要修改源碼增加控制,上線完成后還需要在源碼中刪除這些邏輯。沒有簡單、無侵入的金絲雀和灰度發布的實現方式。
第四,微服務間的網絡調用策略配置不靈活。
不同的客戶環境需要使用不同的網絡策略,例如重試,超時等等設置,如果對應的設置沒有通過配置文件暴露出來,就只能對代碼進行修改。而且這些代碼在業務代碼里,統一的維護和升級都需要獨立的流程。
諸如以上這些問題還有很多,涉及到成百上千個服務的通信、管理、部署、版本、安全、故障轉移、策略執行、遙測和監控等,要解決這些微服務架構帶來的問題并非易事。而Istio 提供了一個完整的解決方案,通過為整個服務網格提供行為洞察和操作控制來滿足微服務應用的多樣化需求,解決了開發人員和運維人員在向分布式微服務架構過渡時所面臨的挑戰。
什么是Istio?
Istio是目前受Google/IBM 等大廠支持和推進的 Service Mesh開源框架組合。官方對 Istio 的介紹:
An open platform to connect, secure, control and observe services.
翻譯過來,就是”連接、安全加固、控制和觀察服務的開放平臺“。Istio提供一種簡單的方式來建立已部署的服務的網絡,具備負載均衡,服務到服務認證,監控等功能,而不需要改動任何服務代碼。
Istio 允許連接、保護、控制和觀測微服務,在較高的層次上,Istio 有助于降低這些部署的復雜性,并減輕開發團隊的壓力。它是一個完全開源的服務網格,可以透明地分層到現有的分布式應用程序上。它也是一個平臺,包括允許它集成到任何日志記錄平臺、遙測或策略系統的 API。Istio 的多樣化功能集能夠成功高效地運行分布式微服務架構,并提供保護、連接和監控微服務的統一方法。
Istio 適用于容器或虛擬機環境(特別是 k8s),兼容異構架構;
Istio 使用 sidecar(邊車模式)代理服務的網絡,不需要對業務代碼本身做任何的改動;
HTTP、gRPC、WebSocket 和 TCP 流量的自動負載均衡;
Istio 通過豐富的路由規則、重試、故障轉移和故障注入,可以對流量行為進行細粒度控制;支持訪問控制、速率限制和配額;
Istio 對出入集群入口和出口中所有流量的自動度量指標、日志記錄和跟蹤。
Istio系統架構
Istio 分為兩個平面:數據平面和控制平面。
數據平面:
數據平面由一組 sidecar 的代理(Envoy)組成。這些代理調解和控制微服務之間的所有網絡通信,并且與控制平面的 Mixer 通訊,接受調度策略。
控制平面:
控制平面通過管理和配置 Envoy 來管理流量。此外,控制平面配置 Mixers來實施路由策略并收集檢測到的監控數據。

如上圖,
數據平面由一組以 Sidecar 方式部署的智能代理(Envoy)組成。這些代理可以調節和控制微服務及 Mixer 之間所有的網絡通信。
控制平面負責管理和配置代理來路由流量。此外,控制平面配置 Mixer 以實施策略和收集遙測數據。
Pilot是整個架構中的抽象層,將對接K8S等資源調度器的步驟進行抽象并以適配器的形式展現,并和用戶以及Sidecar交互。
Galley負責資源配置為驗證。
Citadel用于生成身份,及密鑰和證書管理。
核心功能包括流量控制、安全控制、可觀測性、多平臺支持、可定制化。
Istio 安全架構
Istio中80%的組件都參與到了安全的功能里面。

Istio 安全目標:
默認安全
深度防御
零信任網絡
Istio 安全組件:
堡壘,管理密鑰、證書
Sidecar,實現安全通信
Pilot,授權策略分發
Mixer,管理授權和審計
如何使用Istio 解決微服務架構問題?
如何在你的微服務架構中引入 Istio, 并用它來解決微服務治理中的諸多難題?在靈雀云的微服務治理平臺Alauda Service Mesh(簡稱:ASM)中我們設計了基于Istio的解決方案,提供應用生命周期管理和全面的微服務治理能力,及應用服務之間安 全、可靠、高效的通信。
“從小白到專家Istio技術實踐”專題系統講述Istio基本概念、基礎架構及在企業級云平臺中的實踐。對微服務治理感興趣的企業決策者、技術調研者、架構師、開發人員、運維人員,歡迎持續關注!