[gRPC/http2 auto-detect] Support auto-detection in queue proxy
Describe the feature
This is part of #4283. As part of supporting http2 auto-detect, we need to make changes in health probes, queue proxy, and activator. Below are some notes created by @igorbelianski on the work that needs to be done in queue proxy & activator.
Data Path Notes
Public service ingress construction
Service that is exposed to user and backed by either Activator or Queue proxy depending on "direct operational mode) pkg/reconciler/serverlessservice/resources/services.go
func MakePublicService
(based on h2c flag it uses different backend port 8012 or 8013 see func targetPort()
Private service ingress construction
Service exposed to activator to access Queue proxy pkg/reconciler/serverlessservice/resources/services.go
func MakePrivateService(sks *v1alpha1.ServerlessService) *corev1.Service {
(based on h2c flag it uses different backend port 8012 or 8013 see func targetPort()
Activator always listens on both 8012 an 8013 constructs 2 distinct servers:
[cmd/activator/main.go](https://github.com/knative/serving/tree/master/cmd/activator/main.go)
servers := map[string]*http.Server{
"http1": pkgnet.NewServer(":"+strconv.Itoa(networking.BackendHTTPPort), ah),
"h2c": pkgnet.NewServer(":"+strconv.Itoa(networking.BackendHTTP2Port), ah),
"profile": profiling.NewServer(profilingHandler),
}
Queue proxy container construction
While construction queue proxy container we make a static choice on the port 8012/8013 pkg/reconciler/revision/resources/queue.go
func makeQueueContainer(rev *v1.Revision, cfg *config.Config) (*corev1.Container, error) {
Queue proxy implementation picks port from env.UserPort
https://github.com/knative/serving/blob/master/cmd/queue/main.go#L273
/kind enhancement /area networking /triage accepted
This issue is stale because it has been open for 90 days with no
activity. It will automatically close after 30 more days of
inactivity. Reopen the issue with /reopen. Mark the issue as
fresh by adding the comment /remove-lifecycle stale.