2

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

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

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

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

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

谢谢!

4

2 回答 2

3

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

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

于 2020-01-29T22:07:59.157 回答
-1

根据关于 externalTrafficPolicy 的Kubernetes 官方文档,答案是 a)。

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

于 2020-01-30T00:22:21.177 回答