天天看點

Istio在Rainbond Service Mesh體系下的落地實踐

兩年前Service Mesh(服務網格)一出來就受到追捧,很多人認為它是微服務架構的最終形态,因為它可以讓業務代碼和微服務架構解耦,也就是說業務代碼不需要修改就能實作微服務架構,但解耦還不夠徹底,使用還是不友善,雖然架構解耦了,但部署還沒有解耦。

無法根據不同環境或客戶需要選擇合适的Service Mesh架構。

無法做到在開發環境不用學習和使用Service Mesh,生産環境按需開啟。

目前成熟的ServiceMesh架構也有許多,但是對于使用者而言。并不存在萬能的ServiceMesh架構,可以解決各種場景的問題。是以我們希望對于使用者而言,他隻需要關心自己的業務代碼。而應用的治理能力,則可以通過不同的ServiceMesh架構進行拓展。使用者的業務代碼與ServiceMesh架構完全解耦。如下圖所示。使用者可以随時替換某個應用所使用的ServiceMesh架構。選擇與業務最比對的解決方案。

Istio在Rainbond Service Mesh體系下的落地實踐

基于以上思路,我們可以将istio、linkerd、dapr等微服務架構做成插件,開發過程中完全不需要知道Service Mesh架構的存在,隻需要處理好業務的依賴關系,當傳遞到生産環境或客戶環境,有些需要性能高、有些需要功能全、有些客戶已經指定等各種差異化需求,根據環境和客戶需要按需開啟不同類型的插件即可,當Service Mesh架構有問題,随時切換。這樣Service Mesh架構就變成賦能的工具,老的業務系統重新部署馬上就能開啟服務治理能力。

Rainbond就是基于上述思路實作的,目前版本已經實作了三個服務治理插件。

kubernetes 原生Service 模式

基于envoy的Service Mesh模式

Istio服務治理模式

後面我們詳細講解Istio服務治理模式的使用過程。

有了以上概念,我們可以來看看Rainbond如何與Istio結合。在Rainbond中,使用者可以對不同的應用設定不同的治理模式,即使用者可以通過切換應用的治理模式,來按需治理應用。這樣帶來的好處便是使用者可以不被某一個ServiceMesh架構所綁定,且可以快速試錯,能快速找到最适合目前業務的ServiceMesh架構。

首先在切換到Istio治理模式時,如果未安裝Istio的控制面,則會提示需要安裝對應的控制面。是以我們需要安裝Istio的控制面,控制面在一個叢集中隻需安裝一次,它提供了統一的管理入口,用來管理工作在Istio治理模式下的服務。完成配置下發等功能。結合Rainbond現有的helm安裝方式,我們可以便捷的安裝好對應的元件。

在5.5.0版本中,我們支援了使用者在建立團隊時指定命名空間。由于預設helm安裝的命名空間為 istio-system ,是以為了減少使用者配置。我們首先需要建立出對應的團隊。如下圖所示。團隊英文名對應的則是該團隊在叢集中的命名空間。此處填寫 istio-system 。

Istio在Rainbond Service Mesh體系下的落地實踐

Rainbond支援基于helm直接部署應用,是以接下來對接Rainbond官方helm倉庫,後續基于Helm商店部署Istio即可, 在應用市場頁面,點選添加商店,選擇helm商店,輸入相關資訊即可完成對接。

商店位址:https://openchart.goodrain.com/goodrain/rainbond

Istio在Rainbond Service Mesh體系下的落地實踐

商店建立完成後,即可看到對應的 helm 應用,目前Rainbond提供了 istio 1.11.4 版本的helm包,根據 Istio官方文檔,該版本對Kubernetes叢集的版本支援為 1.19, 1.20, 1.21, 1.22。

安裝 base 應用

選擇helm商店中的base應用進行部署,團隊選擇之前建立的命名空間為 istio-system 的團隊。該應用包主要部署了Istio相關的叢集資源和 CRD 資源。

Istio在Rainbond Service Mesh體系下的落地實踐

安裝 istio-discovery 應用**

同上述base應用一樣,選擇正确的團隊。安裝 istio-discovery 應用。有了這兩個應用,就可以擁有 Istio 基礎的治理能力了。

我們以SpringBoot背景管理系統 若依 為例,如下圖所示,使用者可以先從開源應用商店安裝一個 <code>若依SpringBoot</code> 應用,版本選擇3.6.0,點選治理模式切換,選擇Istio治理模式。

Istio在Rainbond Service Mesh體系下的落地實踐

在點選切換為Istio治理模式後,會需要使用者手動設定内部域名,此處的内部域名将會是該元件在Kubernetes叢集中的service名稱,在同一個團隊下唯一。這裡我們修改為可讀性較高的内部域名。

Istio在Rainbond Service Mesh體系下的落地實踐

在這一步完成後,我們還需要進入 <code>ruoyi-ui</code> 挂載一個新的配置檔案。這主要是因為預設情況下,<code>ruoyi-ui</code> 的配置檔案 <code>web.conf</code> 中後端服務位址為 127.0.0.1,在之前使用 Rainbond 内置 ServiceMesh 模式時,由于 Rainbond 會擷取到後端服務的位址,注入到 <code>ruoyi-ui</code> 内部, 賦予 <code>ruoyi-ui</code> 一個本地通路位址(127.0.0.1)通路後端服務。是以無需修改就能使用。

但使用 Istio 治理模式時,元件間通過内部域名進行通信,是以需要通過挂載配置檔案的方式修改對應的代理位址,<code>ruoyi-ui</code> 的配置檔案可以通過右上方的 <code>Web終端</code> 通路到容器中,複制 <code>/app/nginx/conf.d/web.conf</code> 這個檔案的内容。修改代理位址後儲存,如下圖所示。之前我們設定了控制台的内部域名為 <code>ruoyi-admin</code>,是以這裡替換為 <code>ruoyi-admin</code>。

Istio在Rainbond Service Mesh體系下的落地實踐

在完成以上兩步後,我們需要重新開機整個應用。在啟動應用後,進入元件頁面檢視,應該可以看到每個元件都有一個類似的 Sidecar 容器,這就是Istio的資料面 (data plane),在應用切換為Istio治理模式以後,該應用下的所有元件都會自動注入對應的 Sidecar 容器,不需要使用者額外設定。

至此,該應用已納入Istio治理範圍。使用者如果需要對該應用有更多的配置,則可以參考 Istio官方文檔 進行擴充。

Istio在Rainbond Service Mesh體系下的落地實踐

在之前的步驟中,我們使用 Istio 治理模式納管了 若依 。接下來則帶大家一起看看如何使用 Kiali 觀測應用間的通信鍊路。在這一步中,使用者需要有 kubectl 指令。

在Istio中,各個元件通過暴露HTTP接口的方式讓Prometheus定時抓取資料(采用了Exporters的方式)。是以Istio控制平面安裝完成後,需要在istio-system的命名空間中部署Prometheus,将Istio元件的各相關名額的資料源預設配置在Prometheus中。

同上述base應用一樣,選擇正确的團隊,安裝 <code>Prometheus</code>應用。

Istio在Rainbond Service Mesh體系下的落地實踐

kiali提供可視化界面監控和管理Istio,能夠展示服務拓撲關系,進行服務配置。

安裝 kiali-operator 應用,同上述base應用一樣,選擇正确的團隊。

安裝過程将自動建立Service,通過Rainbond平台第三方元件的形式可将 kiali 的通路端口暴露出來。如下圖所示:

Istio在Rainbond Service Mesh體系下的落地實踐

在端口界面添加通路端口,添加以後打開對外服務使用生成的網關政策即可進行通路。

Istio在Rainbond Service Mesh體系下的落地實踐

kiali登入時需要身份認證token,使用以下指令擷取token:

通路到kiali以後,在Applications一欄,選中應用所在的命名空間,就可以看到我們剛剛建立的應用。點選進入,可以看到如下的流量路線。

Istio在Rainbond Service Mesh體系下的落地實踐

在 Graph 一欄,也可以看到對應的應用内的流量請求。更多的配置及相關功能參考 Kiali官方文檔

Istio在Rainbond Service Mesh體系下的落地實踐

本文簡單介紹了在Rainbond中使用Istio治理模式的操作。以及Rainbond與Istio治理模式的結合。Rainbond為使用者提供了一個可選的插件體系,使使用者可以根據自己的需求選擇不同的Service Mesh架構。在與Istio的結合上,我們主要為使用者完成了指定應用資料平面的注入。使用者也可以通過該機制擴充自己所需的ServiceMesh架構。後續文章我們将詳細講解如何制作插件,盡請關注。

Rainbond是一個開源的雲原生應用管理平台,使用簡單,不需要懂容器和Kubernetes,支援管理多個Kubernetes叢集,提供企業級應用的全生命周期管理,功能包括應用開發環境、應用市場、微服務架構、應用持續傳遞、應用運維、應用級多雲管理等。

Github:https://github.com/goodrain/rainbond

官網:https://www.rainbond.com?channel=cnblog

微信群:請搜尋添加群助手微信号 wylhzmyj

釘釘群:請搜尋群号 31096419