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

问题描述:

我对Kubernetes NodePort服务仍有疑问。Kubernetes NodePort类型服务如何将负载平衡到pod

NodePort:在上公开服务节点的IP位于静态端口(NodePort)。将自动创建NodeIP服务将路由到的ClusterIP服务。您可以通过以下方式联系集群外部的NodePort服务:。

如果我有两个Node:nodeA和nodeB,并且如果我只在nodeA上部署应用程序,则创建一个NodePort服务,那么我可以同时使用nodeA和nodeB两个ip来访问此服务?

我有一些测试,结果是没有....

我做了两类型的测试:

的Test1:

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

Test2的访问:

我部署一个部署只有一个吊舱,它是在NodeA。然后创建一个NodePort服务来访问它。 我只能使用NodeA ip访问服务,但不能使用NodeB ip。

所以我的问题是:

对于NodePort类型,它只能用于该吊舱/豆荚都在同一节点?如果我使用NodeA ip,服务将不会负载平衡请求到NodeB上的pod?

非常感谢! :)

+0

当你测试节点A和节点B是你从一些外部“工作站”节点或节点他们自己吗? –

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

我有一些测试,结果是没有....

在这种情况下,它听起来很像三种情况之一是不会发生:你没有在所有节点上运行kube-proxy ,或者节点被非常严格地限制在另一个防火墙中,或者您没有使用软件定义的网络(例如绒布,印花布等)。

据我所知,NodePort行为是使用iptables应用于所有机器实现的,导致机器A的端口X上接收到的流量被有效NAT转换到其中一台机器上,实际的豆荚正在运行,返回到机器A,回到请求者。 kube-proxy的工作是安装初始的iptables规则,然后随着Pods进出集群,随后保持最新状态。通过在运行kube-proxy的节点上运行iptables -L -n -t nat,可以观察到正确的行为,并观察为各种kubernetes服务命名的规则。他们甚至有益包括在iptables规则的意见,我认为是很好的

的防火墙的情况下,我认为是不言而喻的

我其实从来没有一个软件定义的网络运行kubernetes,所以我在我不是提供故障排除步骤的好地方(除了:安装法兰绒或印花布,并在他们的迷人中欢欣鼓舞)。也许其他人将能够权衡,如果这实际上是你的情况

+0

谢谢马特。是的,我发现一些NAT配置不正确。我需要继续检查。谢谢! :) – JordanZT