使用 kube-proxy 进行负载均衡

using kube-proxy for load balancing

official kubernetes docs clearly state that kube-proxy "will not scale to very large clusters with thousands of Services", however when a LoadBalancer type Service is created on GKE the externalTrafficPolicy is set to Cluster by default (meaning that each request will be load-balanced by kube-proxy anyway in addition to external load balancing). As it is explained for example in this video from Next '17,这是为了避免流量不平衡(因为 Google 的外部负载均衡器无法询问集群有多少 pods 的给定服务正在运行每个节点)。

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

a) 默认情况下 GKE 不能用于 "very large clusters with thousands of Services",为此我需要通过将 externalTrafficPolicy 设置为 Local

来冒流量不平衡的风险

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

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

谢谢!

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

iptables 模式有它自己的规模问题(非常大的 iptables 规则链需要很多时间来更新),这是 IPVS 工作使其成为 kube-proxy 的原因之一。对于 kube-proxy 的性能问题,您必须具有真正的硬核规模 运行。

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

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