Kubernetes服务集群IP,如何在不同节点之间内部负载平衡

Xer*_*iel 18 kubernetes

我创建了一个部署,导致2个节点中存在4个pod.

然后,我通过服务公开这些pod,从而产生以下群集IP和pod端点:

Name:                     s-flask
......
IP:                       10.110.201.8
Port:                     <unset>  9080/TCP
TargetPort:               5000/TCP
NodePort:                 <unset>  30817/TCP
Endpoints:                
192.168.251.131:5000,192.168.251.132:5000,192.168.251.134:5000 + 1 more...
Run Code Online (Sandbox Code Playgroud)

如果通过群集IP在内部访问服务,请求将在两个节点和所有pod之间平衡,而不仅仅是单个节点上的pod(例如,通过nodePort访问).

我知道kubernetes使用IP表在单个节点上平衡整个豆荚请求,但我找不到解释如何kubernetes跨多个节点天平内部服务请求的任何文件(我们不使用负载平衡器或进入内部服务的负载平衡).

群集IP本身是虚拟的,我认为这种方法可行的唯一方法是,如果群集IP是循环映射到服务端点IP地址,客户端必须查找群集IP /服务并选择端点IP ?

mku*_*zyk 16

您需要的所有内容在本文档的第二段“虚拟IP和服务代理”中进行了说明:https : //kubernetes.io/docs/concepts/services-networking/service/#defining-a-service

简而言之:当前,取决于代理模式,对于ClusterIP,它只是循环/随机方式。它由kube-proxy完成,它在每个节点上运行,代理UDP和TCP并提供负载平衡。

最好将kubernetes视为一个整体,而不是特定的节点。抽象在这里发挥作用。

希望它能回答您的问题。

  • 看起来在 iptables 代理模式下,它只随机选择一个后端。 (3认同)