非云环境下kubernetes的负载平衡

非云环境下kubernetes的负载平衡,kubernetes,cloud,load-balancing,haproxy,Kubernetes,Cloud,Load Balancing,Haproxy,我发现kubernetes可以使用ClusterIP和NodePort和负载平衡。对于负载平衡,它需要云。 如果我没有云提供商如何在节点之间进行负载平衡 我知道HAProxy可以实现负载平衡 但我认为这个云负载均衡器不同于简单的HAProxy 我想知道HAProxy和IngressController之间有什么不同,比如HAProxy和Nginx 我想要一个负载均衡器来负载平衡我的工作节点之间的流量。 POD之间的负载平衡服务。我认为入口控制器是第7层负载均衡器。 我希望在节点之间实现负载平衡我

我发现kubernetes可以使用
ClusterIP
NodePort
负载平衡
。对于负载平衡,它需要云。 如果我没有云提供商如何在节点之间进行负载平衡 我知道HAProxy可以实现负载平衡 但我认为这个云负载均衡器不同于简单的HAProxy

我想知道HAProxy和IngressController之间有什么不同,比如HAProxy和Nginx

我想要一个负载均衡器来负载平衡我的工作节点之间的流量。 POD之间的负载平衡服务。我认为入口控制器是第7层负载均衡器。
我希望在节点之间实现负载平衡

我在这里面临同样的问题。K8s是为云计算而设计的,因此内部部署会给设置带来一些麻烦。下面的文章对此进行了详细的解释


总之,解决方案是使用节点端口或外部名称服务。我将在这里尝试的方法是使用metalLB(,)

在kubernetes中应该不需要平衡节点之间的负载,因为对于kubernetes来说,后端是一个pod,而不是一个节点

<> P>所以,你应该考虑入口控制器,而不是负载均衡器,因为KubNeNETS核心控制器没有一些控制器,而IC就是其中之一,而CuultSIP类型的服务已经完成了基本的负载平衡。 Nginx IC很棒。还有Istio(不同的概念)。Traefik也可能是一种选择。检查不同的IC选项,明确入口控制器的概念

我看到kubernetes可以使用ClusterIP、NodePort和负载平衡。对于负载平衡,它需要云。如果我没有云提供商,我如何在节点之间负载平衡流量

您可能知道,最简单的方法是将
服务
设置为type,这表示在每个节点上侦听默认范围
30000-32767
内的随机端口。在引擎盖下,此随机端口将映射(端口转发)到
服务
端口

现在,您可以将流量发送到
30001
的随机端口,发送到任何节点,您将在POD之间实现内部负载平衡。如果您现在在与节点相同的网络中或在可以到达节点的网络中启动虚拟机,并在
节点{a,b,c}之间设置负载平衡:30001

您可以,尽管由于许多好的原因不推荐使用,但基本上只需将流量发送到多节点群集中的一个节点(
node-a:30001
),流量在内部仍会保持负载平衡。这是可能的,因为
kube proxy
的所有实例都知道所有pod(或
服务
上下文中的
端点
)在任何给定时间的位置

请注意,
kube代理
iptables
(可能会有所不同!)是在所有情况下实现
服务
对象的组件,但类型为
负载平衡器
时除外
LoadBalancer
请求将被发送到内置或外部云控制器管理器

存在
ingres
对象是为了在一个或多个
服务
前面添加L7逻辑,但是正如您所看到的,
ingres
如果没有实现它的入口控制器,那么它就毫无价值。HAProxy和Nginx Ingress控制器或多或少会为您做同样的事情,但短期内无法解决您的问题。是的,您将有负载平衡,但不是您可能认为的方式

如果您没有任何形式的(私有/公共)云与k8s集成支持您的k8s群集,Nginx和HAProxy Ingress控制器将只是您群集中运行的另一个
服务。你当然可以做一些聪明的事情,比如代理、URL路由、主机名匹配等等

如果您处于非云提供商环境(例如仅裸机环境),需要回答的问题之一是:如何在
负载平衡器类型的
服务
EXTERNAL-IP
字段中获取IP地址?注意,我假设的是
kubectl get service
命令的输出。一个很好的答案是,正如这里的评论中已经指出的那样:

MetalLB将使您能够自动配置
负载平衡器类型的
服务
的外部IP。但是您也可以手动配置
服务
对象的字段,并将其设置为在您的环境中有意义的IP地址。感谢@danielrubambura指出这一点

另请参阅第页的官方Nginx控制器文档,该文档可以帮助您了解在某些情况下如何以及为什么使用metallib

我留下Nginx和HAProxy控制器之间的比较,因为我认为这在本例中并不重要。最后,他们将通过
入口
对象为您提供根据需要配置的Nginx或HAProxy吊舱,例如,根据传入请求中的
主机
头路由到不同的
服务


希望这能把事情弄清楚一点

节点端口可以在节点及其吊舱之间实现负载平衡。为什么我应该使用metalLB?NodePort不平衡任何东西。那是集群。您应该更清楚地了解这些概念。为了启动入口服务,您需要一个负载平衡器,在云中,AWS为您提供了一个无摩擦的负载平衡器,您可以在本地使用metalLB。不是真的。云提供商设置负载平衡器将流量发送到节点。然后,它们依赖于集群负载平衡,如前所述。这是一个已知的问题,增加了额外的跃点。一些IC使用一个节点外部IP作为入口点。这一点非常清楚。我已经能够在非云环境中设置LoadBalancer类型的服务。创建一个有意义的服务