溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Kubernetes上負(fù)載均衡的示例分析

發(fā)布時(shí)間:2021-12-27 11:54:50 來(lái)源:億速云 閱讀:111 作者:小新 欄目:云計(jì)算

這篇文章主要介紹了Kubernetes上負(fù)載均衡的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

如果您的應(yīng)用程序是面向大量用戶、會(huì)吸引大量流量,那么一個(gè)不變的目標(biāo)一定是在高效滿足用戶需求的同時(shí)、不讓用戶感知到任何類似于“服務(wù)器繁忙!”的情況。這一訴求的典型解決方案是橫向擴(kuò)展部署,以便有多個(gè)應(yīng)用程序容器可以為用戶請(qǐng)求提供服務(wù)。但是,這種技術(shù)需要可靠的路由功能,需要可以有效地在多個(gè)服務(wù)器之間分配流量。本文分享的內(nèi)容就是要解決負(fù)載均衡解決方案的問(wèn)題。

Rancher 1.6是Docker和Kubernetes的容器編排平臺(tái),為負(fù)載均衡提供了功能豐富的支持。在Rancher 1.6中,用戶可以通過(guò)使用開箱即用的HAProxy負(fù)載均衡器,來(lái)提供基于HTTP / HTTPS / TCP主機(jī)名/路徑的路由。

而在本文中,我們將探討如何在原生使用Kubernetes進(jìn)行編排的Rancher 2.0平臺(tái)上實(shí)現(xiàn)這些流行的負(fù)載均衡技術(shù)。

Rancher 2.0 負(fù)載均衡功能

通過(guò)Rancher 2.0,用戶可以開箱即用地使用由NGINX Ingress Controller支持的原生Kubernetes Ingress功能進(jìn)行7層負(fù)載均衡。因?yàn)镵ubernetes Ingress僅支持HTTP和HTTPS協(xié)議,所以目前如果您使用的是Ingress支持,那么負(fù)載均衡僅限于上述這兩種協(xié)議。

對(duì)于TCP協(xié)議,Rancher 2.0支持在部署Kubernetes集群的云上配置第4層TCP負(fù)載均衡器。后文中我們還將介紹如何通過(guò)ConfigMaps為TCP均衡配置NGINX Ingress Controller。

HTTP/HTTPS 負(fù)載均衡功能

在Rancher 1.6中,您添加了端口/服務(wù)規(guī)則以配置HAProxy負(fù)載均衡器,以均衡目標(biāo)服務(wù)。您還可以配置基于主機(jī)名/路徑的路由規(guī)則。

例如,下面讓我們來(lái)看看一個(gè)在Rancher 1.6上啟動(dòng)了兩個(gè)容器的服務(wù)。啟動(dòng)的容器正在監(jiān)聽私有80端口。

Kubernetes上負(fù)載均衡的示例分析

為了均衡兩個(gè)容器之間的外部流量,我們可以為應(yīng)用程序創(chuàng)建一個(gè)負(fù)載均衡器,如下所示。在這里,我們會(huì)配置負(fù)載均衡器,將進(jìn)入端口80的所有流量轉(zhuǎn)發(fā)到目標(biāo)服務(wù)的容器端口,然后Rancher 1.6在負(fù)載均衡器服務(wù)上放置了一個(gè)方便的鏈接到公共端點(diǎn)。

Kubernetes上負(fù)載均衡的示例分析

Kubernetes上負(fù)載均衡的示例分析

Rancher 2.0提供了一種使用非常相似的、由NGINX Ingress Controller支持的、使用Kubernetes Ingress的負(fù)載均衡器功能。下文中我們一起來(lái)看看我們?cè)撊绾巫觥?/p>

Rancher 2.0 Ingress Controller部署

Ingress只是一種規(guī)則,控制器組件會(huì)將這一規(guī)則應(yīng)用于實(shí)際負(fù)載均衡器中。實(shí)際負(fù)載均衡器可以在集群外部運(yùn)行,也可以在集群中部署。

通過(guò)RKE(Rancher Kubernetes安裝程序),Rancher 2.0讓用戶可以開箱即用地在配置的集群上部署NGINX Ingress Controller和負(fù)載均衡器,以處理Kubernetes Ingress規(guī)則。請(qǐng)注意,NGINX Ingress Controller默認(rèn)安裝在RKE配置的集群上。通過(guò)云提供商(如GKE)配置的集群具有自己的Ingress Controller來(lái)配置負(fù)載均衡器。本文的范圍僅適用于使用RKE安裝的NGINX Ingress Controller。

RKE將NGINX Ingress Controller部署為Kubernetes DaemonSet——因此NGINX實(shí)例會(huì)部署在集群中的每個(gè)節(jié)點(diǎn)上。NGINX就像一個(gè)Ingress Controller,在整個(gè)集群中監(jiān)聽I(yíng)ngress創(chuàng)建,它還會(huì)將自身配置為滿足Ingress規(guī)則的負(fù)載均衡器。DaemonSet配置有hostNetwork以暴露兩個(gè)端口——端口80和端口443。有關(guān)如何部署NGINX Ingress Controller DaemonSet和部署配置選項(xiàng)的詳細(xì)信息,請(qǐng)參閱此處:

https://rancher.com/docs/rke/v0.1.x/en/config-options/add-ons/ingress-controllers/

如果您是Rancher 1.6用戶,那么將Rancher 2.0 Ingress Controller以DaemonSet的形式部署,會(huì)帶來(lái)一些你需要知悉的重要的改變。

在Rancher 1.6中,您可以在堆棧中部署可擴(kuò)展的負(fù)載均衡器服務(wù)。因此,如果您在Cattle環(huán)境中有四臺(tái)主機(jī),則可以部署一臺(tái)規(guī)模為2的負(fù)載均衡器服務(wù),并通過(guò)端口80在這兩個(gè)主機(jī)IP地址上指向您的應(yīng)用程序。然后,您還可以在剩余的兩臺(tái)主機(jī)上啟動(dòng)另一臺(tái)負(fù)載均衡器,以通過(guò)端口80再次均衡不同的服務(wù)(因?yàn)樨?fù)載均衡器使用不同的主機(jī)IP地址)。

Kubernetes上負(fù)載均衡的示例分析

Rancher 2.0 Ingress Controller是一個(gè)DaemonSet——因此它全局部署在所有可調(diào)度節(jié)點(diǎn)上,以便為整個(gè)Kubernetes集群提供服務(wù)。因此,在對(duì)Ingress規(guī)則進(jìn)行編程時(shí),你需要使用唯一的主機(jī)名和路徑指向工作負(fù)載,因?yàn)樨?fù)載均衡器節(jié)點(diǎn)IP地址和端口80/443是所有工作負(fù)載的公共訪問(wèn)點(diǎn)。

Kubernetes上負(fù)載均衡的示例分析

現(xiàn)在讓我們看看如何使用Ingress將上述1.6示例部署到Rancher 2.0上。在Rancher UI上,我們可以導(dǎo)航到Kubernetes Cluster和Project,并選擇【部署工作負(fù)載/Deploy Workloads】功能,在命名空間下部署所需鏡像的工作負(fù)載。讓我們將工作負(fù)載的規(guī)模設(shè)置為兩個(gè)副本,如下所示:

Kubernetes上負(fù)載均衡的示例分析

以下是工作負(fù)載選項(xiàng)卡上部署和列出工作負(fù)載的方式:

Kubernetes上負(fù)載均衡的示例分析

要達(dá)到這兩個(gè)pod之間的均衡,您必須創(chuàng)建Kubernetes Ingress規(guī)則。要?jiǎng)?chuàng)建此規(guī)則,請(qǐng)導(dǎo)航到您的集群和項(xiàng)目,然后選擇“ 負(fù)載均衡”選項(xiàng)卡。

Kubernetes上負(fù)載均衡的示例分析

與Rancher 1.6中的服務(wù)/端口規(guī)則類似,您可以在此處指定針對(duì)工作負(fù)載的容器端口的規(guī)則。

Kubernetes上負(fù)載均衡的示例分析

基于主機(jī)和路徑的路由

Rancher 2.0允許您添加基于主機(jī)名或URL路徑的Ingress規(guī)則。根據(jù)您的規(guī)則,NGINX Ingress Controller將流量路由到多個(gè)目標(biāo)工作負(fù)載。下面讓我們看看如何使用相同的Ingress規(guī)范將流量路由到命名空間中的多個(gè)服務(wù)。比如如下兩個(gè)在命名空間中部署的工作負(fù)載:

Kubernetes上負(fù)載均衡的示例分析

我們可以使用相同的主機(jī)名但不同的路徑添加Ingress來(lái)均衡這兩個(gè)工作負(fù)載的流量。

Kubernetes上負(fù)載均衡的示例分析

Rancher 2.0還為Ingress記錄中的工作負(fù)載提供了方便的鏈接。如果配置外部DNS以對(duì)DNS記錄進(jìn)行編程,則可以將此主機(jī)名映射到Kubernetes Ingress地址。

Kubernetes上負(fù)載均衡的示例分析

Ingress地址是您的集群中Ingress Controller為您的工作負(fù)載分配的IP地址。您可以通過(guò)瀏覽此IP地址來(lái)達(dá)到工作負(fù)載。使用kubectl查看控制器分配入口地址。

Kubernetes上負(fù)載均衡的示例分析

您可以使用Curl來(lái)測(cè)試基于主機(jī)名/路徑的路由規(guī)則是否正常工作,如下所示:

Kubernetes上負(fù)載均衡的示例分析

Kubernetes上負(fù)載均衡的示例分析

以下是使用基于主機(jī)名/路徑的規(guī)則的Rancher 1.6配置規(guī)范,與2.0 Kubernetes Ingress YAML規(guī)范進(jìn)行比較:

Kubernetes上負(fù)載均衡的示例分析

HTTPS /證書選項(xiàng)

Rancher 2.0 Ingress功能還支持HTTPS協(xié)議。您可以在配置Ingress規(guī)則時(shí)上載證書并使用它們,如下所示:

Kubernetes上負(fù)載均衡的示例分析

添加Ingress規(guī)則時(shí)選擇證書:

Kubernetes上負(fù)載均衡的示例分析

Ingress限制

盡管Rancher 2.0支持HTTP- / HTTPS-基于主機(jī)名/路徑的負(fù)載均衡,但要突出的一個(gè)重要區(qū)別是在為工作負(fù)載配置Ingress時(shí)需要使用唯一的主機(jī)名/路徑。原因是Ingress功能僅允許將端口80/443用于路由,負(fù)載均衡器和Ingress Controller則可作為DaemonSet全局啟動(dòng)。

從最新的Rancher 2.x版本開始,Kubernetes Ingress不支持TCP協(xié)議,但我們將在下一節(jié)中討論使用NGINX Ingress Controller的解決方法。

TCP負(fù)載均衡選項(xiàng)

  • 四層負(fù)載均衡器

對(duì)于TCP協(xié)議,Rancher 2.0支持在部署Kubernetes集群的云提供程序中配置四層負(fù)載均衡器。為集群配置此負(fù)載均衡器設(shè)備后,Layer-4 Load Balancer在工作負(fù)載部署期間選擇for port-mapping 選項(xiàng)時(shí),Rancher會(huì)創(chuàng)建Load Balancer服務(wù)。此服務(wù)會(huì)讓Kubernetes的相應(yīng)云提供商配置負(fù)載均衡器設(shè)備。然后,此設(shè)備將外部流量路由到您的應(yīng)用程序pod。請(qǐng)注意,上述功能需要該Kubernetes云提供商滿足負(fù)載均衡器服務(wù)的要求,按此文檔配置:

https://rancher.com/docs/rancher/v2.x/en/cluster-provisioning/rke-clusters/options/cloud-providers/

Kubernetes上負(fù)載均衡的示例分析

一旦負(fù)載均衡器配置成功,Rancher將在Rancher UI中為您的工作負(fù)載的公共端點(diǎn)提供一個(gè)鏈接。

  • 通過(guò)ConfigMaps支持NGINX Ingress Controller TCP

如上所述,Kubernetes Ingress本身不支持TCP協(xié)議。因此,即使TCP不是NGINX的限制,也無(wú)法通過(guò)Ingress創(chuàng)建來(lái)配置NGINX Ingress Controller以進(jìn)行TCP負(fù)載均衡。

但是,您可以通過(guò)創(chuàng)建一個(gè)Kubernetes ConfigMap,來(lái)使用NGINX的TCP負(fù)載均衡功能,具體可參閱這里:https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/exposing-tcp-udp-services.md。您可以創(chuàng)建Kuberenetes ConfigMap對(duì)象,來(lái)將pod配置參數(shù)存儲(chǔ)為鍵值對(duì),與pod鏡像分開,更多細(xì)節(jié)可以參考這里:

https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/

要配置NGINX以通過(guò)TCP暴露服務(wù),您可以添加或更新命名空間tcp-services中的ConfigMap ingress-nginx。此命名空間還包含NGINX Ingress Controller pod。

Kubernetes上負(fù)載均衡的示例分析

ConfigMap條目中的密鑰應(yīng)該是您要公開訪問(wèn)的TCP端口,其值應(yīng)為格式<namespace/service name>:<service port>。如上所示,我暴露了Default命名空間中存在的兩個(gè)工作負(fù)載。例如,上面ConfigMap中的第一個(gè)條目告訴NGINX我想在外部端口上暴露運(yùn)行在default命名空間上的myapp工作負(fù)載,并監(jiān)聽在外部端口6790上的私有端口80。

將這些條目添加到Configmap,將自動(dòng)更新NGINX pod,以配置這些工作負(fù)載來(lái)進(jìn)行TCP負(fù)載均衡。您可以執(zhí)行部署在ingress-nginx命名空間中的這些pod,并查看如何在/etc/nginx/nginx.conf文件中配置這些TCP端口。<NodeIP>:<TCP Port>在NGINX配置/etc/nginx/nginx.conf更新后,應(yīng)該可以使用公開的工作負(fù)載。如果它們不可訪問(wèn),則可能必須使用NodePort服務(wù)來(lái)暴露TCP端口。

Rancher 2.0負(fù)載均衡的限制

Cattle提供了功能豐富的負(fù)載均衡器支持(詳細(xì)介紹在此:https://rancher.com/docs/rancher/v1.6/en/cattle/adding-load-balancers/#load-balancers)。其中一些功能在Rancher 2.0中暫時(shí)沒有等效功能:

當(dāng)前NGINX Ingress Controller不支持SNI。

TCP負(fù)載均衡需要集群中的云提供程序啟用的負(fù)載均衡器設(shè)備。Kubernetes上沒有對(duì)TCP的Ingress支持。

只能通過(guò)Ingress為端口80/443配置HTTP / HTTPS路由。此外,Ingress Controller作為Daemonset進(jìn)行全局部署,而不是作為可擴(kuò)展服務(wù)啟動(dòng)。此外,用戶無(wú)法隨機(jī)分配外部端口來(lái)進(jìn)行負(fù)載均衡。因此,用戶需要確保它們配置的主機(jī)名/路徑組合是唯一的,以避免使用相同的兩個(gè)端口發(fā)生路由沖突。

無(wú)法指定端口規(guī)則優(yōu)先級(jí)和排序。

Rancher 1.6增加了對(duì)draining后端連接和drain超時(shí)的支持。Rancher 2.0暫不支持此功能。

目前在Rancher 2.0中,不支持指定自定義粘性策略和自定義負(fù)載均衡器配置以附加到默認(rèn)配置。原生Kubernetes對(duì)此有一定的支持,不過(guò)也只限于定制NGINX配置:

https://kubernetes.github.io/ingress-nginx/examples/customization/custom-configuration/README/。

將負(fù)載均衡器配置從Docker Compose遷移到Kubernetes YAML?

Rancher 1.6通過(guò)啟動(dòng)自己的微服務(wù)提供負(fù)載均衡器支持,該微服務(wù)啟動(dòng)并配置了HAProxy。用戶添加的負(fù)載均衡器配置在rancher-compose.yml文件中指定,而不是標(biāo)準(zhǔn)的docker-compose.yml。Kompose工具適用于標(biāo)準(zhǔn)的docker-compose參數(shù),但在本文的情況下,是無(wú)法解析Rancher負(fù)載均衡器配置結(jié)構(gòu)的。截至目前,我們暫時(shí)無(wú)法使用Kompose工具將負(fù)載均衡器配置從Docker Compose轉(zhuǎn)換為Kubernetes YAML。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Kubernetes上負(fù)載均衡的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI