Chuyển đến nội dung chính

第 4 課:Kubernetes API 伺服器的負載平衡器(KEEPALIVED + HAPROXY)

安裝並設定 keepalived + HAProxy 為 Kubernetes API 伺服器建立虛擬 IP (VIP)。設定健康檢查、自動故障轉移、與 kube-vip 進行比較並使用 tcpdump/curl 測試 HA。

🔒 DevSecOps — 第 4 課 第 4 課:KUBERNETES API 的負載平衡器 伺服器(保持活動 + HAPROXY)

使用 Kubernetes HA 在本地部署微服務

第 1 部分:平台和平臺本地基礎設施設計

xdev.asia

🎯 課程目標__HTMLTAG_68___

完成本課程後,您將:

  • ✅ 了解為什麼 HA 設定中的 K8s API 伺服器需要負載平衡器
  • ✅ 安裝和設定 keepalived 以實現虛擬 IP (VIP) 故障轉移
  • ✅ 安裝和設定 HAProxy 以實現 API 伺服器負載平衡
  • ✅ 設定運作狀況檢查與自動故障轉移
  • ✅ 透過模擬故障來測試 HA
  • ✅ 比較 keepalived+HAProxy 與 kube-vip

第 1 部分:為什麼 API 伺服器需要負載平衡器?

1.1。單一 API 端點的問題

程式碼區塊_0

1.2。負載平衡器架構

程式碼區塊_1

1.3。選擇架構

___HTMLTAG_110__HTMLTAG_111___專用負載平衡節點___HTMLTAG_112__HTMLTAG_113___
選項 優點 缺點 推薦
隔離、簡單、清楚分離__HTMLTAG_115___ 也需要 2 個伺服器__HTMLTAG_117___ ✅ 製作
主伺服器上的 HAProxy 不需要額外的伺服器 資源爭用,複雜性 實驗室/小型
kube-vip (DaemonSet) 無外部LB 在 K8s 內部運作 → 先有雞還是先有蛋 簡單設定

我們將使用 專用 LB 節點 (lb1 + lb2) 進行生產級設定。


第 2 部分:HAPROXY 的安裝與設定

2.1。安裝 HAProxy

___程式碼區塊_2___

2.2。 HAProxy 設定

___程式碼區塊_3___

2.3。進階運轉狀況檢查 (HTTP)

TCP 檢查僅檢查開放埠。若要檢查 API 伺服器是否確實健康,請使用 HTTP 健康檢查:

程式碼區塊_4

⚠️ 注意: HTTP 健康檢查需要 check-ssl verify none 因為 K8s API 使用自簽名憑證。在生產中,您可以設定 CA 憑證進行驗證。

2.4。啟動 HAProxy

___程式碼區塊_5___

第 3 部分:安裝與設定保持活動

3.1。什麼是 keepalived?

keepalived 使用 VRRP(虛擬路由器冗餘協定) 管理 2 個以上伺服器之間的虛擬 IP:

程式碼區塊_6

3.2。安裝 keepalived

___程式碼區塊_7___

3.3。 lb1 (MASTER) 上的 Keepalived 設定

___程式碼區塊_8___

3.4。 lb2 上的 Keepalived 設定(備份)

___程式碼區塊_9___

3.5。通知腳本(可選)

___程式碼區塊_10___

3.6。啟動 keepalived

___程式碼區塊_11___

第 4 部分:測試 HA 故障轉移

4.1。測試 1:lb1 關閉時 VIP 故障轉移

___程式碼區塊_12___

4.2。測試 2:HAProxy 失敗 → keepalived 示範

___程式碼區塊_13___

4.3。測試 3:API 伺服器後端故障轉移

___程式碼區塊_14___

第 5 部分:替代方案 — kube-vip

5.1。什麼是 kube-vip?

kube-vip 在控制平面節點上作為靜態 Pod 運行,將 VIP + 負載平衡結合在 1 個元件中:

程式碼區塊_15

5.2。詳細比較

___HTMLTAG_218__HTMLTAG_219___額外伺服器___HTMLTAG_220__HTMLTAG_221___ ___HTMLTAG_228__HTMLTAG_229___複雜性___HTMLTAG_230__HTMLTAG_231___ ___HTMLTAG_238__HTMLTAG_239___獨立___HTMLTAG_240__HTMLTAG_241___ ___HTMLTAG_248__HTMLTAG_249___先有雞還是先有蛋的問題___HTMLTAG_250__HTMLTAG_251___ ___HTMLTAG_258__HTMLTAG_259___健康檢查___HTMLTAG_260__HTMLTAG_261___ ___HTMLTAG_268__HTMLTAG_269___監控___HTMLTAG_270__HTMLTAG_271___ ___HTMLTAG_278__HTMLTAG_279___經過生產驗證___HTMLTAG_280__HTMLTAG_281___ ___HTMLTAG_288__HTMLTAG_289___實驗室/開發___HTMLTAG_290__HTMLTAG_291___
標準 keepalived + HAProxy kube-vip
需要 2 台負載平衡伺服器 不需要
需要管理 2 個元件 1 元件
✅ 獨立於 K8s 叢集 ❌ 在 K8s 中運行(先有雞還是先有蛋)
✅ 無 ⚠️需要在K8s之前初始化
✅ 進階(HTTP、TCP、腳本) 基本
✅ HAProxy 統計數據,普羅米修斯 有限
✅ 20 多年 較新,經過較少的戰鬥測試
過度殺傷 ✅ 完美

💡 推薦:___HTMLTAG_302__HTMLTAG_303___

    ___HTMLTAG_305__HTMLTAG_306___生產: keepalived + HAProxy(成熟、獨立、可觀察) ___HTMLTAG_309__HTMLTAG_310___實驗室/小型: kube-vip(更簡單,無需額外伺服器)

5.3。 kube-vip 快速設定(參考)

___程式碼區塊_16___

第 6 部分:製作注意事項

6.1。 HAProxy 生產調整

___程式碼區塊_17___

6.2。使用 Prometheus 監控 HAProxy

___程式碼區塊_18___

6.3。監控 keepalived

___程式碼區塊_19___

💡 重點

    ___HTMLTAG_329__HTMLTAG_330___VIP 對於 K8s HA 至關重要 — 所有組件均通過 VIP 連接,無需硬編碼主 IP ___HTMLTAG_333__HTMLTAG_334___keepalived 透過 VRRP 協定管理 VIP 故障轉移,故障轉移 < 3 giây ___HTMLTAG_337__HTMLTAG_338___HAProxy 透過執行狀況檢查將 TCP 流量負載平衡到運作狀況良好的 API 伺服器 ___HTMLTAG_341__HTMLTAG_342___nopreempt 模式可避免 MASTER 恢復時不必要的 VIP 抖動 ___HTMLTAG_345__HTMLTAG_346___keepalived 中的健康檢查腳本,以確保 VIP 僅位於 HAProxy 健康的節點上 ___HTMLTAG_349__HTMLTAG_350___測試故障轉移在部署K8s之前:關閉LB,關閉HAProxy,驗證VIP遷移

🎯 練習

練習 1:部署 HAProxy + keepalived

  • 依照指示在 lb1 和 lb2 上安裝 HAProxy + keepalived
  • 驗證 VIP 在 lb1 上處於活動狀態
  • 存取 HAProxy 統計資訊頁面

練習 2:故障轉移測驗

  • 測試 1:停止 lb1 上的 keepalived,驗證 VIP 移動到 lb2
  • 測試 2:停止 lb1 上的 HAProxy,驗證自動降級
  • 測試 3:重新啟動兩者,驗證正確狀態
  • 透過連續 ping 測量故障轉移時間

練習 3:進階

  • 為 HAProxy 新增 Prometheus 導出器
  • 編寫一個通知腳本,在發生故障轉移時向 Slack 發送警報__HTMLTAG_385___
  • 在單獨的檔案中設定 HAProxy 日誌記錄詳細資訊

📚 下一篇文章

在第5課:在所有節點上安裝containerd和kubeadm,我們將安裝容器執行時間(containerd)和kubeadm工具,為K8s HA叢集初始化做好準備。