首页 文章

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

提问于
浏览
1

我还有一个关于Kubernetes NodePort服务的问题 .

NodePort:在静态端口(NodePort)上将服务暴露在 each 节点的IP上 . 将自动创建NodePort服务将路由到的ClusterIP服务 . 您可以通过请求以下方式从群集外部联系NodePort服务: .

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

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

我做了两种测试:

Test1:

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

Test2:

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

所以我的问题是:

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

非常感谢! :)

1 回答

  • 1

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

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

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

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

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

相关问题