本文轉自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的官方文件(https://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頁面上,你將找到用於跟蹤請求率、響應時間、活動連線、成功和錯誤響應以及通過的資料量的統計資料。這篇文章(https://www.haproxy.com/blog/exploring-the-haproxy-stats-page/ )介紹了所有提供的指標,這些指標也是通過Prometheus端點暴露的。
HAProxy會發布詳細的日誌,其中包含請求時間資料,可以讓你精確地指出請求中的慢速,斷開程式碼將顯示請求終止的方式和原因,以及顯示整個叢集中的活躍連線數。
可調整的負載均衡
與其他Ingress Controller相比,HAProxy提供了更多的負載均衡演算法,包括輪詢法(Round Robin)、最小連線和基於雜湊的演算法。這種選擇很重要,因為不同型別的服務在不同型別的負載分佈中表現出色。例如,保持連線時間較長的服務在使用最小連線演算法時表現更好,該演算法在向伺服器傳送新客戶端之前檢查伺服器的繁忙程度。你可以在你的Ingress物件中通過新增一個名為haproxy.org/load-balance 的註釋來定義,使用均衡文件中列出的值(https://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應用商店輕鬆部署它,並根據官方文件(https://www.haproxy.com/documentation )的指引進行嘗試才能對其有更深入的瞭解和體會,也能幫助你選出合適自己的Ingress Controller。