当前位置: 首页 > 知识库问答 >
问题:

为什么我们需要一个负载均衡器来使用入口公开kubernetes服务?

芮明知
2023-03-14

对于部署在Google kubernetes引擎上的基于微服务的架构示例,我需要帮助来验证我的理解:

  1. 我们知道服务应该为pod副本集负载平衡流量。
  2. 当我们创建一个nginx入口控制器和入口定义来路由到每个服务时,负载均衡器也会自动设置。
  3. 曾在某处读到,创建nginx入口控制器意味着在幕后创建nginx控制器(部署)和负载均衡器类型的服务。我不确定这是否是真的。

负载平衡似乎是由服务来完成的。入口控制器正在执行基于URL的路由。

为什么我们需要负载平衡器?这并不意味着要跨多个实例进行负载平衡。它只会将所有流量转发给创建的nginx反向代理,并根据URL路由请求。

如果我的理解有误,请改正。

共有3个答案

吕永嘉
2023-03-14

负载平衡似乎是由服务来完成的。入口控制器正在执行基于URL的路由。

服务确实平衡了POD之间的流量。但默认情况下,在Google kubernetes引擎中的kubernetes之外无法访问它们(ClusterIP类型)。您可以使用LoadBalancer类型创建服务,但每个服务都将获得自己的IP地址(网络负载平衡器),因此可能会变得昂贵。此外,如果您有一个具有不同服务的应用程序,那么最好使用提供单个入口点的入口对象。创建Ingress对象时,Ingress控制器(例如nginx one)会创建一个Google Cloud HTTP(S)负载平衡器。入口对象又可以与一个或多个服务对象相关联。

然后您可以从入口对象获取分配的负载均衡器IP:

获取入口入口名称

因此,可以在kubernetes集群之外访问pods中的应用程序:

负载平衡器IP/url1-

LoadBalancerIP/url2-

宋岳
2023-03-14

入口控制器(例如nginx)吊舱需要暴露在kubernetes集群之外,作为所有进入kubernetes集群的南北通信量的入口点。一种方法是通过负载平衡器。您也可以使用NodePort,但不建议将其用于生产,或者您可以直接在具有公共ip的主机上的主机网络上html" target="_blank">部署入口控制器。拥有负载平衡器还能够跨入口控制器吊舱的多个副本对流量进行负载平衡。

当您使用入口控制器时,流量从负载平衡器到达入口控制器,然后根据入口资源中定义的规则到达后端POD IP。这绕过了kubernetes服务和kubernetes服务提供的负载平衡(通过第4层的kube代理)。入口控制器在内部发现kubernetes服务endpoint的所有POD IP,并直接将流量路由到POD。

郎雅昶
2023-03-14

Service类型LoadBalancerInete是从外部访问应用程序的方式,尽管它们的工作方式不同。

服务:

在Kubernetes中,服务是一种抽象,它定义了一组逻辑POD和访问POD的策略(有时这种模式被称为微服务)。服务所针对的吊舱集通常由选择器确定(请参见下文了解为什么您可能需要一个没有选择器的服务)。

有一些类型的服务,其中LoadBalancer类型允许您公开您的应用程序,为您的服务分配外部IP。对于每个LoadBalancer服务,都将为其分配一个新的外部IP。负载平衡将由库贝代理处理。

进入:

一个API对象,用于管理对集群中服务的外部访问,通常是HTTP。入口可以提供负载平衡、SSL终止和基于名称的虚拟主机。

当您设置入口(即:nginx ingress)时,将为入口控制器吊舱创建服务类型负载平衡器,并自动在云提供商中创建负载平衡器,并为nginx ingress服务分配公共IP。

此负载平衡器/公共ip将用于所有服务的传入连接,nginx ingress将负责处理传入连接。

例如:

Supose您有10个LoadBalancer类型的服务:这将导致创建10个新的Public ip,您需要为您想要访问的服务使用相应的ip。

但如果使用入口,则只会创建1个IP,入口将负责根据入口配置中定义的路径/URL处理正确服务的传入连接。通过入口,您可以:

  • 使用路径中的regex定义要重定向的服务

Ingress中关于Ingress负载平衡的一个重要注意事项:

GCE/AWS负载平衡器不为其目标池提供权重。这不是旧LB kube代理规则的问题,旧LB kube代理规则可以在所有endpoint之间正确平衡。

使用新功能,外部流量在POD之间的负载平衡并不均衡,而是在节点级别上均衡(因为GCE/AWS和其他外部LB实现不具备指定每个节点权重的能力,它们在所有目标节点之间均衡,而不考虑每个节点上的POD数量)。

 类似资料:
  • 我知道,当我们想用一个负载平衡器/公共IP公开多个服务/路由时,可以使用入口。 现在我想公开我的Nginx服务器。我有两个选择 设置瞧,我得到了公共IP 使用Nginx入口控制器 现在我可以用选项1完成我的工作了,我什么时候或者为什么要选择选项2?使用带有入口的nginx而不使用入口有什么好处?

  • 负载均衡器的作用是将流量转发到主机。在这方面,ingress与负载均衡器有何不同?另外,与Amazon ELB和ALB相比,kubernetes内部的负载均衡器是什么概念?

  • 我不确定负载平衡如何与入口一起工作<如果我理解正确,实际情况是这样的: 我看不到负载平衡是如何执行的<我画的上述方案有什么错<你能帮我纠正一下吗? 注意: -以下答案告诉我入口控制器本身属于“loadbalancer”类型:入口服务类型 -我使用kind ClusterIP,因为我不想将loadbalancer暴露给外部世界。以下文章不支持此声明,其中负载平衡器将由服务提供: https://me

  • clientui使用来自3个微服务的数据服务网页。 我成功地设置了ribbon,以便在“微服务生产”的两个实例之间实现负载平衡。当我在ClientUI的application.properties中有一行时,它就可以工作了。 现在我想让它工作,而不必硬编码微服务URL。 我尝试在application.properties中添加fetchRegistry行,并在(clientui)pom.xml中

  • 我正在Azure上设置Kubernetes集群(使用AKS)来托管Elasticsearch、Kibana、自定义api、UI、nginx等。 由于我不希望每个服务都有单独的公共IP,因此我需要一种方法来设置一个公共负载平衡器/入口,然后只需在其中添加端口号并设置路由。 我尝试使用stackoverflow问题中提到的方法-如何在kubernetes中使用负载平衡器服务公开多个端口,但没有成功。

  • 问题内容: 我有一个在AWS EC2上运行的3个ElasticSearch节点集群。这些节点是使用OpsWorks / Chef设置的。我的目的是将该群集设计为非常有弹性和弹性(需要时,节点可以进出)。 从我阅读的有关ElasticSearch的所有内容来看,似乎没有人建议将负载均衡器放在集群的前面。相反,似乎建议您执行以下两项操作之一: 将您的客户端指向一个节点的URL / IP,让ES为您完成