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

Openshift 路由不是来自服务 Pod 的负载平衡

周承天
2023-03-14

我之前在OpenShift Origin 3.9和Online上尝试过。我在OpenShift上部署了一个简单的Hello world php应用程序。它有一个服务和一个路由。

当我调用路由时,我得到了Hello world和Pod IP的预期输出。让我们称这个pod ip为1.1.1.1

现在我部署了相同的应用程序,在相同的服务下使用相同的标签进行小文本更改。让我们将此pod ip称为2.2.2.2

我可以看到两个pod在一个服务中运行。现在,当我调用路由时,它总是显示Podip1.1.1.1我的路由从未到达第二个pod。

我的理解是路由将调用服务,服务将在可用的pod之间进行负载平衡。

但这并没有发生。感谢任何帮助。

共有3个答案

桂鑫鹏
2023-03-14

服务在pod之间没有负载平衡,这是完全随机的。RedHat支持人员已向我们证实了这一点。更重要的是,上面的答案只对curl的不同调用进行测试。

如果您对同一个curl进行后续调用,您将看到正在重用连接。只需尝试:

curl http://172.30.177.72:8080/index.html http://172.30.177.72:8080/index.html

而不是做一个交互,你会看到保活将重用连接,你每次都在同一个pod上结束

亢琦
2023-03-14

对于那些来这里寻求解决方案的人;大因·朴和威尔·戈登的回答都是正确的。

这里有一个简单的注意事项:

>

  • 如果您在外部调用 Pod,它会从路由器到服务再到 Pod。如果路由器上的注释未设置为 true haproxy.router.openshift.io/disable_cookies 则服务始终转发到同一 Pod。

    此外,在禁用上面带有注释的粘性路由后,您可以选择负载平衡算法,其中包含:haproxy.router.openshift.io/balance作为键,[Source, roundrobin, leastconn]作为值

    如果您从另一个pod在内部调用您的pod。它从服务到Pod。服务使用默认配置很好地执行循环负载平衡。

    因此,您应该:

    • 如果您希望路由器公开您的服务,请将上述注释添加到您的路由器。
    • 如果您希望您的服务仅在内部访问,则不执行任何操作

    (在OpenShift 4.2.28上测试)

  • 卫君博
    2023-03-14

    HAProxy路由器的默认行为是使用cookie来确保“粘性”路由。这使得会话保持在同一个pod中。https://docs . open shift . com/container-platform/3.11/architecture/networking/routes . html

    如果将路由上的 haproxy.router.openshift.io/disable_cookies 注释设置为 true,则应禁用此行为。

     类似资料:
    • 过去,我在Ubuntu上为使用了以下配置文件。它做以下工作: SSL终止 负载均衡器 插入自定义标头 记录调用 我想用部署为OpenShift集群中的pod的复制相同的内容。我可以在OpenShift集群的目录中看到。当我尝试启动一个时,它显示了一个GitHub存储库的字段,其中包含一个示例存储库--https://GitHub.com/sclorg/nginx-ex.git

    • 是否有一种方法可以在微服务的两个pod之间进行主动和被动负载平衡。假设我有两个运行微服务的实例(pod),它是使用K8s服务对象公开的。是否有一种方法来配置负载平衡,使一个pod始终获得请求,当该pod停机时,另一个po将开始接收请求? 我在该服务的顶部还有一个ingress对象。

    • 试图自学如何使用库伯内特斯,但有一些问题。 我的下一步是尝试使用LoadBalancer类型的服务来访问nginx。 我建立了一个新的集群并部署了nginx映像。 然后,我为LoadBalancer设置服务 设置完成后,我尝试使用LoadBalancer入口(我在描述LoadBalancer服务时发现)访问nginx。我收到一个此页面无法工作的错误。 不太确定我哪里出错了。 kubectl获得sv

    • 我是微服务的新手。(学习阶段)。我有一个问题。我们在云中部署微服务。(例如 AWS)。云已经提供了负载平衡和日志。我们还在Spring Boot中实现了负载平衡(功能区)和日志(Rabbit MQ和Zipkin)。这两种实现有什么区别?我们两者都需要吗?有些人可以回答这些问题吗? 提前感谢。

    • 我在Tomcat Server上有JAVA REST API Web Server,它在AWS EC2实例中的端口8080上运行。 还有一个传统负载均衡器来管理此实例的所有流量。因此,在此之前,ELB在HTTP上,有时,它是从HTTPS(443:ELB端口)路由到ELB侦听器上的HTTP(8080:实例端口)。 我在HTTPS(443)的ELB安全组中添加了入站规则。 弹性负载均衡器图片 弹性负载

    • 我们团队决定尝试使用OpenShift Origin server部署服务。我们有一个单独的虚拟机,安装了OpenShift原始服务器,运行良好。我能够部署我们的本地docker映像,这些服务也运行良好——pod已启动并运行,获得了自己的IP,我可以从虚拟机访问服务endpoint。 问题是我无法让它工作,所以服务暴露在机器之外。我读到了路由器,它被认为是公开服务的正确方式,但它只是不起作用,现在