From 1c91abd23d205c1a7cd2935c16415861a247d08d Mon Sep 17 00:00:00 2001 From: hc-github-team-consul-core Date: Tue, 17 Oct 2023 11:33:12 -0400 Subject: [PATCH] Backport of [NET-5810] CE changes for multiple virtual hosts into release/1.17.x (#19247) backport of commit c5018c1da7434a99f5715a2dd06231d40fa696d7 Co-authored-by: jm96441n --- agent/xds/listeners_apigateway.go | 12 +++-- ...eway-with-multiple-hostnames.latest.golden | 50 +++++++------------ 2 files changed, 25 insertions(+), 37 deletions(-) diff --git a/agent/xds/listeners_apigateway.go b/agent/xds/listeners_apigateway.go index a4611895e2..771a482972 100644 --- a/agent/xds/listeners_apigateway.go +++ b/agent/xds/listeners_apigateway.go @@ -152,7 +152,11 @@ func (s *ResourceGenerator) makeAPIGatewayListeners(address string, cfgSnap *pro routes := make([]*structs.HTTPRouteConfigEntry, 0, len(readyListener.routeReferences)) for _, routeRef := range maps.Keys(readyListener.routeReferences) { - route, _ := cfgSnap.APIGateway.HTTPRoutes.Get(routeRef) + route, ok := cfgSnap.APIGateway.HTTPRoutes.Get(routeRef) + if !ok { + return nil, fmt.Errorf("missing route for routeRef %s:%s", routeRef.Kind, routeRef.Name) + } + routes = append(routes, route) } consolidatedRoutes := discoverychain.ConsolidateHTTPRoutes(cfgSnap.APIGateway.GatewayConfig, &readyListener.listenerCfg, routes...) @@ -297,11 +301,9 @@ func getReadyListeners(cfgSnap *proxycfg.ConfigSnapshot) map[string]readyListene continue } - routeKey := l.Name + routeRef.String() - for _, upstream := range routeUpstreamsForListener { // Insert or update readyListener for the listener to include this upstream - r, ok := ready[routeKey] + r, ok := ready[l.Name] if !ok { r = readyListener{ listenerKey: listenerKey, @@ -312,7 +314,7 @@ func getReadyListeners(cfgSnap *proxycfg.ConfigSnapshot) map[string]readyListene } r.routeReferences[routeRef] = struct{}{} r.upstreams = append(r.upstreams, upstream) - ready[routeKey] = r + ready[l.Name] = r } } } diff --git a/agent/xds/testdata/routes/api-gateway-with-multiple-hostnames.latest.golden b/agent/xds/testdata/routes/api-gateway-with-multiple-hostnames.latest.golden index 9e96457f3c..b268a5e5ac 100644 --- a/agent/xds/testdata/routes/api-gateway-with-multiple-hostnames.latest.golden +++ b/agent/xds/testdata/routes/api-gateway-with-multiple-hostnames.latest.golden @@ -1,30 +1,6 @@ { "nonce": "00000001", "resources": [ - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ - { - "domains": [ - "backend.example.com", - "backend.example.com:8080" - ], - "name": "api-gateway-http-5a84e719", - "routes": [ - { - "match": { - "prefix": "/" - }, - "route": { - "cluster": "backend.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" - } - } - ] - } - ] - }, { "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", "name": "8080", @@ -46,14 +22,24 @@ } } ] - } - ] - }, - { - "@type": "type.googleapis.com/envoy.config.route.v3.RouteConfiguration", - "name": "8080", - "validateClusters": true, - "virtualHosts": [ + }, + { + "domains": [ + "backend.example.com", + "backend.example.com:8080" + ], + "name": "api-gateway-http-5a84e719", + "routes": [ + { + "match": { + "prefix": "/" + }, + "route": { + "cluster": "backend.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul" + } + } + ] + }, { "domains": [ "*.example.com",