Kubernetes服务集群IP,如何在不同节点之间内部平衡负载 [英] Kubernetes Service cluster IP, how is this internally load balanced across different nodes
问题描述
我创建了一个部署,该部署导致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...
如果通过群集IP在内部访问服务,则请求将在两个节点和所有Pod之间进行平衡,而不仅仅是单个节点上的Pod(例如,通过nodePort进行访问).
我知道kubernetes使用IP表在单个节点上的Pod之间平衡请求,但是我找不到任何文档来说明kubernetes如何在多个节点之间平衡内部服务请求(我们不使用负载平衡器或Ingress用于内部服务负载平衡).
群集IP本身是虚拟的,我认为这可行的唯一方法是,如果群集IP是循环映射到服务端点IP地址的,则客户端必须在其中查找群集IP/服务并选择端点IP?
您需要的所有内容在本文档的第二段虚拟IP和服务代理"中进行了说明: 解决方案
Everything you need is explained in second paragraph "Virtual IPs and service proxies" of this documentation: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service
In nutshell: currently, depending on the proxy mode, for ClusterIP it's just round robin/random. It's done by kube-proxy, which runs on each nodes, proxies UDP and TCP and provides load balancing.
It's better to think of kubernetes as a whole rather than specific nodes. Abstraction does its thing here.
Hope it answers your question.
这篇关于Kubernetes服务集群IP,如何在不同节点之间内部平衡负载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!