在過去幾天,我們一路聊到 Cilium,看見了它如何用 eBPF 取代 iptables/kube-proxy,並解決了 Pod IP 不夠用的問題。但即使我們已經能掌握 資料平面(Data Plane) 的穩定與高效,實際應用到微服務架構時,仍然會遇到另一個挑戰:服務之間的治理(Service-to-Service Governance)。
這正是 Service Mesh 所要解決的問題。
不過,這篇文章我並不打算深入實作細節,因為關於 Istio 安裝、進階配置的教學,已經有很多優秀的鐵人賽文章可以參考。我這裡比較想聊的是 Service Mesh 的基本概念,以及 Istio 提供的核心能力,算是一個入門簡介,讓還不熟這個領域的讀者能先建立起大方向的認識。
隨著服務數量增多,系統會自然走向「微服務化」。這時候,除了確保 Pod 能互相連線,我們還要面對:
這些問題光靠 CNI 或 Ingress Controller 很難處理。因為它們只關注 IP 和 Port,並不理解應用層的語意。而 Service Mesh 就是專門解決這一層問題的工具。
Service Mesh 的核心概念是:把應用的網路功能抽離出來,交給一個獨立的基礎設施處理。
這通常透過兩個部分實現:
istiod
。比喻來說,Service Mesh 就像是替每個微服務配了一個「專屬保全」,服務自己只要專心處理商業邏輯,保全則會代為檢查訪客身份、記錄誰進誰出,甚至控制誰可以從 VIP 通道進來。
在眾多 Service Mesh 方案裡,Istio 是最具代表性的。它由 Google、IBM 和 Lyft 合作發起,核心就是 Envoy Proxy + Istiod 控制平面。
Istio 提供了幾個關鍵能力:
在這個系列文裡,我們剛好走過了兩個不同層級的網路治理:
兩者其實是互補的關係,而不是替代。例如:
當我們從 Cilium 跨上來看 Istio,就會發現 Kubernetes 網路的世界其實有多層次:從底層的封包連線,到上層的服務治理,解決的都是「網路」問題,但切入點完全不同。
不過,光有網路還不夠,EKS 本身的維護和升級也會帶來不少挑戰。明天(Day 29),我會分享一次 EKS 升級的完整紀錄,包括升級過程中踩到的坑,以及如何避免服務中斷。
再往後,Day 30 我會把焦點放回基礎建設 IaC 工具的選擇,聊聊 TypeScript CDK 和 Terraform 的比較,看看它們在真實專案裡的優劣。