mirror of https://github.com/status-im/consul.git
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:
parent
9500711881
commit
dbca544d25
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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": {
|
||||||
|
|
|
@ -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": {
|
||||||
|
|
|
@ -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": {
|
||||||
|
|
|
@ -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": {
|
||||||
|
|
|
@ -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": {
|
||||||
|
|
|
@ -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": {
|
||||||
|
|
|
@ -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": {
|
||||||
|
|
|
@ -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": {
|
||||||
|
|
Loading…
Reference in New Issue