NodePort和LoadBalancer的区别是什么?

50

我刚开始学习 Kubernetes,对于 NodePort 和 LoadBalancer 类型的服务之间的区别感到困惑。

我理解的区别是,LoadBalancer 不支持 UDP,但除此之外,无论我们创建的服务是 NodePort 还是 Loadbalancer,都会得到一个服务 IP 和端口、一个 NodePort,以及一些 endpoints。

来自 Kubernetes 文档的描述如下:

NodePort:除了在集群内部拥有 IP 之外,在集群的每个节点上将服务暴露在一个端口上(在每个节点上相同的端口)。您可以在任何 NodeIP:NodePort 地址上联系该服务。

LoadBalancer:除了在集群内部拥有 IP 并将服务暴露在 NodePort 上之外,还要求云供应商提供一个负载均衡器,该负载均衡器将转发到每个节点上作为 NodeIP:NodePort 的服务。

因此,我将始终访问 NodeIP:NodePort 上的服务。我的理解是,每当我们访问 node:NodePort 时,kubeproxy 将拦截请求并将其转发到相应的 pod。

关于 LoadBalancer 提到的另一件事是,我们可以有一个外部 LB,它将在节点之间实现负载均衡。那么,什么阻止我们为创建为 nodeport 的服务放置 LB 呢?

我真的很困惑。大多数文档或教程只谈论 LoadBalancer 服务,因此我在互联网上找不到太多信息。

2个回答

21

您可以在节点前面放置一个外部负载均衡器,然后使用NodePort选项。

LoadBalancer选项仅用于向云提供商请求后台自动创建新软件负载平衡器实例。

我不知道目前有哪些云提供商支持此功能,但我已经看到它在Compute Engine和OpenStack上运行。


5
NodePort和LoadBalancer服务之间的区别。
NodePort Load balancer
通过创建一个NodePort服务,你告诉Kubernetes在所有节点上保留一个端口,并将传入的连接转发到该服务中的Pod。 Load balancer在集群中的每个节点上都不需要保留端口。
NodePort服务不仅可以通过服务的内部cluster IP访问,还可以通过任何节点的IP和保留的节点端口访问。 只能通过Load balancer的公共IP进行访问。
指定端口不是必须的。如果省略了端口号,Kubernetes会选择一个随机端口(默认范围为30000 - 32767)。 Load balancer将拥有其自己独特的、可公开访问的IP地址,并将重定向所有连接到您的服务。
如果你只将客户端指向第一个节点,那么当该节点故障时,你的客户端将无法访问该服务。 使用Load balancer在节点前,确保你将请求分布到所有健康的节点上,并且从未将请求发送到此时离线的节点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接