有人可以解释为什么我必须使用带有裸机 kubernetes 集群的外部(MetalLB、HAProxy 等)负载均衡器吗?

Can somebody explain whay I have to use external (MetalLB, HAProxy etc) Load Balancer with Bare-metal kubernetes cluster?

例如,我有一个带有 3 个节点的裸机集群,其中一些实例暴露了端口 105。为了在外部 IP 地址上暴露它,我可以定义一个类型为“externalIPs”的 NodePort 服务,它似乎运作良好。在文档中它说要使用负载平衡器,但我不明白为什么我必须使用它并且我担心会犯一些错误。

Can somebody explain whay I have to use external (MetalLB, HAProxy etc) Load Balancer with Bare-metal kubernetes cluster?

您不一定要使用它,您可以选择使用 NodePort 还是 LoadBalancer。


先说说NodePort和LoadBalancer的区别

NodePort 是将外部流量直接获取到您的服务的最原始方式。顾名思义,它在所有节点(VM)上打开一个特定端口,发送到该端口的任何流量都将转发到该服务。

LoadBalancer 服务是向 Internet 公开服务的标准方式。它为您提供一个 IP 地址,将所有流量转发到您的服务。

您可以在 kubernetes documentation.

中找到更多相关信息

关于您在评论中提出的问题,But NodePort with "externalIPs" option is doing exactly the same. I see only one tiny difference is that the IP should be owned by one of the cluster machin. So where is the profit of using a loadBalancer?让我更准确地回答一下。

ExternalIP有advantages & disadvantages个:

The advantages of using ExternalIP is:

You have full control of the IP that you use. You can use IP that belongs to your ASN >instead of a cloud provider’s ASN.

The disadvantages of using ExternalIP is:

The simple setup that we will go thru right now is NOT highly available. That means if the node dies, the service is no longer reachable and you’ll need to manually remediate the issue.

There is some manual work that needs to be done to manage the IPs. The IPs are not dynamically provisioned for you thus it requires manual human intervention


总结两者的优缺点,我们可以得出结论,ExternalIP 不是为生产环境制作的,它的可用性不高,如果节点死掉,服务将不再可用,您将不得不手动修复它。

使用 LoadBalancer,如果节点死亡,服务将在另一个节点上自动重新创建。所以它是动态配置的,不需要像使用 ExternalIP 那样手动配置它。