有关Kubernetes群集中的LoadBalancing的查询

我刚刚开始使用Kubernetes,并且对kubernetes负载均衡方法有一些疑问,无法在kubernetes文档中find明确的答案。

首先,让我们说我们已经创build了一个部署“iis”,并把它扩展到3个副本。 现在,如果不创build服务,我们如何访问这些端点?

现在,我们已经使用ClusterIP为这个部署创build了一个服务(有3个副本),所以它只能在集群中公开。 现在,该服务如何负载均衡在集群内传输到该服务的stream量? 它是使用循环法还是随机select端点? 根据kubernetes的文档,有2个服务代理,用户空间或iptables,我怎么知道我的服务使用哪一个?

接下来,我们使用LoadBalancer公开了这个服务。 它在云提供商上创build负载均衡器并使用它。 我的问题是,这个外部负载均衡如何平衡stream量到豆荚? 它是否将stream量平衡到服务和服务将其redirect到端点,还是将stream量直接平衡到端点(pod)? 此外,在这个LoadBalancer的情况下,内部stream量(来自集群内部)如何负载平衡?

请尝试给出详细的答案。

首先,让我们说我们已经创build了一个部署“iis”,并把它扩展到3个副本。 现在,如果不创build服务,我们如何访问这些端点?

除非你有这样的带外解决scheme(比如你注册POD IPS的标准负载平衡器) ,否则你不能。 。 服务是为了缓解豆荚之间的连接。 使用它们!

现在,该服务如何负载均衡在集群内传输到该服务的stream量?

为了理解这一点,值得了解Kubernetes的服务如何工作。

服务由kube-proxy处理。 Kube-proxy(现在默认)创build的iptables规则看起来有点像这样:

-A KUBE-SERVICES ! -s 192.168.0.0/16 -d <svc-ip>/32 -p tcp -m comment --comment "namespace/service-name: cluster IP" -m tcp --dport svc-port -j KUBE-MARK-MASQ 

会发生什么是,iptables看所有的数据包的目的地为svc-ip,然后指示他们的pod IP正在产生的服务

如果你进一步看看iptables的规则,并search“概率” – 你会看到这样的东西:

 -A KUBE-SVC-AGR3D4D4FQNH4O33 -m comment --comment "default/redis-slave:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-25QOXGEMBWAVOAG5 -A KUBE-SVC-GYQQTB6TY565JPRW -m comment --comment "default/frontend:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-JZXZFA7HRDMGR3BA -A KUBE-SVC-GYQQTB6TY565JPRW -m comment --comment "default/frontend:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-ZW5YSZGA33MN3O6G 

所以答案是,这是随机的一些概率加权。 在这个github的评论中可以看到更加全面的解释概率是如何加权的

根据kubernetes的文档,有2个服务代理,用户空间或iptables,我怎么知道我的服务使用哪一个?

再次,这是由kube-proxy确定的,并且在kube-proxy启动时决定。 这是kube-proxy进程上的命令行标志。 默认情况下,它会使用iptables,强烈build议你坚持使用,除非你知道你在做什么。

我的问题是,这个外部负载均衡如何平衡stream量到豆荚?

这完全取决于您的云提供商和您select的LoadBalance。 LoadBalancer服务types在NodePort上公开服务,然后将负载均衡器上的外部端口映射回该服务。 所有LoadBalancertypes的做法都不同,在外部提供者的负载均衡器中注册服务于该服务的节点IP,例如:ELB,而不是在内部集群IP服务中。 我会build议阅读您的云提供商的文档来确定这一点。

此外,在这个LoadBalancer的情况下,内部stream量(来自集群内部)如何负载平衡?

再次请参阅您的云提供商的文档。