一文了解HAProxy主要特性

本文轉自Rancher Labs

在Kubernetes中,Ingress對象定義了一些路由規則,這些規則規定如何將一個客戶端請求路由到指定服務,該服務運行在你的集群中。這些規則可以考慮到輸入的HTTP消息的獨特方面,包括其Host請求頭和URL路徑,這將允許你在請求中使用數據發現將流量從一個服務發送到另一個服務。那意味著你能夠使用Ingress對象來為許多不同的應用程式定義路由。

雖然Ingress對象定義路由,但Ingress Controller是驅動它們的引擎。Ingress Controller是一個位於客戶端和服務之間的代理,其作用是正確地傳遞消息。目前市面上已經有幾個項目實現了Ingress Controller規範,每個項目都有其優勢。Rancher提供了一個基於NGINX的默認controller,但你並不需要局限於此。Rancher已經和HAProxy達成合作,因此你也可以選擇使用HAProxy Ingress Controller。我們傾向於把HAProxy Ingress Controller看作是一個完美的Kubernetes的渦輪增壓引擎,能夠充分提升Kubernetes的使用效率。

HAProxy Ingress Controller的特性

你可以在Rancher應用商店中找到HAProxy,此外你還可以在HAProxy的官方文檔(//www.haproxy.com/documentation/hapee/latest/installation/rancher/ )中找到HAProxy的安裝細節。設置完成之後,HAProxy將會自動監聽和實現Ingress規則。此時,你可以選擇禁用NGINX Ingress Controller或保持兩個Ingress controller都運行並通過名稱指定其中一個。

HAProxy的功能特性包括以下內容:

零宕機重載

包括NGINX Ingress Controller在內的許多代理類型,重載都會導致短暫的時間窗口,此時後端服務不可用。在許多情況下,當HAProxy需要刷新其配置時,它可以完全避免重新載入。

它的Runtime API允許完全在記憶體中實現更改。然而,由於HAProxy的無中斷重載,需要重載的更改不會導致停機。這意味著,無論你何時從Ingress規則中添加或刪除路徑、更新Secret或更改注釋都不會對流量產生影響。

增壓性能

由於HAProxy對性能的關注,你會發現每秒可處理的請求數會立即受到影響——明顯增加。此外,通過彈性二進位樹等獨特的演算法,HAProxy比其他controller使用更少的資源。

可觀察性

使用Stats頁面、Runtime API和raw configuration,你可以輕鬆查看配置好的Pod以及相關聯的後端和它們的健康狀態。默認的Ingress controller會要求你安裝krew以查看這一資訊。

HAProxy提供大量有關流向你的集群的流量指標。在HAProxy Stats頁面上,你將找到用於跟蹤請求率、響應時間、活動連接、成功和錯誤響應以及通過的數據量的統計數據。這篇文章(//www.haproxy.com/blog/exploring-the-haproxy-stats-page/ )介紹了所有提供的指標,這些指標也是通過Prometheus端點暴露的。

HAProxy會發布詳細的日誌,其中包含請求時間數據,可以讓你精確地指出請求中的慢速,斷開程式碼將顯示請求終止的方式和原因,以及顯示整個集群中的活躍連接數。

可調整的負載均衡

與其他Ingress Controller相比,HAProxy提供了更多的負載均衡演算法,包括輪詢法(Round Robin)、最小連接和基於哈希的演算法。這種選擇很重要,因為不同類型的服務在不同類型的負載分布中表現出色。例如,保持連接時間較長的服務在使用最小連接演算法時表現更好,該演算法在向伺服器發送新客戶端之前檢查伺服器的繁忙程度。你可以在你的Ingress對象中通過添加一個名為haproxy.org/load-balance 的注釋來定義,使用均衡文檔中列出的值(//www.haproxy.com/documentation/hapee/latest/onepage/#balance )。

一旦你啟用HTTPS,HAProxy就會自動啟用端到端的HTTP/2。NGINX在客戶端支援HTTP/2,同時HAProxy也支援通過HTTP/2連接到你的pods。此外,HAProxy還支援gRPC服務的端到端streaming。

增強的安全性

諸如白名單IP地址以及強制速率限制等安全功能形成了一個重要的保護層。使用HAProxy,這些功能都能夠立刻實現並且你可以使用注釋調整它們。當你的集群託管多個服務時,速率限制是至關重要的,因為你一定不會希望一個服務佔用所有的頻寬。

過載保護隊列

HAProxy的連接隊列提供了對流量峰值的保護。通過在Kubernetes服務上設置pod-maxconn注釋,一組pod會獲得最大並發連接數限制,額外的連接數會被排隊,從而防止pod超載。

結 論

本文介紹了HAProxy的6個主要特性,可以幫助你更清晰地了解HAProxy Ingress Controller的優勢。如果你還想更深入地了解HAProxy,你也可以通過Rancher應用商店輕鬆部署它,並根據官方文檔(//www.haproxy.com/documentation )的指引進行嘗試才能對其有更深入的了解和體會,也能幫助你選出合適自己的Ingress Controller。