iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0
Cloud Native

EKS in Practice:IaC × GitOps 實戰 30 天系列 第 28

[Day 28] K8s Networking: 認識 Service Mesh

  • 分享至 

  • xImage
  •  

在過去幾天,我們一路聊到 Cilium,看見了它如何用 eBPF 取代 iptables/kube-proxy,並解決了 Pod IP 不夠用的問題。但即使我們已經能掌握 資料平面(Data Plane) 的穩定與高效,實際應用到微服務架構時,仍然會遇到另一個挑戰:服務之間的治理(Service-to-Service Governance)

這正是 Service Mesh 所要解決的問題。

不過,這篇文章我並不打算深入實作細節,因為關於 Istio 安裝、進階配置的教學,已經有很多優秀的鐵人賽文章可以參考。我這裡比較想聊的是 Service Mesh 的基本概念,以及 Istio 提供的核心能力,算是一個入門簡介,讓還不熟這個領域的讀者能先建立起大方向的認識。


為什麼需要 Service Mesh?

隨著服務數量增多,系統會自然走向「微服務化」。這時候,除了確保 Pod 能互相連線,我們還要面對:

  1. 服務之間的安全:要不要強制使用 mTLS?如何保證傳輸加密?
  2. 流量管理:我要做藍綠部署、金絲雀發布(canary release),能不能動態控制流量比例?
  3. 服務可觀測性:出了問題,要怎麼知道是哪兩個服務之間的呼叫出了狀況?
  4. 跨團隊治理:不同團隊的服務互相存取時,有沒有一致的存取策略與可追蹤性?

這些問題光靠 CNI 或 Ingress Controller 很難處理。因為它們只關注 IP 和 Port,並不理解應用層的語意。而 Service Mesh 就是專門解決這一層問題的工具。

Service Mesh 的基本概念

Service Mesh 的核心概念是:把應用的網路功能抽離出來,交給一個獨立的基礎設施處理

這通常透過兩個部分實現:

  • Data Plane(資料平面):由 sidecar proxy(例如 Envoy)組成,部署在每個 Pod 或 Service 旁邊,攔截並處理所有進出該 Pod 的流量。
  • Control Plane(控制平面):負責下發策略(policy)、收集 telemetry、協調流量規則,例如 Istio 的 istiod

比喻來說,Service Mesh 就像是替每個微服務配了一個「專屬保全」,服務自己只要專心處理商業邏輯,保全則會代為檢查訪客身份、記錄誰進誰出,甚至控制誰可以從 VIP 通道進來。

Istio:最知名的 Service Mesh

在眾多 Service Mesh 方案裡,Istio 是最具代表性的。它由 Google、IBM 和 Lyft 合作發起,核心就是 Envoy Proxy + Istiod 控制平面

Istio 提供了幾個關鍵能力:

  1. 流量管理(Traffic Management)
    • 可以設定 routing 規則,實現金絲雀部署、A/B 測試、流量分流。
    • 這個功能在 Istio 會使用 VirtualService 這個 CRD 來進行實作。
    • 例如:90% 的流量走 v1,10% 的流量走 v2。
  2. 安全(Security)
    • 預設支援 mTLS,確保服務間通訊加密。
    • 可以設定 fine-grained 的存取控制(誰能呼叫誰)。
  3. 可觀測性(Observability)
    • 每個呼叫都能自動產生 metrics、log、tracing,不需要開發者額外修改程式碼。
    • 搭配 Prometheus / Grafana / Jaeger,就能直接觀察服務之間的關係。

CNI vs Service Mesh:兩者的分工

在這個系列文裡,我們剛好走過了兩個不同層級的網路治理:

  • Cilium (CNI 層,L3/L4):解決 Pod IP、跨節點封包傳輸、Service 轉送等「底層連線」問題。
  • Istio (Service Mesh,L7):解決服務治理、流量管控、安全加密、可觀測性等「應用層」問題。

兩者其實是互補的關係,而不是替代。例如:

  • 你可能會用 Cilium 來確保 Pod IP 不會不夠用,並提升 cluster 的效能。
  • 同時再用 Istio 來管理服務之間的流量分配,並提升觀察與治理能力。

結語

當我們從 Cilium 跨上來看 Istio,就會發現 Kubernetes 網路的世界其實有多層次:從底層的封包連線,到上層的服務治理,解決的都是「網路」問題,但切入點完全不同。

不過,光有網路還不夠,EKS 本身的維護和升級也會帶來不少挑戰。明天(Day 29),我會分享一次 EKS 升級的完整紀錄,包括升級過程中踩到的坑,以及如何避免服務中斷。

再往後,Day 30 我會把焦點放回基礎建設 IaC 工具的選擇,聊聊 TypeScript CDK 和 Terraform 的比較,看看它們在真實專案裡的優劣。


上一篇
[Day 27] EKS Networking: Cilium 實戰踩坑紀錄
下一篇
[Day 29] EKS 升級紀錄:Kubernetes vs EKS
系列文
EKS in Practice:IaC × GitOps 實戰 30 天29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言