一文了解HAProxy主要特性

在Kubernetes中,Ingress對(duì)象定義了一些路由規(guī)則,這些規(guī)則規(guī)定如何將一個(gè)客戶端請(qǐng)求路由到指定服務(wù),該服務(wù)運(yùn)行在你的集群中。這些規(guī)則可以考慮到輸入的HTTP消息的獨(dú)特方面,包括其Host請(qǐng)求頭和URL路徑,這將允許你在請(qǐng)求中使用數(shù)據(jù)發(fā)現(xiàn)將流量從一個(gè)服務(wù)發(fā)送到另一個(gè)服務(wù)。那意味著你能夠使用Ingress對(duì)象來(lái)為許多不同的應(yīng)用程序定義路由。

雖然Ingress對(duì)象定義路由,但I(xiàn)ngress Controller是驅(qū)動(dòng)它們的引擎。Ingress Controller是一個(gè)位于客戶端和服務(wù)之間的代理,其作用是正確地傳遞消息。目前市面上已經(jīng)有幾個(gè)項(xiàng)目實(shí)現(xiàn)了Ingress Controller規(guī)范,每個(gè)項(xiàng)目都有其優(yōu)勢(shì)。Rancher提供了一個(gè)基于NGINX的默認(rèn)controller,但你并不需要局限于此。Rancher已經(jīng)和HAProxy達(dá)成合作,因此你也可以選擇使用HAProxy Ingress Controller。我們傾向于把HAProxy Ingress Controller看作是一個(gè)完美的Kubernetes的渦輪增壓引擎,能夠充分提升Kubernetes的使用效率。
HAProxy Ingress Controller的特性
你可以在Rancher應(yīng)用商店中找到HAProxy,此外你還可以在HAProxy的官方文檔(https://www.haproxy.com/documentation/hapee/latest/installation/rancher/)中找到HAProxy的安裝細(xì)節(jié)。設(shè)置完成之后,HAProxy將會(huì)自動(dòng)監(jiān)聽(tīng)和實(shí)現(xiàn)Ingress規(guī)則。此時(shí),你可以選擇禁用NGINX Ingress Controller或保持兩個(gè)Ingress controller都運(yùn)行并通過(guò)名稱指定其中一個(gè)。

HAProxy的功能特性包括以下內(nèi)容:
零宕機(jī)重載
包括NGINX Ingress Controller在內(nèi)的許多代理類型,重載都會(huì)導(dǎo)致短暫的時(shí)間窗口,此時(shí)后端服務(wù)不可用。在許多情況下,當(dāng)HAProxy需要刷新其配置時(shí),它可以完全避免重新加載。
它的Runtime API允許完全在內(nèi)存中實(shí)現(xiàn)更改。然而,由于HAProxy的無(wú)中斷重載,需要重載的更改不會(huì)導(dǎo)致停機(jī)。這意味著,無(wú)論你何時(shí)從Ingress規(guī)則中添加或刪除路徑、更新Secret或更改注釋都不會(huì)對(duì)流量產(chǎn)生影響。
增壓性能
由于HAProxy對(duì)性能的關(guān)注,你會(huì)發(fā)現(xiàn)每秒可處理的請(qǐng)求數(shù)會(huì)立即受到影響——明顯增加。此外,通過(guò)彈性二進(jìn)制樹(shù)等獨(dú)特的算法,HAProxy比其他controller使用更少的資源。
可觀察性
使用Stats頁(yè)面、Runtime API和raw configuration,你可以輕松查看配置好的Pod以及相關(guān)聯(lián)的后端和它們的健康狀態(tài)。默認(rèn)的Ingress controller會(huì)要求你安裝krew以查看這一信息。
?
HAProxy提供大量有關(guān)流向你的集群的流量指標(biāo)。在HAProxy Stats頁(yè)面上,你將找到用于跟蹤請(qǐng)求率、響應(yīng)時(shí)間、活動(dòng)連接、成功和錯(cuò)誤響應(yīng)以及通過(guò)的數(shù)據(jù)量的統(tǒng)計(jì)數(shù)據(jù)。這篇文章(https://www.haproxy.com/blog/exploring-the-haproxy-stats-page/)介紹了所有提供的指標(biāo),這些指標(biāo)也是通過(guò)Prometheus端點(diǎn)暴露的。

HAProxy會(huì)發(fā)布詳細(xì)的日志,其中包含請(qǐng)求時(shí)間數(shù)據(jù),可以讓你精確地指出請(qǐng)求中的慢速,斷開(kāi)代碼將顯示請(qǐng)求終止的方式和原因,以及顯示整個(gè)集群中的活躍連接數(shù)。
可調(diào)整的負(fù)載均衡
與其他Ingress Controller相比,HAProxy提供了更多的負(fù)載均衡算法,包括輪詢法(Round Robin)、最小連接和基于哈希的算法。這種選擇很重要,因?yàn)椴煌愋偷姆?wù)在不同類型的負(fù)載分布中表現(xiàn)出色。例如,保持連接時(shí)間較長(zhǎng)的服務(wù)在使用最小連接算法時(shí)表現(xiàn)更好,該算法在向服務(wù)器發(fā)送新客戶端之前檢查服務(wù)器的繁忙程度。你可以在你的Ingress對(duì)象中通過(guò)添加一個(gè)名為haproxy.org/load-balance的注釋來(lái)定義,使用均衡文檔中列出的值(https://www.haproxy.com/documentation/hapee/latest/onepage/#balance)。
一旦你啟用HTTPS,HAProxy就會(huì)自動(dòng)啟用端到端的HTTP/2。NGINX在客戶端支持HTTP/2,同時(shí)HAProxy也支持通過(guò)HTTP/2連接到你的pods。此外,HAProxy還支持gRPC服務(wù)的端到端streaming。
增強(qiáng)的安全性
諸如白名單IP地址以及強(qiáng)制速率限制等安全功能形成了一個(gè)重要的保護(hù)層。使用HAProxy,這些功能都能夠立刻實(shí)現(xiàn)并且你可以使用注釋調(diào)整它們。當(dāng)你的集群托管多個(gè)服務(wù)時(shí),速率限制是至關(guān)重要的,因?yàn)槟阋欢ú粫?huì)希望一個(gè)服務(wù)占用所有的帶寬。
過(guò)載保護(hù)隊(duì)列
HAProxy的連接隊(duì)列提供了對(duì)流量峰值的保護(hù)。通過(guò)在Kubernetes服務(wù)上設(shè)置pod-maxconn注釋,一組pod會(huì)獲得最大并發(fā)連接數(shù)限制,額外的連接數(shù)會(huì)被排隊(duì),從而防止pod超載。
結(jié) 論
本文介紹了HAProxy的6個(gè)主要特性,可以幫助你更清晰地了解HAProxy Ingress Controller的優(yōu)勢(shì)。如果你還想更深入地了解HAProxy,你也可以通過(guò)Rancher應(yīng)用商店輕松部署它,并根據(jù)官方文檔(https://www.haproxy.com/documentation)的指引進(jìn)行嘗試才能對(duì)其有更深入的了解和體會(huì),也能幫助你選出合適自己的Ingress Controller。