As described here, Knative's Activator receives and buffers requests to inactive revisions.
How is this routing implemented? All I see in the Namespace of my application is a VirtualService routing requests to the revisions, so I don't see how traffic coming into the mesh is redirected to the Activator.
Knative serving version: 0.9.0
Knative has a new concept (CRD) known as the Serverless service which is created for each Knative Service.
The serverless service creates two Kubernetes Services:
Serverless Services can be in one of the following modes:
The serverless service is in Serve mode as long as there are pod instances of your application running. As such your Public service is configured with the endpoints from your private service, meaning that requests forwarded by the ingress gateway reach your application as shown in the diagram below:
When the instances of your application are scaled down by the autoscaler, the serverless service controller updates the public service to be configured with the IPs discovered by the Activator Service. Which triggers autoscaling buffers the request until one service is up and running and forwards the request. Proxy mode can be seen in the diagram below:
As a summary, the Serverless controller sets the endpoints of the public service by alternating between the endpoints of the Private Service or if it's scaled down to zero to the endpoints of the Activator Service.