OpenELB 在 CVTE 的最佳實踐

作者:大飛哥,視源電子股份運維工程師, KubeSphere 社區用戶委員會廣州站站長,KubeSphere Ambassador。

公司介紹

廣州視源電子科技股份有限公司(以下簡稱視源股份)成立於 2005 年 12 月,旗下擁有多家業務子公司。截至 2022 年 12 月 31 日,公司總人數超 6000 人,約 60% 爲技術人員,員工平均年齡約爲 29 歲。

目前公司的主營業務爲液晶顯示主控板卡和交互智能平板等顯控產品的設計、研發與銷售,產品已廣泛應用於家電領域、 教育信息化領域、企業服務領域等,始終致力於通過產品創新、研發設計提升產品的用戶體驗,爲客戶和用戶持續創造價值。公司自成立以來,依託在音視頻技術、信號處理、電源管理、人機交互、應用開發、系統集成等電子產品領域的軟硬件技術積累,面向多應用場景進行技術創新和產品開發,通過產品和資源整合等能力在細分市場逐步取得領先地位,並建立了教育數字化工具及服務提供商希沃(seewo)、智慧協同平臺 MAXHUB 等多個業內知名品牌。

挑戰

隨着在 Kubernetes 上運行的應用程序數量增加,如何優雅地將服務導出到集羣成爲一個需要解決的問題。Kubernetes 提供了 NodePort 和 Loadbalancer 來導出服務。NodePort 受到主機端口數量的限制,過多的端口開放還會有安全風險,在流量治理方面更是讓人望而生畏;Loadbalancer 則用於聲明雲供應商的服務,對於裸金屬服務器而言,Kubernetes 官方不提供支持。對於企業私有云中的 Kubernetes 集羣,想要對外提供服務,就遇到了挺大的挑戰。在這種情況下,我們發現了 OpenELB, 它可以在 Loadbalancer 類型中導出服務並穩定運行。

解決方案

作爲 KubeSphere 團隊開源的項目,OpenELB(曾用名 Porter)是一款爲裸金屬服務器提供 LoadBalancer 類型服務的產品。

總結起來,有如下幾個優點:

  • 首先,它是由一個團隊而不是個人運行的,而且社區貢獻者頗多,因此可以避免廠商依賴或者無人維護。
  • 其次,OpenELB 支持的協議比同類競爭對手更多。
  • 最後,OpenELB 有完備的文檔,對中文支持友好,企業服務可以獲得更多的技術服務支持。在使用過程中,您會發現更多的驚喜。

實踐過程

管理員可以通過 NodePort 導出 Kubernetes 服務。在這種情況下,每臺集羣主機都會導出同樣的端口,這在大規模集羣中的開銷是巨大的。不幸的是,Kubernetes 可以使用的主機端口是有限的(30000-32768)。開源社區建議使用動態端口,這可能會帶來風險和管理難度,給流量治理帶來巨大的挑戰。Kubernetes 中的默認 LoadBalancer 類型的服務僅支持雲廠商提供的服務。

OpenELB 是一種解決方案,用於爲裸機提供負載均衡類型的服務,基於 BGP 和 ECMP 協議,可實現最佳性能和高可用性。OpenELB 提供了兩個功能模塊:

  1. 負載均衡控制器(Controller)

    該控制器負責將 BGP 路由同步到物理交換機。

  2. CRD 和 CRD 控制器

    CRD EIP 定義了在 Layer2 模式中使用的 EIP 地址池,同樣,CRD BgpConf 和 BgpPeer 定義了 Kubernetes 集羣內部的 BGP,並用於 BGP 模式。

生產環境中,強烈建議使用 BGP 模式。如下圖所示,把物理路由器設備劃歸到 AS50001 中,把 OpenELB 所在的集羣劃歸到 AS 50000 中,OpenELB 會建立服務路由規則,並將其同步到物理路由器上,BGP 路由器根據負載均衡策略轉發對應的流量到達相應的集羣主機節點上,kube-proxy 再近一步轉發流量到 Service 層。BGP 模式需要物理路由器設備和集羣主機網絡的支持,其最大的優點就是穩定可靠,解決了路由轉發的單點故障問題。

雖然 BGP 模式是建議的模式,但是在實際應用中,Layer2 模式使用更爲廣泛。因爲它簡單易用,配置要求低,配置簡單。對於使用虛擬機作爲 K8s 集羣節點的用戶,受 VMware 網絡的限制,只能選擇 Layer2 模式。讓我們來看下 Layer2 模式的網絡架構。

我們使用 GitLab CI 和 Argo CD 建立自動化流水線,以幫助開發人員提高效率,並使用 Nginx Ingress 處理 7 層請求。Argo CD 使用 IP 10.10.1.2 導出負載均衡類型的服務,而 Nginx Ingress 則使用 IP 10.10.1.3 導出。因此,我們可以建立如下的 DNS 記錄:

# HOSTS
10.10.1.2  argocd.cvte.com
10.10.1.3  ingress.cvte.com

當用戶訪問像 argocd.cvte.com 這樣的域名時,請求將路由到路由器。由於 EIP 不能綁定到任何網絡卡硬件上,因此路由器需要廣播 ARP 請求,這個請求將被 OpenELB 迴應一個集羣節點的 IP。這樣,路由器就知道將網絡數據包發送到哪裏了。由 Ingress 控制的任何其他域都會路由到另一個 EIP。

通常情況下,OpenELB 僅會使用一個集羣節點 IP 響應 ARP 請求。如果此節點關閉或不可用,則 OpenELB 會切換到另一個節點,以確保業務的連續性。

通過對 Layer2 模式原理的講解,不難發現,Layer2 模式有單點故障風險。爲了減少這種單點風險,KubeSphere 研發團隊貼心地開發了 VIP 模式,即虛擬 IP 模式。VIP 提供了單點故障的轉移,當 Layer2 模式中的主機節點故障,OpenELB 會自動切換流量到備份 IP。VIP 模式,只能算是減少單點故障風險,無法完全消滅風險。所以在生產環境中,普通 Layer2 模式或 VIP 模式,都不建議使用。根據我們的經驗,如萬般無奈,只能使用 Layer2 模式,那就獨立兩臺機器,只用來接收外部流量,並儘量保證這兩臺機器的高可用。

使用效果

OpenELB 以 TCP 協議導出服務,並與 Ingress 配合使用,可以輕鬆管理大多數 Web 應用程序。與 NodePort 不同,OpenELB 只需要幾個 EIP 即可代理請求到服務,流量集中處理從而極大地降低了管理難度。

總結

OpenELB 提供了一種爲裸金屬服務器導出 LoadBalancer 類型服務的功能,幫助我們輕鬆地管理網絡基礎設施。作爲 KubeSphere 的一個子項目,OpenELB 非常適合在企業私有云環境中使用,具有較強的穩定性和可信度。

參考閱讀

本文由博客一文多發平臺 OpenWrite 發佈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章