繁体   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