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(""),
)
var routeName string
if destination.Explicit != nil {
routeName = lb.listener.Name
} else {
routeName = DestinationResourceID(cpr.ParentRef.Ref)
}
var (
useRDS bool
needsNullRouteCluster bool
@ -100,8 +107,6 @@ func (b *Builder) buildDestination(
route := config.Http
listenerName := lb.listener.Name
// this corresponds to roughly "makeUpstreamRouteForDiscoveryChain"
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{{
Name: listenerName,
Name: routeName,
RouteRules: proxyRouteRules,
}},
})
@ -145,8 +150,6 @@ func (b *Builder) buildDestination(
useRDS = true
route := config.Grpc
listenerName := lb.listener.Name
var proxyRouteRules []*pbproxystate.RouteRule
for _, routeRule := range route.Rules {
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{{
Name: listenerName,
Name: routeName,
RouteRules: proxyRouteRules,
}},
})
@ -479,7 +482,7 @@ func makeExplicitListener(explicit *pbmesh.Destination, direction pbproxystate.D
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:
destinationAddr := explicit.ListenAddr.(*pbmesh.Destination_Unix)
listener.BindAddress = &pbproxystate.Listener_UnixSocket{
@ -488,7 +491,7 @@ func makeExplicitListener(explicit *pbmesh.Destination, direction pbproxystate.D
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

View File

@ -28,10 +28,19 @@ func DestinationStatPrefix(serviceRef *pbresource.Reference, portName, datacente
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 {
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",
"port": 1234
},
"name": "api-1:tcp:1.1.1.1:1234",
"name": "default/local/default/api-1:tcp:1.1.1.1:1234",
"routers": [
{
"l4": {

View File

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

View File

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

View File

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

View File

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

View File

@ -321,10 +321,31 @@
}
],
"routes": {
"outbound_listener": {
"default/local/default/api-app": {
"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": [
{
"destination": {

View File

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

View File

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