Kubernetes NodePort类型服务如何平衡pod负载



我仍然有一个关于Kubernetes NodePort服务的问题。

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

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

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

我做了两种测试:

测试1:

我部署了一个带有两个pod的部署,一个在NodeA上,另一个在Node B上。然后创建NodePort服务来访问它。我可以通过使用NodeA和NodeB ip来访问该服务。然后我删除NodeA上的pod,然后再试一次。我发现我不能使用NodeA ip访问服务,但可以使用NodeB ip访问。在NodeA上启动pod后,我可以使用NodeA ip 访问

测试2:

我部署了一个只有一个pod的部署,它在NodeA上。然后创建NodePort服务来访问它。我只能使用NodeA ip访问服务,而不能使用NodeB ip。

所以我的问题是:

对于NodePort类型,只能在pod位于同一Node上时使用?如果我使用NodeA ip,服务不会对NodeB上的pod请求进行负载平衡吗?

非常感谢!:)

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

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

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

据我所知,NodePort行为是使用应用于所有机器的iptables来实现的,导致在机器A的端口X上接收的流量被有效地NAT到实际Pod正在运行的机器之一,返回到机器A,返回到请求者。kube-proxy的工作是安装用于执行此操作的初始iptables规则,然后在Pod从集群来来去去时使它们保持最新。可以通过在运行kube-proxy的节点上运行iptables -L -n -t nat来观察正确的行为,并观察为各种kubernetes服务命名的规则。他们甚至在iptables规则中包含了注释,这很有帮助,我认为这是一个不错的

我认为防火案例本身就说明了

事实上,我从来没有在没有软件定义网络的情况下运行过kubernetes,所以我不适合提供故障排除步骤(除了:安装法兰绒或印花布,并为它们的出色而高兴)。也许其他人也能参与进来,如果这真的是你的情况

最新更新