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

HKI*_*KIT 4 kubernetes kubernetes-service

我在 Kubernetes 集群中运行 3 个节点。每个节点都有相同的 Pod myApp。我使用 NodePort 类型创建一个服务,以便可以从外部访问所有 3 个节点。服务 yaml 如下所示

apiVersion: v1
kind: Service
metadata:
  name: myService
  labels:
    app: myApp
spec:
  selector:
    app: myApp
  type: NodePort
Run Code Online (Sandbox Code Playgroud)

假设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)的单个节点,服务会将请求负载均衡到其他节点中的Pod,还是仅目标节点(IP 192.168.18.1:30010) )?

2. 如果问题1的答案为是,则表示服务可以负载均衡请求。那么我们还需要负载均衡器吗?

谢谢

Arg*_*dhu 12

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

  2. kube proxy 的负载均衡通过 IP 表规则发生在 TCP 层。Loadbalancer提供L7层(HTTP)的负载均衡和基于HTTP header等的高级路由规则。因此,如果您需要,那么您需要使用Loadbalancer。使用nodeport的另一个缺点是,如果节点IP发生变化,那么客户端需要知道这一点,这可以通过使用通常提供DNS的负载均衡器来避免。

在此输入图像描述