簡體   English   中英

將流量路由到kubernetes集群

[英]Routing traffic to kubernetes cluster

我有一個與Kubernetes網絡相關的問題。

我有一個運行在Pod中的微服務(例如numcruncherpod ),該Pod通過端口9000為請求提供服務,並且我創建了一個相應的類型為NodePortnumcrunchersvc )的服務,該服務公開的節點端口為30900

我的集群有3個具有以下IP的節點:

  1. 192.168.201.70,
  2. 192.168.201.71
  3. 192.168.201.72

我將通過反向代理(nginx)將流量路由到我的集群。 據我在nginx中了解,我需要指定所有這些集群節點的IP才能將流量路由到集群,我的理解正確嗎?

我擔心的是,由於nginx不會了解群集,因此決定將流量發送到的群集節點可能不是一個很好的判斷。 那么是否有更好的方法將流量路由到我的kubernetes集群?

PS:我沒有在任何雲平台上運行群集。

這個答案有點晚,而且有點長,所以我在開始之前要求原諒。 :)

對於不在Cloud Providers上運行kubernetes集群的人們,有4種不同的選項可以將集群內部運行的服務暴露給外部環境。

  1. 服務type: NodePort 這是最簡單和默認的。 Kubernetes為您的服務分配一個隨機端口。 群集中的每個節點都偵聽到此特定端口的流量,然后將該流量轉發到支持該服務的任何一個Pod。 這通常由kube-proxy處理,它使用循環策略利用iptables和負載平衡。 通常,由於此設置的UX不太美觀,因此人們經常添加外部“代理”服務器,例如HAProxy,Nginx或httpd,以偵聽單個IP上的流量並將其轉發到這些后端之一。 這是您OP描述的設置。

  2. 要做到這一點,可以使用type: ExternalIP的服務。 這與NodePort服務相同,不同之處在於它還使kubernetes在所有kubernetes節點上添加一條附加規則,該規則說“到達目標IP ==的所有流量必須轉發到Pod”。 基本上,您可以將任何任意IP指定為服務的“外部IP”。 只要發往該IP的流量到達群集中的節點之一,它將被路由到正確的Pod。 但是,作為群集管理員,您必須負責將流量發送到任何節點。 這樣做的好處是,如果您指定一個節點(例如,一個主節點)的物理接口之一的IP,則不再需要運行haproxy / nginx安裝程序。 此外,您將跳數減少了一個。

  3. 服務type: LoadBalancer 這種服務類型使裸機集群與雲提供商處於同等地位。 一個功能齊全的負載平衡器提供程序可以從預定義的池中選擇IP,自動將其分配給您的服務,並在正確配置的情況下將其發布到網絡。 對於裸機上的kubernetes網絡,這是您將獲得的最“無縫”的體驗。 大多數LoadBalancer提供程序實現都使用BGP與上游L3路由器進行通話和通告。 Metallb和kube-router是適合此領域的兩個FOSS項目。

  4. Kubernetes入口。 如果您的需求僅限於REST API,HTTP微服務等L7應用程序,則可以設置單個Ingress提供程序(nginx是這樣的提供程序之一),然后為所有微服務配置Ingress資源,而不是服務資源。 部署入口提供程序,並確保它具有外部可用的可路由IP(您可以將其固定到主節點,並為該節點使用物理接口IP)。 與服務相比,使用Ingress的優勢在於Ingress對象可以原生理解HTTP mircoservices,並且可以執行更智能的運行狀況檢查,路由和管理。

人們通常將(1),(2),(3)中的一個與(4)組合在一起,因為前三個是L4(TCP / UDP),而(4)是L7。 因此,諸如URL路徑/域路由,SSL終止等之類的事情都由入口提供商處理,而IP生命周期管理和路由則由服務層負責。

對於您的用例,理想的設置將涉及:

  1. 微服務的部署,在您的Pod上具有運行狀況端點
  2. 一個Ingress提供程序,以便您可以調整/自定義路由/負載平衡以及用於SSL終止,域匹配等。
  3. (可選):使用LoadBalancer提供程序在Ingress提供程序的前面,這樣您就不必手動配置Ingress的網絡。

正確。 您可以將流量路由到任何或所有K8奴才。 必要時,K8網絡層將轉發到適當的仆從。

例如,如果僅運行一個Pod,nginx將很可能循環請求。 當請求到達未運行Pod的小仆時,請求將被轉發到未運行Pod的小仆。

如果您運行3個Pod,每個爪牙一個,那么無論是爪牙還是從Nginx獲取請求,該請求都會被處理。

如果您在每個仆從上運行多個Pod,則請求將輪循到每個仆從,然后輪循到該仆從上的每個Pod。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM