使用 Istio Service Mesh 管理微服務

今天的文章經過 Istio 開源項目展現如何爲 Kubernetes 管理的微服務提供可見性,彈性,安全性和控制。html


服務是現代軟件體系結構的核心。比起復雜龐大的總體,部署一系列模塊化的小型(微型)服務可以使開發人員靈活地使用不一樣的語言、技術並能放緩節奏,並會有更高的生產力和更快的速度,特別是對於大團隊,效果會更好。然而,隨着微服務的採用,因爲大型系統中存在大量的服務,就會出現新的問題,那就須要爲每一個服務處理一個複雜的問題,例如安全性,負載均衡,監控和速率限制。git


Kubernetes 和服務github


Kubernetes 經過 Service(https://kubernetes.io/docs/concepts/services-networking/service/) 構造支持微服務架構。它容許開發人員將一組 Pod(https://kubernetes.io/docs/concepts/workloads/pods/pod/) 的功能抽象出來,並經過定義良好的 API 將其展現給其餘開發人員。它容許爲這個抽象級別添加一個名稱,並執行基本的 L4 負載均衡。可是它不能解決更高層次的問題,好比 L7 指標,流量分流,速率限制,熔斷等。後端


Istio (https://istio.io/) 團隊在 GlueCon 2017大會上宣佈,藉助 Istio 經過 Service Mesh 框架從根本上解決了這些問題。開發人員能夠實現微服務的核心邏輯,並讓框架負責剩下的部分,如流量管理、服務發現、服務標識和安全以及策略實施。更好的是,對於現有的微服務,也能夠這樣作,而不用重寫或從新編譯它們的任何部分。Istio 使用 Envoy (https://lyft.github.io/envoy/) 做爲其運行時代理組件,並提供一個容許全球跨領域政策執行和遙測收集的可擴展的中介層 (https://istio.io/docs/concepts/policy-and-control/mixer.html)瀏覽器


當前版本的 Istio 是面向 Kubernetes 用戶的,而且能夠經過幾行命令的安裝方式進行打包,從而爲 Kubernetes 中的微服務提供可視性,彈性,安全性和控制力。安全


在文章中,咱們將看到由4個獨立的微服務組成的簡單應用程序。咱們首先看看如何使用普通的 Kubernetes 部署應用程序。而後,咱們將在不改變任何應用程序代碼的狀況下將徹底相同的服務部署到 Istio 的羣集中啓用,並瞭解下咱們該如何觀察指標。架構


在後面的文章中,咱們將重點介紹更高級的功能,如 HTTP 請求路由,策略,身份和安全管理。app


示例應用程序:BookInfo負載均衡


咱們將使用一個簡單的應用程序 BookInfo ,顯示商店書籍的信息,評論和評分。該應用程序由四個以不一樣語言編寫的微服務組成:框架


圖片


由於這些微服務的容器鏡像均可以在 Docker Hub 中找到,因此咱們在 Kubernetes 中部署這個應用程序須要的就是 yaml 配置。


值得注意的是,這些服務對 Kubernetes 和 Istio 沒有依賴關係,但作了一個有趣的案例研究。特別是評論服務的衆多服務,語言和版本使其成爲一個有趣的 Service Mesh 示例。


關於這個例子: 

(https://istio.io/docs/samples/bookinfo.html) 的更多信息能夠在這裏找到。


在 Kubernetes 中運行

Bookinfo 應用程序


在這篇文章中,咱們將重點介紹應用的 v1版本:


圖片


使用 Kubernetes 進行部署很是簡單,與部署其餘服務無異。productpage 微服務的服務和部署資源以下所示:


圖片


若是咱們想運行應用程序,咱們須要部署的另外兩個服務是詳細信息和評論 v1 。咱們目前不須要部署評級服務,由於評論服務 v1 不會使用它。其他的服務基本上與 productpage 遵循相同的模式。全部服務的 yaml 文件能夠在這裏(https://raw.githubusercontent.com/istio/istio/master/samples/apps/bookinfo/bookinfo-v1.yaml) 找到。


做爲一個普通的 Kubernetes 應用程序運行服務:


圖片


要從咱們須要的 NodePort 地址的羣集外部訪問應用程序 productpage 服務。


圖片


咱們如今能夠將瀏覽器指向

http:// $ BOOKINFO_URL / productpage,並查看:


圖片


使用 Istio 運行 Bookinfo 應用程序


如今咱們已經看到了這個應用程序,咱們稍微調整一下咱們的部署,使其與 Istio一塊兒工做。 咱們首先須要在咱們的集羣中安裝 Istio(https://istio.io/docs/tasks/installing-istio.html)。要查想看全部的指標和啓用追蹤功能,咱們還能夠安裝可選的 Prometheus , Grafana 和 Zipkin 插件。 咱們如今能夠刪除之前的應用程序,並使用徹底相同的 yaml 文件再次啓動 Bookinfo 應用程序,此次是 Istio :


圖片


須要注意,此次在建立部署以前咱們使用 istioctl kube-inject 命令修改 bookinfo-v1.yaml 文件。在這裏 (https://istio.io/docs/reference/commands/istioctl.html#istioctl-kube-inject) 它記錄注入 Envoy sidecar 到 Kubernetes pods 。所以,全部微服務都與 Envoy sidecar 一塊兒打包,管理服務的傳入和傳出流量。


在 Istio 服務網格中,就像在普通的 Kubernetes 中同樣,咱們不會直接訪問應用程序 productpage,相反,咱們但願在請求路徑中使用 Envoy sidecar ,就像咱們處理內部請求同樣,以便咱們可使用 Istio 的管理功能(版本路由,斷路器,策略等)來控制對 productpage 的外部調用。Istio 的 Ingress 控制器便用於此目的。


要使用 Istio Ingress 控制器,咱們須要爲應用程序建立一個 Kubernetes Ingress 資源,並用 kubernetes.io/ingress.class 註釋:「istio」,以下所示:


圖片


Istio 和 Bookinfo app 的 v1版本的結果部署以下所示:


圖片


此次咱們將使用 Istio Ingress 控制器的 NodePort 地址訪問應用程序:


圖片


如今咱們能夠在 http:// $ BOOKINFO_URL / productpage 上看到頁面,並再次看到正在運行的應用程序,並且與沒有使用 Istio 的用戶先前部署的應用應該沒有什麼不一樣。可是,如今應用程序正在 Istio 服務網格中運行,咱們能夠當即開始看到一些好處。


指標集合


咱們從 Istio 開箱便可獲得的第一件事就是在 Prometheus 中收集指標。這些指標由 Envoy 中的 Istio 過濾器生成,根據默認規則(能夠自定義)收集,而後發送給 Prometheus 。指標能夠在 Grafana 的 Istio 視圖中可視化。請注意,儘管 Prometheus 是現成的默認指標後端,但 Istio 容許您使用其餘的,咱們將在之後的博客文章中演示。


爲了演示,咱們將開始運行如下命令來在應用程序上生成一些負載:


圖片


咱們得到 Grafana 的 NodePort URL:


圖片


咱們如今能夠在瀏覽器打開 
http:// $ GRAFANA_URL / dashboard / db / istio-dashboard ,並檢查每一個 Bookinfo 服務的各類性能指標:


圖片


分佈式跟蹤


咱們從 Istio 得到的下一個功能是使用 Zipkin 進行跟蹤。咱們得到它的 NodePort URL:


圖片


如今咱們能夠經過瀏覽器打開 

http:// $ ZIPKIN_URL / 來查看經過 Bookinfo 服務的請求跨度跟蹤。


圖片


儘管 Envoy 代理將跟蹤跨度發送到 Zipkin 開箱即用,爲了充分利用其功能,應用程序須要 Zipkin 獲取到並轉發一些頭部以將各個跨度綁定在一塊兒。有關詳細信息,請參閱: 

zipkin-tracing (https://istio.io/docs/tasks/zipkin-tracing.html)。


指標總體總結


Istio 提供的指標不只僅是一種便利。它們經過生成統一的度量標準來提供服務網格的一致視圖。咱們沒必要擔憂協調各類代理運行時發出的不一樣類型的指標,或者添加任意代理來收集傳統的未配置的應用程序的指標。咱們也再也不須要依靠開發過程來正確地測試應用程序來生成度量標準。服務網格能夠查看全部流量,甚至能夠查看傳統的「黑匣子」服務,並生成全部流量的度量標準。


結論


Google ,IBM 和 Lyft 自豪地宣佈 Istio :一個開源項目,提供統一的鏈接,安全,管理和監控微服務的方。 目前的版本針對 Kubernetes 環境; 打算在將來幾個月內爲虛擬機和 Cloud Foundry 等其餘環境增長支持。 Istio 將流量管理添加到微服務中,併爲增值功能(如安全性,監控,路由,鏈接管理和策略)創造了基礎。 該軟件使用來自 Lyft 的通過測試的特使代理構建,並提供對流量的可見性和控制,而不須要對應用程序代碼進行任何更改。 Istio 爲 CIO 提供了強大的工具,能夠在整個企業中實施安全性,政策和合規性要求。

相關文章
相關標籤/搜索