Kubernetes:NodePort和LoadBalancer之间的区别

时间:2015-12-23 20:22:33

标签: kubernetes

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

我理解的差异是LoadBalancer不支持UDP,但除此之外,无论何时我们创建服务nodeport或loadbalancer,我们都会获得服务IP和端口,NodePort和端点。

来自Kubernetes docs:

  

NodePort:在拥有集群内部IP的基础上,公开服务   在群集的每个节点上的端口上(每个节点上的相同端口)。   您可以在任何 NodeIP:NodePort 上联系该服务   地址。

     

LoadBalancer:,拥有集群内部IP和   在NodePort上公开服务,也要求云提供商负载   转换为服务的平衡器,以 NodeIP:NodePort 的形式公开   对于每个节点。

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

关于LoadBalancer的另一件事是我们可以有一个外部LB,它将在节点之间产生LB.是什么阻止我们为创建为nodeport的服务设置LB?

我真的很困惑。大多数文档或教程仅涉及LoadBalancer服务,因此我在互联网上找不到太多。

感谢有人能解开我的怀疑。

由于

2 个答案:

答案 0 :(得分:14)

没有什么可以阻止您在节点前放置外部负载均衡器并使用NodePort选项。

LoadBalancer选项仅用于在后台自动向云提供商请求新的软件LB实例。

我还不知道目前支持哪些云提供商,但我看到它已经适用于Compute Engine和OpenStack。

答案 1 :(得分:1)

<块引用>

节点端口和负载均衡器服务之间的区别。

<头>
Node Port Load balancer
通过创建 NodePort 服务,您是在说 Kubernetes 在其所有节点上保留一个端口,并将传入连接转发到作为服务一部分的 Pod。< /td> 在集群中的每个节点上都没有这样的带有Load balancer的端口预留。
NodePort 服务不仅可以通过服务内部的cluster IP访问,还可以通过任何节点的IP和保留的节点端口访问。 只能通过 Load balancer 公共 IP 访问
指定端口不是强制性的。如果省略,Kubernetes 会随机选择一个端口(默认范围 30000 - 32767)。 Load balancer 将拥有自己唯一的、可公开访问的 IP 地址,并将所有连接重定向到您的服务
如果你只将你的客户端指向第一个节点,当那个节点出现故障时,你的客户端将无法再访问该服务 在节点前面使用 Load balancer 以确保您将请求分散到所有健康节点,并且永远不会将它们发送到当时处于离线状态的节点。< /td>