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

库伯内特斯NodePort类型服务如何将负载平衡到pod

笪健
2023-03-14

我仍然对Kubernetes节点端口服务有疑问。

NodePort:在静态端口(NodePort)上公开每个节点IP上的服务。将自动创建节点端口服务将路由到的ClusterIP服务。您可以从集群外部通过请求来联系NodePort服务:。

如果我有两个节点:nodeA和nodeB,并且如果我只在nodeA上部署应用程序,然后创建NodePort服务,那么我可以同时使用nodeA和nodeB IP访问此服务吗?

我做了一些测试,结果是没有。。。。

我做了两种测试:

测试1:

部署了一个包含两个吊舱的部署,一个在NodeA上,另一个在NodeB上。然后创建一个NodePort服务来访问它。我可以使用NodeA和NodeB IP访问该服务。然后我删除NodeA上的pod,然后重试。我发现我无法使用NodeA ip访问该服务,但可以使用NodeB ip访问。pod在NodeA上启动后,我可以使用NodeA ip访问

测试2:

我部署了一个只有一个吊舱的部署,它位于NodeA上。然后创建一个NodePort服务来访问它。我只能使用NodeA ip访问服务,但无法使用NodeB ip访问服务。

所以我的问题是:

对于NodePort类型,只能使用pod/pod位于同一节点上?如果我使用NodeA ip,服务将不会负载平衡对NodeB上pod的请求?

非常感谢!:)

共有1个答案

蒙勇
2023-03-14

如果我有两个节点:nodeA和nodeB,并且如果我只在nodeA上部署应用程序,然后创建NodePort服务,那么我可以同时使用nodeA和nodeB IP访问此服务吗?

我做了一些html" target="_blank">测试,结果是没有。。。。

在这种情况下,听起来很像三件事之一没有发生:您没有在所有节点上运行库贝-代理,或者节点以非常严格的方式相互隔离,或者您没有使用软件定义的网络(例如法兰绒、印花布等)。

据我所知,该节点端口行为是使用应用于所有机器的iptables实现的,这会导致在机器A的端口X上接收的流量有效地NAT到实际POD正在运行的机器之一,返回到机器A,返回到请求者。kube proxy的工作是安装初始的iptables规则,然后在POD从集群进出时使其保持最新。通过在运行kube代理的节点上运行iptables-L-n-t nat,可以观察到正确的行为,并观察为各种kubernetes服务命名的规则。它们甚至在iptables规则中包含注释,我觉得这很好

我认为防火墙的案子不言自明

实际上,我从来没有在没有软件定义网络的情况下运行过kubernetes,因此我不适合提供故障排除步骤(除了:安装flannel或calico并为它们的出色而高兴)。如果这确实是您的情况,也许其他人可以权衡一下

 类似资料:
  • 我在两个节点上运行 Kubernetes,并在两个节点上部署一个应用程序(两个 pod,每个节点一个)。 这是一个Spring Boot应用程序。它使用OpenFygnd来实现服务可发现性。在应用程序中,我定义了一个一来控制程序,它有几个API和一个从API内部调用的@Autow的@Service。 每当我对其中一个API进行请求时,Kubernetes都会使用某种负载平衡来将流量路由到其中一个p

  • 我有一个Kubernetes群集,它有一个主节点和两个其他节点: 它们中的每一个都在VirtualBox Ubuntu VM上运行,可从来宾计算机访问: 我部署了一个带有两个副本的nginx服务器,每个kubernetes-node-x有一个pod: 接下来,我将nginx部署的服务公开为节点端口,以便从集群外部访问它: 我可以直接使用节点IP访问节点中的每个pod 但是,我认为K8s提供了某种外

  • 我最近开始研究Kubernetes集群。在我们的集群中,对给定Kubernetes服务的网络调用流如下所示: 外部非K8S负载均衡器- 对于给定的服务,有两个副本。通过查看副本中容器的日志,我可以看到调用被路由到不同的pod。据我所知,我们还没有为Kubernetes中的服务明确设置任何负载平衡策略。 我有几个问题: 1)K8S是否有默认的负载平衡策略?我读过库贝-proxy和随机路由。它看起来绝

  • 什么是负载均衡器? 负载平衡改进了跨多个计算资源(如计算机、计算机群集、网络链路、中央处理器或磁盘驱动器)的工作负载分布 NodePort不是负载平衡器。(我知道一旦流量在集群内,kube proxy就会在pod之间进行负载平衡)我的意思是,最终用户点击http://NODEIP:30111(例如)访问应用程序的URL。即使POD之间的流量是负载平衡的,用户仍然会点击一个节点,即“节点”,它是K8

  • 我有一个包含 3 个节点的 Kubernetes 集群。 示例部署 我没有入口,但我有外部负载均衡器,可以轮询 80.11.12.10、80.11.12.11、 的流量。 所以我这样设置我的服务。 问题在于,由于现有的 kubernetes 服务负载均衡器,流量会获得两次负载均衡。除此之外,这是不必要的,它会破坏连接持久性。有没有办法强制 Kubernetes 在每个节点的本地机器 Pod 上转发

  • 我们在库伯内特斯运行了Spring Boot服务,并且正在使用Spring Cloud库伯内特斯负载均衡器功能和RestTemboard来调用其他Spring Boot服务。我们这样做的主要原因之一是历史上的——因为之前我们使用Eureka在EC2中运行我们的服务进行服务发现,迁移后我们保持了Spring发现客户端/客户端负载平衡(更新依赖项等,以便它与Spring Cloud库伯内特斯项目一起工