【问题标题】:using kube-proxy for load balancing使用 kube-proxy 进行负载均衡
【发布时间】:2020-01-29 20:15:03
【问题描述】:

official kubernetes docs 明确指出 kube-proxy “不会扩展到具有数千个服务的非常大的集群”,但是当 LoadBalancer 类型的服务是在 GKE 上创建的 externalTrafficPolicy 默认设置为 Cluster(这意味着除了外部负载平衡之外,每个请求都将由 kube-proxy 进行负载平衡)。正如this video from Next '17 中所解释的那样,这是为了避免流量不平衡(因为 Google 的外部负载均衡器无法询问集群每个节点上有多少给定服务的 pod)。

因此问题是:这是否意味着:

a) 默认情况下,GKE 不能用于“具有数千个服务的超大型集群”,为此我需要通过将 externalTrafficPolicy 设置为 Local 来冒流量不平衡的风险

b) ...或有关 kube-proxy 可扩展性差的信息不正确或已过时

c) ...或其他我想不出的东西

谢谢!

【问题讨论】:

    标签: kubernetes google-kubernetes-engine kube-proxy


    【解决方案1】:

    will not scale to very large clusters with thousands of services 引用指的是用户空间代理,这是很久以前的默认模式,在完全基于 iptables 的实现发生之前。所以这个说法在很大程度上已经过时了,但是......

    iptables 模式有它自己的规模问题(非常大的 iptables 规则链需要大量时间来更新),这也是 IPVS 工作使其成为 kube-proxy 的原因之一。您必须拥有真正的核心规模才能遇到 kube-proxy 的性能问题。

    【讨论】:

    • 补充一点——我们会定期测试 Kubernetes 和 GKE,特别是数千个服务和数十万个 Pod。 GKE 有客户在生产环境中使用数以千计的节点集群。
    • @TimHockin 和 Radek:感谢你们的帮助!所以看起来答案应该是c:我很笨拙,没有注意到引用仅适用于传统模式;-] 如果将它放在"Virtual IPs and service proxies" section中的模式解释之后可能会更好因为它现在的位置似乎脱离了代理模式的背景,并误导了像我这样的笨拙的人;-]
    【解决方案2】:

    根据关于 externalTrafficPolicy 的Kubernetes official documentation,答案是 a)。

    由于集群选项隐藏了客户端源 IP,可能会导致第二跳到另一个节点,但应该具有良好的整体负载分散和本地选项 保留客户端源 IP 并避免 LoadBalancer 和 NodePort 类型服务的第二跳,但存在潜在的流量传播不平衡的风险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 2012-11-15
      • 1970-01-01
      • 2012-11-16
      • 2017-01-20
      • 1970-01-01
      相关资源
      最近更新 更多