istio 是 google 所開源的一個項目,也就是跟 k8s 是同門師兄弟,他主要用途就是拿來做 k8s cluster 間的 service mesh。

什麼是 service mesh

對於任何網路應用程式來說,都有很多共通的行為,像是 load balance、不同服務間的身份驗證、替服務做 A/B test,也就是讓工程師可以更專注在應用程式上面的商業邏輯,而不用去考量,我如果需要 call api ,網路底層這些安全性、測試、效能要怎麼做設置,甚至未來上線後,特定需求下我需要做速率限制、實驗性功能要透過金絲雀發布法發布…這些議題。這就是 service mesh。

istio 是什麼?

service-mesh

從上面的圖可以看到,istio ,其實會做到無痛在 k8s 的 POD 裡面,注入一個 container ,也就是上面所指的 sidecare,透過它來控制服務間的溝通,進而去做到各種溝通上的管理跟監控。

通過負載平衡、服務間的身份驗證、監控等方法,Istio 可以輕鬆地創建一個已經部署了服務的網路,而服務只需很少更改甚至無需更改。通過在整個環境中部署一個特殊的 sidecar 代理為服務加入 Istio ,而代理會攔截微服務之間的所有網路訊號,然後使用其控制平面的功能來配置和管理 Istio,這包括:

  • 為 HTTP、gRPC、WebSocket 和 TCP 流量自動負載平衡。
  • 通過豐富的路由規則、重試、故障轉移和故障注入對流量行為進行細粒度控制。
  • 可插拔的策略層和配置 API,支持 request 控制、速率限制和配額。
  • 集群內(包括集群的入口和出口)所有流量的自動化度量、日誌記錄和追踪。
  • 在具有強大的基於身份驗證和授權的集群中實現安全的服務間通信。

這在設計模式來說,有一個叫做 sidecar pattern的模式,有一篇文章寫得不錯建議大家可以去補充閱讀 邊車模式 (The Sidecar Pattern) - 介紹