跨多个节点的服务节点端口

时间:2020-02-25 02:02:06

标签: kubernetes pod kubernetes-service

我正在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的回答为“是”,则意味着服务可以负载均衡请求。那我们还需要负载均衡器吗?

谢谢

1 个答案:

答案 0 :(得分:2)

  1. 是的,负载均衡将由kube-proxy提供。如果通过描述服务来查看端点,则会发现该服务支持的Pod的IP在此处列出。因此,当请求到达任何节点IP和NodePort时,将通过这些Pod之间的kube-proxy进行负载平衡。它的工作方式是请求到达节点IP和端口之一,然后到达集群IP,然后负载均衡到clusterIP后面的任何Pod。

  2. 通过kube代理进行负载平衡是通过IP表规则在TCP层进行的。 Loadbalancer提供了L7层(HTTP)的负载平衡以及基于HTTP标头的高级路由规则等。因此,如果需要,则需要使用Loadbalancer。使用nodeport的另一个缺点是,如果Node IP发生更改,则客户端需要知道可以通过使用通常提供DNS的负载均衡器来避免的情况。

enter image description here

相关问题