<p>The <a href="https://kubernetes.io/docs/concepts/services-networking/service/#shortcomings" rel="nofollow noreferrer">official kubernetes docs</a> clearly state that <strong>kube-proxy</strong> <em>"will not scale to very large clusters with thousands of Services"</em>, however when a <code>LoadBalancer</code> type Service is created on GKE the <code>externalTrafficPolicy</code> is set to <code>Cluster</code> 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 <a href="https://www.youtube.com/watch?v=y2bhV81MfKQ&amp;t=1823" rel="nofollow noreferrer">this video from Next '17</a>, this is to avoid traffic imbalance (as Google's external load balancers are not capable of asking a cluster how many pods of a given service are on each node). </p>

<p>Hence the question: does it mean that:</p>

<p>a) by default GKE cannot be used for for "very large clusters with thousands of Services" and to do so I need to risk traffic imbalances by setting <code>externalTrafficPolicy</code> to <code>Local</code></p>

<p>b) ...or the information about poor scalability of kube-proxy is incorrect or outdated</p>

<p>c) ...or something else that I couldn't come up with</p>

<p>Thanks!</p>

<p><code>will not scale to very large clusters with thousands of services</code> quote refers to userspace proxy, which was the default mode long time ago before full iptables based implementation happened. So this statement is largely outdated, but...</p>

<p>iptables mode has it's own issues that come with scale (extreamly large iptables rule chains take a lot of time to update) which is one of the reasons why IPVS work made it into kube-proxy. You'd have to have a really hardcore scale to run into performance issues with kube-proxy.</p>
