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

时间:2017-10-12 03:18:35

标签: kubernetes

我仍然对Kubernetes NodePort服务有疑问。

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

从集群外部联系NodePort服务

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

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

我做了两种测试:

测试1:

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

进行访问

的Test2:

我部署了只有一个pod的部署,它位于NodeA上。然后创建一个NodePort服务来访问它。 我只能使用NodeA ip访问该服务,但不能通过NodeB ip访问该服务。

所以我的问题是:

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

非常感谢! :)

1 个答案:

答案 0 :(得分:1)

  

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

     

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

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

据我所知,NodePort行为是使用应用于所有机器的iptables实现的,导致机器A的端口X上收到的流量有效地NAT到其中一台机器上)实际的Pod正在运行,返回到机器A,返回给请求者。安装最初的kube-proxy规则是iptables的工作,然后随着Pod从集群进出而保持最新状态。通过在 运行iptables -L -n -t nat的节点上运行kube-proxy,可以观察到正确的行为,并观察为各种kubernetes服务命名的规则。他们甚至有助于在iptables规则中添加评论,我认为这很好

我认为防火墙案例不言而喻

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

相关问题