我刚开始学习 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 服务,因此我在互联网上找不到太多信息。