我仍然对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?
非常感谢! :)
答案 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,所以我不是一个提供故障排除步骤的好地方(除了:安装法兰绒或印花布,并为他们的超棒而欢欣鼓舞)。也许其他人可以权衡,如果这实际上是你的情况