docker - 关于Kubernetes集群中的负载平衡的查询

标签 docker kubernetes load-balancing

我刚开始使用Kubernetes,但我对kubernetes的负载平衡方法有一些疑问,无法在kubernetes文档中找到明确的答案。

首先,假设我们创建了一个部署“iis”,并将其缩放为3个副本。现在,在不创建服务的情况下,我们如何访问这些端点?

现在,我们使用ClusterIP为此部署创建了一个服务(具有3个副本),因此该服务仅在群集中公开。现在,服务将如何负载均衡群集中进入该服务的流量?它是使用轮询还是端点随机选择?根据kubernetes的文档,有2个服务代理,用户空间或iptables,我怎么知道我的服务正在使用哪一个?

接下来,我们使用LoadBalancer公开公开了该服务。它在云提供商上创建一个负载均衡器并使用它。我的问题是,这个外部负载均衡器如何平衡到Pod的流量?它会平衡与服务的流量,服务会将其重定向到端点,还是将流量直接平衡到端点(荚)?此外,在这种LoadBalancer情况下,如何平衡到该服务的内部流量(来自群集内部)?

请尝试给出详细的答案。

最佳答案

First, Lets say we have created a deployment "iis", and scaled it to 3 replicas. Now without creating a service how can we access these endpoints?



除非您有一个带外解决方案(例如注册POD ips的标准负载平衡器),否则您将无法..那里的服务可简化Pod之间的连接。使用它们!

Now, how will the service loadbalances the traffic coming to this service inside the cluster?



为了理解这一点,值得了解服务在Kubernetes中的工作方式。

服务由kube-proxy处理。 Kube-proxy(现在默认情况下)创建的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规则,并搜索“概率”,您将看到类似以下内容:
-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 comment中可以看到对概率加权的更详尽的解释。

According to the documentation of kubernetes, there are 2 service proxies, userspace or iptables, How can I know which one my service is using?



同样,这由kube-proxy决定,并由kube-proxy启动时决定。这是kube-proxy进程上的命令行标志。默认情况下,它将使用iptables,强烈建议您坚持使用iptables,除非您知道自己在做什么。

My question is that how this external loadbalancer balances the traffic to the pods?



这完全取决于您的云提供商和您选择的LoadBalance。
LoadBalancer服务类型是什么,它将服务公开到NodePort上,然后将负载均衡器上的外部端口映射回该端口。
所有LoadBalancer类型所做的工作都不同,是在外部提供商的负载平衡器(例如ELB)中而不是在内部clusterIP服务中注册服务该服务的节点IP。我建议阅读您的云提供商的文档来确定这一点。

Also, in this LoadBalancer case, how the internal traffic (coming from inside the cluster) to this service is load balanced?



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

关于docker - 关于Kubernetes集群中的负载平衡的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42759034/

相关文章:

docker - 我可以在用户界面中看到它,但无法在Alpine上安装软件包

powershell - Windows - Docker CMD 不执行

kubernetes - kubectl 端口转发失败

Kubernetes 仪表板未打开

linux - SSH 隧道到 docker 容器

docker exec VS docker --rm -d --rm --volumes-from

amazon-web-services - 使用 AWS ACM 证书配置 Gloo 虚拟服务 SSL

mysql - 异步写入多个 MySQL 数据库

Azure函数: How to load balance between multiple Function apps in the same region

load-balancing - 负载均衡器是否需要负载均衡器?