<p>I read about Knative private and public service. Private service always point to the actual deployment's endpoint while public service can either point to - where private service is pointing or it can point to activator.</p>
<p>But in my case public service always points to the activator (no matter if we are in serve mode or proxy mode). But things works fine. Please check the image below, 10.24.3.16:8012 is activator endpoint:</p>
<p>In scaled down mode (pod count is zero), please check the helloworld-go-00001
<a href="https://i.stack.imgur.com/AtTYR.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/AtTYR.jpg" alt="enter image description here" /></a></p>
<p>In scaled up mode (serve mode) when pod count is more than 0.</p>
<p><a href="https://i.stack.imgur.com/RegZs.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/RegZs.jpg" alt="enter image description here" /></a></p>
<p>Please let me understand what am I missing.</p>

<p>You're noticing an optimization added last year -- in the case of small amounts of traffic (basically, less than 10-15 pods), the activator can often perform better request-weighted list balancing than the typical ingress in terms of queueing and managing <code>concurrencyCount</code> for existing pods and routing delayed requests to new pods or existing pods which have become available.</p>
<p>If your serving scales up to 20 or 30 pods, you should see the activator stop being in the traffic path; I believe the cutover point is <code>trafficBurstCapacity / ( (1.0-targetCapacity) * concurrencyCount)</code> pods, but I may be mistaken. If I recall correctly, this works out to something like <code>200 / (0.3 * 80) &gt; 8</code>, but I haven't looked in a while.</p>
<p>The way this is implemented in the apiserver is that the Knative autoscaler manages the endpoints for the <code>helloworld-go-00001</code> service directly, using metrics from the activator and queue-proxy for details.</p>
