我刚刚开始使用Kubernetes,我对kubernetes负载均衡方法有一些疑问,无法在kubernetes文档中找到明确的答案 .
首先,让我们说我们创建了一个部署“iis”,并将其扩展为3个副本 . 现在没有创建服务我们如何访问这些 endpoints ?
现在,我们使用ClusterIP为此部署创建了一个服务(具有3个副本),因此它仅在集群中公开 . 现在,服务如何对集群内此服务的流量进行负载均衡?它是使用循环法还是随机选择 endpoints ?根据kubernetes的文档,有2个服务代理,用户空间或iptables,我怎么知道我的服务使用的是哪一个?
接下来,我们使用LoadBalancer公开了该服务 . 它在 Cloud 提供商上创建负载均衡器并使用它 . 我的问题是这个外部负载均衡器如何 balancer 到pod的流量?它是否 balancer 了服务和服务的流量,将其重定向到 endpoints ,还是将流量直接 balancer 到 endpoints (pod)?此外,在此LoadBalancer情况下,内部流量(来自群集内部)到此服务的负载是如何进行负载 balancer 的?
请尽量给出详细的答案 .
1 回答
除非你有一个带外解决方案(就像你注册POD ips的标准负载均衡器),你不能..服务可以缓解pod之间的连接 . 使用它们!
为了理解这一点,值得了解服务在Kubernetes中的运作方式 .
服务由kube-proxy处理 . Kube-proxy(现在默认情况下)创建iptables规则,看起来有点像这样:
会发生什么,iptables查看发往svc-ip的所有数据包,然后将它们定向到正在生成服务的pod IP
如果你仔细看看iptables规则,并搜索“概率” - 你会看到这样的东西:
所以答案是,它是随机的一些概率加权 . 关于概率如何加权的更全面的解释可以在这里看到github comment
同样,这由kube-proxy决定,并在kube-proxy启动时决定 . 它是kube-proxy进程上的命令行标志 . 默认情况下,它会使用iptables,强烈建议您坚持使用iptables,除非您知道自己在做什么 .
这完全取决于您的 Cloud 提供商和您选择的LoadBalance . LoadBalancer服务类型在NodePort上公开服务然后将负载均衡器上的外部端口映射回来 . 所有LoadBalancer类型的不同之处在于注册在外部提供程序的负载均衡器中为服务提供服务的节点IP,例如:ELB,而不是内部clusterIP服务 . 我建议您阅读 Cloud 提供商的文档以确定这一点 .
再次,请参阅 Cloud 提供商的文档 .