我正在Kubernetes集群中运行3个节点。每个节点具有相同的Pod myApp。 我使用NodePort类型创建服务,以便可以从外部访问所有3个Node。 服务yaml如下所示
apiVersion: v1
kind: Service
metadata:
name: myService
labels:
app: myApp
spec:
selector:
app: myApp
type: NodePort
假设3个节点的节点IP +端口为:
1. 192.168.18.1:30010
2. 192.168.18.2:30010
3. 192.168.18.3:30010
我的问题是:
1.如果所有请求都到达IP(192.168.18.1:30010)的单个节点,服务将负载均衡对其他节点或目标节点(IP 192.168.18.1:30010)的请求吗?
2.如果对问题1的回答为“是”,则意味着服务可以负载均衡请求。那我们还需要负载均衡器吗?
谢谢
答案 0 :(得分:2)
是的,负载均衡将由kube-proxy提供。如果通过描述服务来查看端点,则会发现该服务支持的Pod的IP在此处列出。因此,当请求到达任何节点IP和NodePort时,将通过这些Pod之间的kube-proxy进行负载平衡。它的工作方式是请求到达节点IP和端口之一,然后到达集群IP,然后负载均衡到clusterIP后面的任何Pod。
通过kube代理进行负载平衡是通过IP表规则在TCP层进行的。 Loadbalancer提供了L7层(HTTP)的负载平衡以及基于HTTP标头的高级路由规则等。因此,如果需要,则需要使用Loadbalancer。使用nodeport的另一个缺点是,如果Node IP发生更改,则客户端需要知道可以通过使用通常提供DNS的负载均衡器来避免的情况。