官方 kubernetes 文档明确指出kube-proxy"不会扩展到具有数千个服务的非常大的集群">,但是当在 GKE 上创建LoadBalancer
类型的服务时,默认情况下externalTrafficPolicy
设置为Cluster
(这意味着除了外部负载均衡之外,每个请求都将由 kube-proxy 进行负载均衡(。例如,正如Next '17的视频中所解释的那样,这是为了避免流量不平衡(因为Google的外部负载均衡器无法询问集群每个节点上有多少个给定服务的Pod(。
因此问题来了:这是否意味着:
a( 默认情况下,GKE 不能用于"具有数千个服务的非常大的集群",为此,我需要通过将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 关于 externalTrafficPolicy 的官方文档,答案是 a(。
由于群集选项会掩盖客户端源IP,并可能导致到另一个节点的第二个跃点,但应具有良好的整体负载分布,并且本地选项保留客户端源 IP 并避免负载均衡器和 NodePort 类型服务的第二个跃点,但存在潜在的不平衡流量传播的风险。