1. 微服務的優勢和帶來的挑戰
1.1 什么是微服務
a. 服務之間有輕量級的通訊機制,通常為REST API;
b. 去中心化的管理機制;
c. 每個服務可以使用不同的編程語言實現,使用不同的數據存儲技術;
d. 應用按業務拆分成服務,一個大型應用系統可以由多個獨立的服務組成;
e. 各個服務均可獨立部署,都有自己的業務邏輯;
f. 服務可被多個應用共享,其他服務可復用一些公共的資源服務。
1.2 微服務的優勢
a. 模塊化開發,以單個服務為組件進行更新升級,提升系統整體異常穩定性;
b. 模塊化開發方便管理,單獨團隊開發維護,職責分明;
c. 模塊復用,公共服務模塊可被其他業務模塊使用;
d. 系統架構更加分明;
e. 結合CI/CD,實現DevOps;
f. 彈性伸縮,結合服務編排K8S動態HPA;
g. 服務熔斷/降級,避免但節點異常雪崩效應,分散故障節點。
1.3 微服務帶來的挑戰
a. 服務越來越多,配置管理維護復雜;
b. 服務間依賴關系復雜;
c. 服務調用鏈追蹤難;
d. 服務之間的負載均衡;
e. 服務的拓展;
f. 服務監控/日志;
g. 服務熔斷/降級;
h. ...
1.4 什么是微服務治理
Kubernetes中服務治理神器Istio。
2. Istio介紹
2.1 istio
Istio 允許連接、保護、控制和觀測微服務,Istio有助于降低部署的復雜性,并減輕開發團隊壓力。它是一個完全開源的服務網格,可以透明的分層到現有的分布式應用程序上。也是一個平臺,包括允許集成到任何日志記錄平臺、遙測或策略系統的 API。Istio 的多樣化功能集使能夠成功高效地運行分布式微服務架構,并提供保護、連接和監控微服務的統一方法。
2.2 service mesh
服務網格Service Mesh通常用于描述構成這些應用程序的微服務網絡以及應用之間的交互。隨著規模和復雜性的增長,服務網格越來越難以理解和管理。它的需求包括服務發現、負載均衡、故障恢復、指標收集和監控以及通常更加復雜的運維需求,如 A/B 測試、金絲雀發布、限流、訪問控制和端到端認證等。
Istio 提供了一個完整的解決方案,通過為整個服務網格提供行為洞察和操作控制來滿足微服務應用程序的多樣化需求。
2.3 istio優勢
Istio 提供一種簡單的方式來為已部署的服務建立網絡,該網絡具有負載均衡、服務間認證、監控等功能,只需要對服務的代碼進行??一點??或不需要做任何改動。想要讓服務支持 Istio,只需要在環境中部署一個特殊的sidecar 代理,使用Istio控制平面功能配置和管理代理,攔截微服務之間的所有網絡通信:
HTTP、gRPC、WebSocket 和 TCP 流量的自動負載均衡
通過豐富的路由規則、重試、故障轉移和故障注入,可以對流量行為進行細粒度控制
可插入的策略層和配置 API,支持訪問控制、速率限制和配額
對出入集群入口和出口中所有流量的自動度量指標、日志記錄和追蹤
通過強大的基于身份的驗證和授權,在集群中實現安全的服務間通信
Istio 旨在實現可擴展性,滿足各種部署需求
3. Istio核心功能
3.1 流量管理
通過簡單的規則配置和流量路由,可以控制服務之間的流量和 API 調用。Istio 簡化了斷路器、超時和重試等服務級別屬性的配置,并且可以輕松設置 A/B測試、金絲雀部署和基于百分比的流量分割的分階段部署等重要任務。
3.2 安全
Istio 的安全功能使開發人員可以專注于應用程序級別的安全性。Istio 提供底層安全通信信道,并大規模管理服務通信的認證、授權和加密。使用Istio,服務通信在默認情況下是安全的,允許您跨多種協議和運行時一致地實施策略——所有這些都很少或根本不需要應用程序更改。
3.3 可觀察性
Istio 強大的追蹤、監控和日志記錄可深入了解服務網格部署。通過 Istio 的監控功能,可以真正了解服務性能如何影響上游和下游的功能,而其自定義儀表板可以提供對所有服務性能的可視性。
Istio 的 Mixer 組件負責策略控制和遙測收集。它提供后端抽象和中介,將 Istio 的其余部分與各個基礎架構后端的實現細節隔離開來,并為運維提供對網格和基礎架構后端之間所有交互的細粒度控制。
3.4 平臺支持
stio 是獨立于平臺的,旨在運行在各種環境中,包括跨云、內部部署、Kubernetes、Mesos 等。
4. Istio架構和組件
Istio 服務網格邏輯上分為數據平面和控制平面。數據平面由一組以 sidecar 方式部署的智能代理(??Envoy???)組成。這些代理可以調節和控制微服務及 ??Mixer?? 之間所有的網絡通信。控制平面負責管理和配置代理來路由流量。此外控制平面配置 Mixer 以實施策略和收集遙測數據。
4.1 Envoy
Istio使用??Envoy??代理的擴展版本,Envoy用于調解服務網格中所有服務的所有入站和出站流量。Envoy 的許多內置功能被 Istio 發揚光大,例如:動態服務發現、負載均衡、TLS 終止、HTTP/2 & gRPC 代理等。Envoy 被部署為 sidecar,和對應服務在同一個 Kubernetes pod 中。這允許 Istio 將大量關于流量行為的信號作為??屬性???提取出來,而這些屬性又可以在 ??Mixer?? 中用于執行策略決策,并發送給監控系統,以提供整個網格行為的信息。Sidecar 代理模型還可以將 Istio 的功能添加到現有部署中,而無需重新構建或重寫代碼。可以閱讀更多來了解為什么我們在??設計目標??中選擇這種方式。
4.2 Mixer
??Mixer??? 是一個獨立于平臺的組件,負責在服務網格上執行訪問控制和使用策略,并從 Envoy 代理和其他服務收集遙測數據。代理提取請求級??屬性???,發送到 Mixer 進行評估。Mixer 中包括一個靈活的插件模型,使其能夠接入到各種主機環境和基礎設施后端,從這些細節中抽象出 Envoy 代理和 Istio 管理的服務。
4.3 Pilot
??Pilot?? 為 Envoy sidecar提供服務發現功能,為智能路由(例如 A/B 測試、金絲雀部署等)和彈性(超時、重試、熔斷器等)提供流量管理功能。它將控制流量行為的高級路由規則轉換為特定于 Envoy 的配置,并在運行時將它們傳播到 sidecar。
Pilot 將平臺特定的服務發現機制抽象化并將其合成為符合 ??Envoy 數據平面 API?? 的任何 sidecar 都可以使用的標準格式。這種松散耦合使得 Istio 能夠在多種環境下運行(例如,Kubernetes、Consul、Nomad),同時保持用于流量管理的相同操作界面。
4.4 Citadel
??Citadel??? 通過內置身份和憑證管理賦能強大的服務間和最終用戶身份驗證,可用于升級服務網格中未加密的流量,并為運維人員提供基于服務標識而不是網絡控制的強制執行策略的能力。
4.5 Galley
Galley 代表其他的 Istio 控制平面組件,用來驗證用戶編寫的 Istio API 配置。隨著時間的推移,Galley 將接管 Istio 獲取配置、 處理和分配組件的頂級責任。它將負責將其他的 Istio 組件與從底層平臺(例如 Kubernetes)獲取用戶配置的細節中隔離開來。