理解服務網格和 Istio


作為一名軟體開發人員,我有時會覺得基礎設施網路相當混淆。在這篇文章中,我將更深入地理解服務網格和 Istio。服務網格是一個專門負責處理服務與服務通信的基礎設施層。它確保請求通過組成現代雲原生應用程序的複雜服務拓撲的可靠傳遞。

實踐中,服務網格通常以輕量級網路代理的陣列形式實現,並與應用程序代碼一起部署,而無需應用程序知道它們。與其名稱相反,服務網格並非實際上的服務網格,而是抽象出網路層的代理網格。服務網格主要執行三個功能:流量控制,安全性和可觀察性。

控制平面將配置數據的流動從中央單位管理到組成網格的代理。而資料平面則管理由 sidecar 代理輔助的網格中微服務的應用數據流動。

一個常用的服務網格就是 Istio。Istio 是由 Google、IBM 和 Lyft(Envoy 代理)合作開發的開源項目,提供一個為在 Kubernetes 上管理服務間通信的透明基礎設施層。它攔截網路流量並將其代理到掛載為 main 容器的側車的智能 Layer 7 代理。 Istio 應用高級路由和策略規則,增強安全性和彈性,並在對等體間通信時使用互相認證的 TLS。

Istio 在服務網格的核心功能上提供了即時優勢:流量控制,安全性和可觀察性。然而,它確實引入了一些複雜性,例如運營開銷和鏈路級別的輕微延遲。它還需要平台適應性並消耗額外的資源,如內存和 CPU。

Istio 的控制平面,稱為 istiod,執行多種功能:服務發現,代理配置,證書管理等等。在 Istio 的舊版本中,這些功能被劃分為獨立的部署,但現已統一在 istiod 中。

Istio 的資料平面由與 Istio 控制平面通信的 Envoy 代理實例組成。一旦配置和同步,這些代理就能管理所有進出網格的網路流量,並應用高級 Layer 7 的路由和策略規則。其配置是通過控制平面的基於規則的 API 實現的,然後再編譯成 Envoy 專用的設定。

為使應用程序開發人員完全不知道 Istio 的存在,Istio 通過操縱 IP 表操縱全網格中所有 pod 的流量的傳輸到 Envoy。流量劫持通過 init 容器 (istio-init) 或 Istio 的 Container Networking Interface (CNI) 插件來實現。

Istio 的流量控制功能可以劃分為三類:請求路由、韌性和偵錯。它提供了一個基於規則的 API,允許用戶配置網格內的流量管理。應用于主機服務的流量策略基於各種匹配條件,例如負載均衡策略、連接池設置以及異常檢測。

Istio 還提供了一種 Security API,以在各種細粒度級別配置策略。它支援三種模式的 TLS 通訊:DISABLE,PERMISSIVE和 STRICT。通過查看 Istio 請求指標,可以瞭解是否通過 mTLS 代理進行請求。

總結,這篇文章是對服務網格和 Istio 的簡短深入瞭解。還有更多需要探索的。感謝您閱讀此篇文章,讓我們繼續學習!