裸機 Kubernetes 環境的服務網格部署考量
服務網格可以令 Kubernetes 工作負載之間的通訊更安全、更容易觀察,亦能以政策方式管理。不過在裸機環境中,服務網格不能與叢集底層的實體基礎設施分開考慮。節點拓撲、網絡路徑、CPU 與記憶體餘量、儲存延遲及故障範圍,都會影響服務網格在正式環境中的表現。
服務網格會如何改變裸機 Kubernetes 叢集
服務網格在服務之間加入一層專門的通訊機制。視乎採用的方案,邊車代理或節點層的資料平面會處理流量政策、服務發現、加密、重試及遙測,而控制平面則負責分發設定與身份資料。這可以減少應用程式自行處理網絡邏輯的需要,但亦會為叢集增加另一套需要維運的系統。
裸機 Kubernetes 比高度共享的虛擬化環境更容易取得可預測的 CPU、記憶體、儲存及網絡介面效能。當工作負載產生大量內部流量,這種一致性對服務網格尤其有價值。同時,平台團隊也要自行負責更多決策,包括作業系統更新、核心設定、憑證機構、代理版本、硬件替換及容量規劃。
先規劃節點角色、硬件及網絡布局
服務網格規劃應由節點如何分工開始。控制平面節點、一般工作節點、入口閘道、可觀測性組件及有狀態服務,未必需要相同的硬件配置。把這些角色分開,有助找出資源競爭,也可以避免繁忙的遙測或閘道工作負載與控制平面爭用容量。
合適的伺服器配置取決於工作負載密度、記憶體壓力、儲存行為及內部通訊量。Dataplugs 的 Kubernetes 專屬伺服器型號指南 說明 CPU 拓撲、記憶體、NVMe 儲存及網絡一致性如何影響叢集的長期表現。在選擇服務網格的工作節點硬件之前,應先考慮這些因素。
- 足以承載應用程式 Pod 與代理的運算容量
- 為邊車、閘道、遙測及突發流量保留記憶體餘量
- 為 etcd、映像檔拉取及有狀態工作負載提供低延遲本地儲存
- 穩定的網絡介面,以及足以應付東西向流量的頻寬
- 一致的作業系統、核心及容器執行環境版本
- 把節點分布在具有實際意義的故障範圍內
NVMe 儲存對控制平面及有狀態節點特別有用,但單靠儲存效能並不能解決過載的服務網格。更重要的是,在映像檔同時拉取、日誌寫入、健康檢查及服務間請求並行時,仍然維持可預測的表現。
Tip: 為節點規劃容量時,應同時計算正常流量、代理及遙測的開銷;如果啟用服務網格後才發現節點沒有安全餘量,叢集便未算準備妥當。
把東西向流量視為容量問題
服務網格會令叢集內部流量變得更加重要。一個請求可能經過代理、以雙向 TLS 完成身份驗證、產生遙測資料,甚至在應用程式回應前被重試或重新導向。每一個額外步驟可能很細微,但當服務呼叫數量達到數千甚至更多時,累積影響便不能忽視。
這種情況與多伺服器架構中的 東西向流量 密切相關。應先整理通訊最頻繁的服務、跨節點或跨位置的呼叫,以及承載大量資料的路徑。除了平均頻寬,也應監察 p95 及 p99 延遲、連線數、重傳、每秒流量及重試量。
使用雙向 TLS,但不要忽略憑證運作
雙向 TLS 讓服務可以互相驗證身份,亦能在不要求每個應用團隊自行建立憑證邏輯的情況下加密流量。不過在裸機叢集中,仍然需要清晰的信任模型。應先定義哪些工作負載共享身份範圍、憑證如何簽發及輪換,以及憑證機構或控制平面不可用時的處理方式。
不要把加密當成授權的替代品。雙向 TLS 可以證明連線來自哪個工作負載,但政策仍要決定該工作負載是否可以呼叫某個服務、端點或命名空間。應由清晰的服務身份及少量容易理解的政策開始,再逐步擴展服務網格範圍。
- 工作負載身份及命名空間邊界
- 自動憑證輪換及到期提示
- 為內部、入口及出口流量清楚設定 TLS 模式
- 對敏感服務路徑採用預設拒絕政策
- 為憑證機構及控制平面準備文件化的恢復流程
良好的設計也會把應用程式故障與身份故障分開處理。如果憑證即將到期,平台應盡早發出提示。如果政策分發中斷,團隊需要預先定義行為,而不是讓流量在沒有清晰原因下忽然變成開放或封鎖。
Tip: 在測試環境驗證憑證輪換及政策恢復。只有在控制平面所有組件正常時才安全的服務網格,並未達到正式環境要求。
規劃代理開銷及資源隔離
邊車代理會消耗 CPU 與記憶體、增加少量延遲,亦會令需要監察的程序數量上升。當一個節點承載大量小型 Pod、封包較大,或遙測收集頻率較高時,相關成本會更加明顯。Kubernetes 的資源請求與限制應把代理計算在內,而不能只按應用程式容器規劃。
在啟用服務網格前後,應以真實並行量測試應用程式,並比較請求延遲、CPU 節流、記憶體工作集、連線數、封包率及錯誤行為。如果平台支援,可把入口、出口及可觀測性組件放在獨立的基礎設施節點,讓應用工作節點保留較可預測的容量。
讓 Layer 7 可觀測性真正有用
服務網格可以提供服務層指標、請求結果、依賴關係圖及分散式追蹤,但遙測資料越多不代表一定越有用。應先定義哪些訊號直接關係到用戶體驗,哪些資料可以抽樣,並統一服務名稱、命名空間、路由及狀態分類,方便在儀表板及事故處理期間追蹤同一服務。
如需更深入的協定層可視性,可參考 Dataplugs 關於 Layer 7 應用程式監控 及深度檢查工具的文章。服務網格應把這種可視性與請求率、p95 或 p99 延遲、錯誤率、飽和度及重試指標結合,將基礎設施症狀連繫到實際服務結果。
Tip: 控制指標的標籤數量。好的儀表板應協助維運人員快速找出故障服務,而不是產生無法管理的大量標籤。
把故障處理、重試及逾時一起設計
重試是服務網格最容易把小型故障放大的地方。如果代理、應用程式、客戶端函式庫及負載平衡器各自重試,一個失敗請求便可能變成大量重複工作。應先定義逾時,再只在操作可以安全重複時加入有限的重試預算。
斷路器、異常節點剔除、連線池及負載平衡政策,都應配合應用程式真正的依賴行為。對於會改變狀態的操作,應清楚失敗,而不是重複一個結果不明的動作。讀取量較高的服務可以使用受限制的重試改善韌性,但仍要同時觀察飽和度及佇列增長。
結論
在裸機 Kubernetes 上部署服務網格,應視為平台層面的決策,而不是單純安裝代理。重點包括節點角色、硬件餘量、東西向流量、雙向 TLS 身份、代理開銷、Layer 7 可觀測性、受限制的故障處理及可控升級。當這些範疇一起量度時,服務網格可以在不變成不透明中間層的情況下,帶來更實用的安全性及營運一致性。好的設計應先建立可預測的節點與網絡,再加入組織真正能夠維運的政策及遙測。
如果企業正計劃把 Kubernetes 部署在可預測的單一租戶基礎設施上,Dataplugs 提供配備可配置硬件、網絡選項及技術支援的 專屬伺服器 方案,支援正式環境工作負載。
如需更多資料,請瀏覽 Dataplugs 或聯絡 sales@dataplugs.com。
