Istio

menu icon

Istio

進一步瞭解 Istio - 可讓開發人員無縫連接、管理及保護不同微服務網路的開放式技術。

何謂 Istio?

Istio 是可配置的開放原始碼服務網格層,可連接、監視及保護容器(在 Kubernetes 叢集中)。在撰寫本文時,Istio 可原生與 Kubernetes 交互作業,但它的開放原始碼本質使得任何人都可以撰寫延伸套件,以便讓 Istio 能在任何叢集軟體上執行。 今天我們著重探討 Istio 如何搭配使用 Kubernetes,看看最受歡迎的使用案例。

Kubernetes 是一種容器編排工具,而 Kubernetes 的核心單元之一是節點。節點是由一或多個容器以及檔案系統或其他元件所組成。 微服務架構可能有十二個不同的節點,而每個節點代表不同的微服務。Kubernetes 可管理節點的可用性和資源消耗,在需求增加時使用 Pod 自動擴充器來新增 Pod。 Istio 將其他容器注入 Pod 中,新增安全、管理及監視功能。

因為 Istio 是開放原始碼,可以在任何受支援的公有雲提供者上執行,也可以在任何具有積極管理者的私有雲上執行。

以下影片進一步說明 Istio 基本觀念 (5:13):

網路服務網眼

當組織移至微服務時,他們需要支援數十個或數百個特定的應用程式。 分別管理那些端點代表得支援大量的虛擬機器(或 VM),包括需求。像 Kubernetes 這樣的叢集軟體可以建立 Pod 並進行擴充,但 Kubernetes 不提供路由、流量規則,或強大的監視或除錯工具。

進入服務網眼。

隨著服務數量增加,潛在的通訊方式數量也呈現指數級上升。 兩個服務只有兩個通訊路徑。 三個服務則有六個路徑,10 個服務就有 90 個路徑。 服務網眼提供單一的通訊路徑配置方式,這個方法就是建立通訊原則。

服務網眼會根據預先定義的配置,來管理服務並指引通訊流量。 這表示,如果不想配置執行容器(或撰寫程式碼來執行此作業),管理者可以提供配置給服務網眼,由它來完成工作。 以往這一律都得在 Web 伺服器和服務到服務通訊中執行。

在叢集中執行此作業的最常見方式是使用 sidecar 型樣。 sidecar 是一種新容器,它位於 Pod 內部,其可遞送與觀察服務和容器之間的通訊資料流量。

Istio 與 Kubernetes

如前所述,在 Kubernetes 頂端的 Istio 層中,將會新增程式設計師和管理者基本上看不見的容器。 「sidecar」容器具有「中間人」作用,它可指引資料流量,並監視元件之間的互動。 這兩者透過三種方式搭配運作: 配置、監視及管理。

配置

使用 Kubernetes 設定配置的主要方法是 kuectl 指令,通常是 "kubertl -f <filename>",其中檔案是 YAML 檔。Istio 使用者可以使用 kubectl 來執行全新及不同類型的 YAML 檔,或使用全新的選用 ioctl 指令。

監視

有了 Istio,您可以輕鬆地監視透過 Kubernetes 執行之應用程式的性能。 Istio 的檢測可以管理和視覺化應用程式的性能,提供比 Kubernetes 所提供之一般叢集和節點監視更多的洞察。

管理

Istio 的介面基本上與 Kubernetes 相同,因此在管理上幾乎不需要額外功夫。 事實上,Istio 可讓使用者建立影響及管理整個 Kubernetes 叢集的原則,縮短管理每一個叢集的時間,同時消除自訂管理程式碼的需求。

優勢

服務網眼的主要優勢是包括一些可改良除錯、監視、遞送、安全性及運用的功能。 換言之,有了 Istio,花比較少的心力卻可以管理更廣泛的服務。

改善除錯能力

例如,假設服務具有多個相依關係。 保險公司的 pay_claim 會呼叫 deductible_amt 服務,該服務會再呼叫 is_member_covered 服務,依此類推。 複式相依關係鏈可能有 10 個或 12 個服務呼叫。 當 12 個當中有一個失敗時,將會有一連串的失敗,導致某種類型的 500 錯誤、400 錯誤,或完全沒有回應。

如果要除錯該呼叫集,您可以使用類似堆疊追蹤的功能。 在前端,用戶端開發人員可以查看從 Web 伺服器取回的元素以及順序,並加以檢查。 前端程式設計師可以取得瀑布圖 以協助除錯。

範例中並不會指出資料中心內部 發生的狀況,例如 callback =parselLotamaAudiences 如何呼叫四個其他 Web 服務,而哪些 Web 服務回應得更慢。稍後,我們會看到 Istio 如何提供工具,像這樣追蹤圖上的功能呼叫。

監視和觀察

DevOps 團隊及 IT 管理人員可能想要觀察資料流量,查看延遲、服務時間、錯誤佔流量的百分比等等。通常,他們會想要查看儀表板。 儀表板提供了總和、平均,或一段時間內指標的視覺化狀況,而且或許可以「往下探查」到特定節點、服務或 Pod。 Kubernetes 不會主動提供此功能。

原則

依預設,Kubernetes 可讓每個 Pod 傳送資料流量至相隔的 Pod。 Istio 可讓管理者建立原則,限制哪些服務可以彼此搭配運作。 因此,例如服務只能呼叫具有 true 相依關係的其他服務。 維持服務運作的另一個原則是速率限制,如此可阻止過多的資料流量堵塞服務,並防止拒絕服務攻擊。

遞送及負載平衡

依預設,Kubernetes 提供循環式負載平衡功能。如果有六個提供微服務的 Pod,Kubernetes 會提供負載平衡器或「服務」,該負載平衡器會以遞增順序將要求傳送至每個 Pod,然後使其重新開始。 不過,有時公司會在正式作業中部署不同版本的相同服務。

其中最簡單範例的可能是藍色/綠色部署。 在此情況下,軟體可能會在正式作業中建置全新的應用程式版本,而不會將正式作業使用者傳送至該應用程式。在推廣新版本後,公司可讓舊伺服器在發生故障時快速切回。

有了 Istio,這就像在配置檔中使用標記一樣簡單。 管理者也可以使用標籤來指出要連接的服務類型,以及根據標頭建置規則。因此,例如測試版使用者可以遞送至具有最新且最大建置的「canary」Pod,而一般使用者則前往穩定的正式作業建置。

斷路

如果服務超載或關閉,則在系統繼續超載時,其他要求將發生失敗。 因為 Istio 正在追蹤錯誤和延遲,因此可以強制暫停,讓服務在達到原則所設定的特定要求數量之後回復。 您可以透過建立小型文字檔,並引導 Istio 使用它做為新原則,藉此在整個叢集中強制執行此原則。

安全性

依預設,Istio 會提供身分、原則和加密,以及鑑別、授權和審核(三者簡稱 AAA)。 與其他 Pod 進行通訊的任何受管理 Pod 將使用加密的資料流量,以防止任何觀察。 結合加密功能的身分服務,可確保沒有未經授權的使用者可以偽造或「盜用」服務通話。 AAA 提供安全性,以及專業作業人員輕鬆進行監視所需的工具。

簡化管理

傳統應用程式仍然需要 Istio 提供的識別、原則及安全功能。 這使得程式設計師和管理者在錯誤的抽象層次中工作,對每個服務不斷重複實作相同的安全規則。 Istio 可讓他們正確層次中工作 - 透過單一控制面板為叢集設定原則。 同時,有了下文所述的 Istio 的存取控制、儀表板及除錯工具,您可以輕鬆在指令行新增外掛程式,而非跳至網頁。

範例

將服務視覺化

Istio 1.1 包含名為 Kiali 的新附加元件,以提供 Web 型視覺化。您可以使用它來追蹤服務要求、深入探查詳細資料,甚至將服務要求歷程匯出為 JSON ,以您自己的方式查詢及格式化。 下方的工作負載圖表會根據實際相依的服務,提供即時產生的相依關係圖形。 這是從實際資料流量觀察所產生的圖形。

名為 Kiali 之全新附加元件的影像,它提供 Web 型視覺化

追蹤服務呼叫

Jaeger 服務(Istio 的一個元件)可為任何指定服務提供追蹤功能。 在這個範例中,我們追蹤了產品頁面。 第一個影像中的每一點代表一個服務呼叫。 按一下某個點,可以「往下探查」到瀑布圖,以追蹤確切的服務要求和回應。

Jaeger 服務的影像,它是 Istio 的元件,可為任何指定服務提供追蹤。  在這個範例中,我們追蹤了產品頁面。 第一個影像中的每個點各代表一個服務呼叫。

我們也可以更仔細地查看產品頁面。 我們可以看到產品頁面本身有錯語,其中已成功傳回詳細資料。

產品頁面的影像。  我們可以看到產品頁面本身有錯語,其中已成功傳回詳細資料。

儀表板

Istio 隨附許多(現成)儀表板,方便監視系統性能和效能。 這些可以測量 CPU 和記憶體使用率、流量需求、400 和 500 錯誤的數目、服務要求的時間等等。 最棒的是,只要安裝與執行 Istio 並新增 Grafana 就可以使用了,其中包含一個適用於 Istio 的開放原始碼儀表板工具。 Istio 也提供其他兩種儀表板:Kiali 和 Jaeger。

Istio 眾多儀表板(現成可用)的影像,這些儀表板用來監視系統性能和效能。

Istio 與 Envoy 比較

Istio 使用一個已大幅延伸的 Envoy 版本來執行監視、管理及記載作業。 每個 Pod 都需要追蹤,而 Istio 需要彙總並提供所有 Pod 的資訊。 使用 Istio 的另一個替代方案是,將 Envoy 直接部署到 Kubernetes 叢集並編寫管理程式碼。 雖然您會這麼想,但這基本上是在改寫 Istio 內容,而且會衍生自訂開發專案的所有相關成本和錯誤。

指導教學

Istio 網站(IBM 外部鏈結)包含許多有用的文件,以及開始使用 Istio 的指示。 

Istio 與 IBM

Managed Istio 可作為 IBM Cloud Kubernetes 服務的一部分使用。該服務提供 Istio 無縫安裝、自動更新,以及控制平面組件的生命週期管理,同時還能整合平台記載和監控工具。 將受管理的 Istio 整合新增到全新或現有叢集中,然後立即重新控制微服務。 如果你有興趣探索 Knative,請參閱「Knative:重要指南」。

進一步瞭解 Managed Istio on IBM Cloud Kubernetes Service

如需受管理 Kubernetes 如何協助您進行雲端旅程的概觀,請觀看我們的「管理 Kubernetes 的優勢」影片:

如需進一步瞭解最佳作法,以在正式作業環境中啟用及加速容器部署,請參閱「在正式作業中執行容器和 Kubernetes 的最佳作法」報告。

透過以下的實用指南來瞭解服務網眼如何協助您控制應用程式當中服務之間的互動:Istio Explained: Getting Started with Service Mesh (PDF, 4.1 MB)。

如果您已準備好立即開始使用 IBM Cloud,請在這裡註冊。