diff --git a/internal/configs/configurator.go b/internal/configs/configurator.go
index 0f449f7db9..0f8aa3ce1e 100644
--- a/internal/configs/configurator.go
+++ b/internal/configs/configurator.go
@@ -311,6 +311,16 @@ func (cnf *Configurator) AddOrUpdateIngress(ingEx *IngressEx) (Warnings, error)
 	return warnings, nil
 }
 
+// virtualServerExForHost takes a hostname and returns a VirtualServerEx for the given hostname.
+func (cnf *Configurator) virtualServerExForHost(hostname string) *VirtualServerEx {
+	for _, vsEx := range cnf.virtualServers {
+		if vsEx.VirtualServer.Spec.Host == hostname {
+			return vsEx
+		}
+	}
+	return nil
+}
+
 // virtualServerForHost takes a hostname and returns a VS for the given hostname.
 func (cnf *Configurator) virtualServerForHost(hostname string) *conf_v1.VirtualServer {
 	for _, vsEx := range cnf.virtualServers {
@@ -321,11 +331,13 @@ func (cnf *Configurator) virtualServerForHost(hostname string) *conf_v1.VirtualS
 	return nil
 }
 
-// upstreamsForVirtualServer takes VirtualServer and returns a list of associated upstreams.
-func (cnf *Configurator) upstreamsForVirtualServer(vs *conf_v1.VirtualServer) []string {
+// upstreamsForVirtualServer takes a VirtualServerEx and returns a list of associated upstreams.
+func (cnf *Configurator) upstreamsForVirtualServer(vsex *VirtualServerEx) []string {
 	l := nl.LoggerFromContext(cnf.CfgParams.Context)
+	vs := vsex.VirtualServer
+	var upstreamNames []string
+
 	nl.Debugf(l, "Get upstreamName for vs: %s", vs.Spec.Host)
-	upstreamNames := make([]string, 0, len(vs.Spec.Upstreams))
 
 	virtualServerUpstreamNamer := NewUpstreamNamerForVirtualServer(vs)
 
@@ -334,6 +346,17 @@ func (cnf *Configurator) upstreamsForVirtualServer(vs *conf_v1.VirtualServer) []
 		nl.Debugf(l, "upstream: %s, upstreamName: %s", u.Name, upstreamName)
 		upstreamNames = append(upstreamNames, upstreamName)
 	}
+
+	for _, vsr := range vsex.VirtualServerRoutes {
+		upstreamNamer := NewUpstreamNamerForVirtualServerRoute(vs, vsr)
+		for _, u := range vsr.Spec.Upstreams {
+			upstreamName := upstreamNamer.GetNameForUpstream(u.Name)
+			nl.Debugf(l, "upstream: %s, upstreamName: %s", u.Name, upstreamName)
+			upstreamNames = append(upstreamNames, upstreamName)
+
+		}
+	}
+
 	return upstreamNames
 }
 
@@ -341,9 +364,9 @@ func (cnf *Configurator) upstreamsForVirtualServer(vs *conf_v1.VirtualServer) []
 func (cnf *Configurator) UpstreamsForHost(hostname string) []string {
 	l := nl.LoggerFromContext(cnf.CfgParams.Context)
 	nl.Debugf(l, "Get upstream for host: %s", hostname)
-	vs := cnf.virtualServerForHost(hostname)
-	if vs != nil {
-		return cnf.upstreamsForVirtualServer(vs)
+	vsex := cnf.virtualServerExForHost(hostname)
+	if vsex != nil {
+		return cnf.upstreamsForVirtualServer(vsex)
 	}
 	return nil
 }
diff --git a/internal/configs/configurator_test.go b/internal/configs/configurator_test.go
index 0a9c4c437f..27bfcb0885 100644
--- a/internal/configs/configurator_test.go
+++ b/internal/configs/configurator_test.go
@@ -1563,6 +1563,24 @@ func TestUpstreamsForHost_ReturnsNilForNoVirtualServers(t *testing.T) {
 	}
 }
 
+func TestUpstreamsForHost_VirtualServerRoutes(t *testing.T) {
+	t.Parallel()
+
+	tcnf := createTestConfigurator(t)
+	tcnf.virtualServers = map[string]*VirtualServerEx{
+		"vs": validVirtualServerExWithRouteUpstreams,
+	}
+
+	want := []string{
+		"vs_default_cafe-vs_vsr_tea_tea-app_tea",
+		"vs_default_cafe-vs_vsr_coffee_coffee-app_coffee",
+	}
+	got := tcnf.UpstreamsForHost("cafe.example.com")
+	if !cmp.Equal(want, got) {
+		t.Error(cmp.Diff(want, got))
+	}
+}
+
 func TestUpstreamsForHost_DoesNotReturnUpstreamsOnBogusHostname(t *testing.T) {
 	t.Parallel()
 
@@ -1834,6 +1852,55 @@ var (
 		},
 	}
 
+	validVirtualServerExWithRouteUpstreams = &VirtualServerEx{
+		VirtualServerRoutes: []*conf_v1.VirtualServerRoute{
+			{
+				ObjectMeta: meta_v1.ObjectMeta{
+					Name:      "tea-app",
+					Namespace: "tea",
+				},
+				Spec: conf_v1.VirtualServerRouteSpec{
+					Upstreams: []conf_v1.Upstream{
+						{
+							Name:    "tea",
+							Service: "tea-svc",
+						},
+					},
+				},
+			},
+			{
+				ObjectMeta: meta_v1.ObjectMeta{
+					Name:      "coffee-app",
+					Namespace: "coffee",
+				},
+				Spec: conf_v1.VirtualServerRouteSpec{
+					Upstreams: []conf_v1.Upstream{
+						{
+							Name:    "coffee",
+							Service: "coffee-svc",
+						},
+					},
+				},
+			},
+		},
+		VirtualServer: &conf_v1.VirtualServer{
+			ObjectMeta: meta_v1.ObjectMeta{
+				Name:      "cafe-vs",
+				Namespace: "default",
+			},
+			Spec: conf_v1.VirtualServerSpec{
+				Host: "cafe.example.com",
+				Routes: []conf_v1.Route{
+					{
+						Route: "tea/tea",
+					},
+					{
+						Route: "coffee/coffee",
+					},
+				},
+			},
+		},
+	}
 	validTransportServerExWithUpstreams = &TransportServerEx{
 		TransportServer: &conf_v1.TransportServer{
 			ObjectMeta: meta_v1.ObjectMeta{