使用 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 类型服务的第二跳,但存在潜在的不平衡流量传播风险。
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 类型服务的第二跳,但存在潜在的不平衡流量传播风险。