NET-5951 - Unique route names for implicit routes (#19174)

* NET-5951 - Unique route names for implicit routes

* remove use of datacenter

* PR feedback
This commit is contained in:
John Murret 2023-10-12 14:46:31 -06:00 committed by GitHub
parent 9500711881
commit dbca544d25
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 65 additions and 32 deletions

View File

@ -89,6 +89,13 @@ func (b *Builder) buildDestination(
defaultDC(""), defaultDC(""),
) )
var routeName string
if destination.Explicit != nil {
routeName = lb.listener.Name
} else {
routeName = DestinationResourceID(cpr.ParentRef.Ref)
}
var ( var (
useRDS bool useRDS bool
needsNullRouteCluster bool needsNullRouteCluster bool
@ -100,8 +107,6 @@ func (b *Builder) buildDestination(
route := config.Http route := config.Http
listenerName := lb.listener.Name
// this corresponds to roughly "makeUpstreamRouteForDiscoveryChain" // this corresponds to roughly "makeUpstreamRouteForDiscoveryChain"
var proxyRouteRules []*pbproxystate.RouteRule var proxyRouteRules []*pbproxystate.RouteRule
@ -134,9 +139,9 @@ func (b *Builder) buildDestination(
} }
} }
b.addRoute(listenerName, &pbproxystate.Route{ b.addRoute(routeName, &pbproxystate.Route{
VirtualHosts: []*pbproxystate.VirtualHost{{ VirtualHosts: []*pbproxystate.VirtualHost{{
Name: listenerName, Name: routeName,
RouteRules: proxyRouteRules, RouteRules: proxyRouteRules,
}}, }},
}) })
@ -145,8 +150,6 @@ func (b *Builder) buildDestination(
useRDS = true useRDS = true
route := config.Grpc route := config.Grpc
listenerName := lb.listener.Name
var proxyRouteRules []*pbproxystate.RouteRule var proxyRouteRules []*pbproxystate.RouteRule
for _, routeRule := range route.Rules { for _, routeRule := range route.Rules {
for _, backendRef := range routeRule.BackendRefs { for _, backendRef := range routeRule.BackendRefs {
@ -178,9 +181,9 @@ func (b *Builder) buildDestination(
} }
} }
b.addRoute(listenerName, &pbproxystate.Route{ b.addRoute(routeName, &pbproxystate.Route{
VirtualHosts: []*pbproxystate.VirtualHost{{ VirtualHosts: []*pbproxystate.VirtualHost{{
Name: listenerName, Name: routeName,
RouteRules: proxyRouteRules, RouteRules: proxyRouteRules,
}}, }},
}) })
@ -479,7 +482,7 @@ func makeExplicitListener(explicit *pbmesh.Destination, direction pbproxystate.D
Port: destinationAddr.IpPort.Port, Port: destinationAddr.IpPort.Port,
}, },
} }
listener.Name = DestinationListenerName(explicit.DestinationRef.Name, explicit.DestinationPort, destinationAddr.IpPort.Ip, destinationAddr.IpPort.Port) listener.Name = DestinationListenerName(explicit.DestinationRef, explicit.DestinationPort, destinationAddr.IpPort.Ip, destinationAddr.IpPort.Port)
case *pbmesh.Destination_Unix: case *pbmesh.Destination_Unix:
destinationAddr := explicit.ListenAddr.(*pbmesh.Destination_Unix) destinationAddr := explicit.ListenAddr.(*pbmesh.Destination_Unix)
listener.BindAddress = &pbproxystate.Listener_UnixSocket{ listener.BindAddress = &pbproxystate.Listener_UnixSocket{
@ -488,7 +491,7 @@ func makeExplicitListener(explicit *pbmesh.Destination, direction pbproxystate.D
Mode: destinationAddr.Unix.Mode, Mode: destinationAddr.Unix.Mode,
}, },
} }
listener.Name = DestinationListenerName(explicit.DestinationRef.Name, explicit.DestinationPort, destinationAddr.Unix.Path, 0) listener.Name = DestinationListenerName(explicit.DestinationRef, explicit.DestinationPort, destinationAddr.Unix.Path, 0)
} }
return listener return listener

View File

@ -28,10 +28,19 @@ func DestinationStatPrefix(serviceRef *pbresource.Reference, portName, datacente
datacenter) datacenter)
} }
func DestinationListenerName(name, portName string, address string, port uint32) string { func DestinationListenerName(destinationRef *pbresource.Reference, portName string, address string, port uint32) string {
name := fmt.Sprintf("%s:%s:%s", DestinationResourceID(destinationRef), portName, address)
if port != 0 { if port != 0 {
return fmt.Sprintf("%s:%s:%s:%d", name, portName, address, port) return fmt.Sprintf("%s:%d", name, port)
} }
return fmt.Sprintf("%s:%s:%s", name, portName, address) return name
}
// DestinationResourceID returns a string representation that uniquely identifies the
// upstream in a canonical but human readable way.
func DestinationResourceID(destinationRef *pbresource.Reference) string {
tenancyPrefix := fmt.Sprintf("%s/%s/%s", destinationRef.Tenancy.Partition,
destinationRef.Tenancy.PeerName, destinationRef.Tenancy.Namespace)
return fmt.Sprintf("%s/%s", tenancyPrefix, destinationRef.Name)
} }

View File

@ -86,7 +86,7 @@
"host": "1.1.1.1", "host": "1.1.1.1",
"port": 1234 "port": 1234
}, },
"name": "api-1:tcp:1.1.1.1:1234", "name": "default/local/default/api-1:tcp:1.1.1.1:1234",
"routers": [ "routers": [
{ {
"l4": { "l4": {

View File

@ -140,7 +140,7 @@
"host": "1.1.1.1", "host": "1.1.1.1",
"port": 1234 "port": 1234
}, },
"name": "api-1:tcp:1.1.1.1:1234", "name": "default/local/default/api-1:tcp:1.1.1.1:1234",
"routers": [ "routers": [
{ {
"l4": { "l4": {
@ -167,7 +167,7 @@
}, },
{ {
"direction": "DIRECTION_OUTBOUND", "direction": "DIRECTION_OUTBOUND",
"name": "api-2:tcp:/path/to/socket", "name": "default/local/default/api-2:tcp:/path/to/socket",
"routers": [ "routers": [
{ {
"l4": { "l4": {
@ -189,7 +189,7 @@
"host": "1.1.1.1", "host": "1.1.1.1",
"port": 2345 "port": 2345
}, },
"name": "api-1:tcp2:1.1.1.1:2345", "name": "default/local/default/api-1:tcp2:1.1.1.1:2345",
"routers": [ "routers": [
{ {
"l4": { "l4": {
@ -216,7 +216,7 @@
}, },
{ {
"direction": "DIRECTION_OUTBOUND", "direction": "DIRECTION_OUTBOUND",
"name": "api-2:tcp2:/path/to/socket", "name": "default/local/default/api-2:tcp2:/path/to/socket",
"routers": [ "routers": [
{ {
"l4": { "l4": {

View File

@ -86,7 +86,7 @@
"host": "1.1.1.1", "host": "1.1.1.1",
"port": 1234 "port": 1234
}, },
"name": "api-1:tcp:1.1.1.1:1234", "name": "default/local/default/api-1:tcp:1.1.1.1:1234",
"routers": [ "routers": [
{ {
"l4": { "l4": {

View File

@ -45,7 +45,7 @@
"listeners": [ "listeners": [
{ {
"direction": "DIRECTION_OUTBOUND", "direction": "DIRECTION_OUTBOUND",
"name": "api-2:tcp:/path/to/socket", "name": "default/local/default/api-2:tcp:/path/to/socket",
"routers": [ "routers": [
{ {
"l4": { "l4": {

View File

@ -172,7 +172,7 @@
"host": "1.1.1.1", "host": "1.1.1.1",
"port": 1234 "port": 1234
}, },
"name": "api-1:tcp:1.1.1.1:1234", "name": "default/local/default/api-1:tcp:1.1.1.1:1234",
"routers": [ "routers": [
{ {
"l4": { "l4": {
@ -199,7 +199,7 @@
}, },
{ {
"direction": "DIRECTION_OUTBOUND", "direction": "DIRECTION_OUTBOUND",
"name": "api-2:tcp:/path/to/socket", "name": "default/local/default/api-2:tcp:/path/to/socket",
"routers": [ "routers": [
{ {
"l4": { "l4": {
@ -221,11 +221,11 @@
"host": "1.1.1.1", "host": "1.1.1.1",
"port": 1234 "port": 1234
}, },
"name": "api-1:http:1.1.1.1:1234", "name": "default/local/default/api-1:http:1.1.1.1:1234",
"routers": [ "routers": [
{ {
"l7": { "l7": {
"name": "api-1:http:1.1.1.1:1234", "name": "default/local/default/api-1:http:1.1.1.1:1234",
"statPrefix": "upstream." "statPrefix": "upstream."
} }
} }
@ -233,10 +233,10 @@
} }
], ],
"routes": { "routes": {
"api-1:http:1.1.1.1:1234": { "default/local/default/api-1:http:1.1.1.1:1234": {
"virtualHosts": [ "virtualHosts": [
{ {
"name": "api-1:http:1.1.1.1:1234", "name": "default/local/default/api-1:http:1.1.1.1:1234",
"routeRules": [ "routeRules": [
{ {
"destination": { "destination": {

View File

@ -321,10 +321,31 @@
} }
], ],
"routes": { "routes": {
"outbound_listener": { "default/local/default/api-app": {
"virtualHosts": [ "virtualHosts": [
{ {
"name": "outbound_listener", "name": "default/local/default/api-app",
"routeRules": [
{
"destination": {
"cluster": {
"name": "http.api-app.default.dc1.internal.foo.consul"
}
},
"match": {
"pathMatch": {
"prefix": "/"
}
}
}
]
}
]
},
"default/local/default/api-app2": {
"virtualHosts": [
{
"name": "default/local/default/api-app2",
"routeRules": [ "routeRules": [
{ {
"destination": { "destination": {

View File

@ -179,10 +179,10 @@
} }
], ],
"routes": { "routes": {
"outbound_listener": { "default/local/default/api-app": {
"virtualHosts": [ "virtualHosts": [
{ {
"name": "outbound_listener", "name": "default/local/default/api-app",
"routeRules": [ "routeRules": [
{ {
"destination": { "destination": {

View File

@ -179,10 +179,10 @@
} }
], ],
"routes": { "routes": {
"outbound_listener": { "default/local/default/api-app": {
"virtualHosts": [ "virtualHosts": [
{ {
"name": "outbound_listener", "name": "default/local/default/api-app",
"routeRules": [ "routeRules": [
{ {
"destination": { "destination": {