在Kubernetes中,何时选择“LoadBalancer”而不是“NodePort”服务类型(反之亦然),以便对外公开服务?

在Kubernetes中,何时选择“LoadBalancer”而不是“NodePort”服务类型(反之亦然),以便对外公开服务?,kubernetes,networking,containers,Kubernetes,Networking,Containers,从我看到的文档中 NodePort:在NodePort的静态端口公开每个节点IP上的服务。将自动创建节点端口服务将路由到的ClusterIP服务。您可以通过请求从集群外部联系NodePort服务: LoadBalancer:使用云提供商的负载平衡器对外公开服务。自动创建外部负载平衡器将路由到的NodePort和ClusterIP服务 但它没有提到什么时候该选择一个。我能想到的Nodeport的一个缺点是防火墙规则中的安全开放端口,我想知道在选择一个而不是另一个时是否还有其他考虑因素。对于您所写的

从我看到的文档中

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

LoadBalancer:使用云提供商的负载平衡器对外公开服务。自动创建外部负载平衡器将路由到的NodePort和ClusterIP服务


但它没有提到什么时候该选择一个。我能想到的Nodeport的一个缺点是防火墙规则中的安全开放端口,我想知道在选择一个而不是另一个时是否还有其他考虑因素。

对于您所写的缺点,它们是相同的潜在风险,因为type:LoadBalancer是type:NodePort,它只是额外与集群的配置云提供程序一起工作,以提供指向到分配的节点端口,并保持节点成员身份与云负载平衡器的目标主机同步


因此,要回答您的问题:当您希望云提供商为您提供云资源并管理其生命周期时,请使用type:LoadBalancer;当您有其他方法将外部流量获取到节点上的分配端口时,请使用type:NodePort。

它们与您所写的缺点具有相同的潜在风险,因为type:LoadBalancer是type:NodePort,它只是与集群的已配置云提供程序一起提供云负载指向已分配节点端口并保持节点成员身份与云负载平衡器的目标主机同步的平衡器

因此,要回答您的问题:当您希望云提供商为您提供云资源并管理其生命周期时,请使用type:LoadBalancer;当您有其他方式将外部通信量获取到节点上的分配端口时,请使用类型:NodePort。

NodePort服务在所有地址上公开您的服务,即,您可以通过任何节点IP和NodePort组合访问您的服务。这可以由kubernetes在本机实现,因为kubernetes在所有节点上运行代理kube代理,以创建所需的配置,从而将在nodeIP:nodePort上接收的流量转发到备用POD

直接使用Nodeport服务的几个缺点是:

节点必须暴露在外部:除非节点本身暴露在外部,否则无法接收地址上的通信量

无节点级负载平衡:客户端可以在连接到服务,但节点之间没有流量负载平衡,除非客户端自己这样做。如果节点发生故障怎么办?谁会通知客户端不要使用该节点

非标准端口号:由于所有节点上的端口号保持不变,因此所有节点上的端口号都必须是空闲端口。Kubernetes通过在节点端口范围内选择一个空闲端口(默认值为30000-32767)来确保这一点。但我可能希望在更标准的端口(如80443等)上公开该服务

如果我们有一个实体,该实体在我们喜欢的端口上的外部可访问IP上接收流量,然后将流量转发到位于的NodePort服务,NodePort服务在所有地址上公开您的服务,即您可以通过任意节点IP和NodePort组合来访问您的服务,那么我们可以解决上述所有问题。这可以由kubernetes在本机实现,因为kubernetes在所有节点上运行代理kube代理,以创建所需的配置,从而将在nodeIP:nodePort上接收的流量转发到备用POD

直接使用Nodeport服务的几个缺点是:

节点必须暴露在外部:除非节点本身暴露在外部,否则无法接收地址上的通信量

无节点级负载平衡:客户端可以在连接到服务,但节点之间没有流量负载平衡,除非客户端自己这样做。如果节点发生故障怎么办?谁会通知客户端不要使用该节点

非标准端口号:由于所有节点上的端口号保持不变,因此所有节点上的端口号都必须是空闲端口。Kubernetes通过在节点端口范围内选择一个空闲端口(默认值为30000-32767)来确保这一点。但我可能希望在更标准的端口(如80443等)上公开该服务

如果我们有一个实体在我们喜欢的端口上的外部可访问的IP上接收流量,然后将流量转发到