使用 Istio 為微服務提供高級流量管理和請求跟蹤功能
原文地址:https://developer.ibm.com/code/patterns/manage-microservices-traffic-using-istio/
作者:IBM
譯者:Jimmy Song
說明
開發人員正在擺脫大型單體應用的束縛,轉而採用小巧而專一的微服務,以加速軟體開發並加強系統彈性。為了滿足這個新生態的需求,開發人員需要為部署的微服務創建一個具有負載均衡、高級流量管理、請求跟蹤和連接功能的服務網路。
概述
如果您花時間開發過應用程序,那麼有件事情您肯定明白:單體應用正成為過去。當今的應用程序都是關於服務發現、註冊、路由和連接。這給微服務的開發和運維人員提出了新的挑戰。
如果您的服務網格在規模和複雜性上不斷增長,您可能想知道如何理解和管理服務網格。我們也遇到了同樣的問題:如何使這些越來越多的微服務能夠彼此連接、負載均衡並提供基於角色的路由?如何在這些微服務上啟用傳出流量並測試金絲雀部署?僅僅創建一個獨立的應用程序還不夠,所以我們該如何管理微服務的複雜性呢?
Istio 是 IBM、Google 和 Lyft 合作創建的項目,旨在幫助您應對這些挑戰。Istio 是一種開放技術,它為開發人員提供了一種這樣的方式:無論是什麼平台、來源或供應商,微服務之間都可以無縫連接,服務網格會替您管理和保護微服務。在下面的開發之旅中,您將了解如何通過 Istio 基於容器的 sidecar 架構提供複雜的流量管理控制功能,它既可用於微服務之間的互通,也可用於入口和出口流量。您還將了解如何監控和收集請求跟蹤信息,以便更好地了解您的應用流量。此次開發者之旅對於所有使用微服務架構的開發人員來說都是理想之選。
流程
IStio部署和使用流程圖
用戶在 Kubernetes 上部署其配置的應用程序。應用程序 由四個微服務組成。該應用中的微服務使用不同的語言編寫——Python、Java、Ruby 和 Node.js。 微服務使用 Java 編寫,有三個不同的版本。
為了使應用程序能夠利用 Istio 的功能,用戶將向微服務中注入 Istio envoy。Envoy 使用 sidecar 的方式部署在微服務中。將 Envoy 注入到微服務中也意味著使用 Envoy sidecar 管理該服務的所有入口和出口流量。然後用戶訪問運行在 Istio 上的應用程序。
應用程序部署完成後,用戶可以為示例應用程序配置 Istio 的高級功能。要啟用流量管理,用戶可以根據權重和 HTTP 標頭修改應用的服務路由。在該階段, 微服務的 v1 版本和 v3 版本各獲得 50% 的流量;v2 版本僅對特定用戶啟用。
用戶配置服務的訪問控制。為了拒絕來自 v3 版本的 微服務的所有流量對 微服務的訪問,用戶需要創建 Mixer 規則。
完成應用程序的部署和配置後,用戶可以啟用遙測和日誌收集功能。為了收集監控指標和日誌,用戶需要配置 Istio Mixer 並安裝所需的 Istio 附件 Prometheus 和 Grafana。要收集 trace span,用戶需要安裝並配置 Zipkin 附件。
用戶為 創建一個外部數據源;例如 IBM Cloud 中的 Compose for MySQL 資料庫。
原始示例 應用程序中的三個微服務——、 和 ,已修改為使用 MySQL 資料庫。要連接到 MySQL 資料庫,需要在 微服務中添加了一個 MySQL Ruby gem;向 Node微服務中添加 MySQL 模塊。將 依賴項添加到 微服務 v1、v2 和 v3 版本中。
用戶部署應用程序並啟用具有出口流量的 Envoy 代理。Envoy 代理作為 sidecar 跟每個微服務部署在一起。Envoy sidecar 將管理該服務中所有流入和流出的流量。當前情況下,由於 Envoy 僅支持 http/https 協議,因此通過提供 MySQL 的 IP 地址範圍,代理配置將不會攔截到 MySQL 連接的流量。當應用程序啟動後,用戶可以使用 IP 和節點埠訪問應用程序。
查看該示例中的代碼:https://github.com/IBM/microservices-traffic-management-using-istio
TAG:ServiceMesher |