【问题标题】:Service Node Port across multiple nodes跨多个节点的服务节点端口
【发布时间】:2020-02-25 02:02:06
【问题描述】:

我在 Kubernetes 集群中运行 3 个节点。每个节点都有相同的 Pod myApp。 我使用类型 NodePort 创建了一个服务,以便可以从外部访问所有 3 个节点。 服务 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)的单个节点,服务负载均衡请求到其他节点的Pod,还是只是目标节点(IP 192.168.18.1:30010)?

2.如果问题1的答案是肯定的,这意味着服务可以负载均衡请求。那我们还需要负载均衡器吗?

谢谢

【问题讨论】:

    标签: kubernetes kubernetes-service


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

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

    【讨论】:

    • 很好的答案。有没有关于不同层负载均衡区别的推荐链接?或者你能解释一下吗?
    猜你喜欢
    • 2020-09-25
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多