mirror of https://github.com/status-im/consul.git
Header manip for service-router plumbed through
This commit is contained in:
parent
f439dfc04f
commit
83fc8723a3
|
@ -1281,6 +1281,32 @@ func setupTestVariationConfigEntriesAndSnapshot(
|
||||||
}),
|
}),
|
||||||
Destination: toService("split-3-ways"),
|
Destination: toService("split-3-ways"),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Match: httpMatch(&structs.ServiceRouteHTTPMatch{
|
||||||
|
PathExact: "/header-manip",
|
||||||
|
}),
|
||||||
|
Destination: &structs.ServiceRouteDestination{
|
||||||
|
Service: "header-manip",
|
||||||
|
RequestHeaders: &structs.HTTPHeaderModifiers{
|
||||||
|
Add: map[string]string{
|
||||||
|
"request": "bar",
|
||||||
|
},
|
||||||
|
Set: map[string]string{
|
||||||
|
"bar": "baz",
|
||||||
|
},
|
||||||
|
Remove: []string{"qux"},
|
||||||
|
},
|
||||||
|
ResponseHeaders: &structs.HTTPHeaderModifiers{
|
||||||
|
Add: map[string]string{
|
||||||
|
"response": "bar",
|
||||||
|
},
|
||||||
|
Set: map[string]string{
|
||||||
|
"bar": "baz",
|
||||||
|
},
|
||||||
|
Remove: []string{"qux"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
|
@ -355,24 +355,23 @@ func makeUpstreamRouteForDiscoveryChain(
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := injectLBToRouteAction(lb, routeAction.Route); err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to apply load balancer configuration to route action: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
case structs.DiscoveryGraphNodeTypeResolver:
|
case structs.DiscoveryGraphNodeTypeResolver:
|
||||||
routeAction = makeRouteActionForChainCluster(nextNode.Resolver.Target, chain)
|
routeAction = makeRouteActionForChainCluster(nextNode.Resolver.Target, chain)
|
||||||
|
|
||||||
if err := injectLBToRouteAction(lb, routeAction.Route); err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to apply load balancer configuration to route action: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("unexpected graph node after route %q", nextNode.Type)
|
return nil, fmt.Errorf("unexpected graph node after route %q", nextNode.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := injectLBToRouteAction(lb, routeAction.Route); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to apply load balancer configuration to route action: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
// TODO(rb): Better help handle the envoy case where you need (prefix=/foo/,rewrite=/) and (exact=/foo,rewrite=/) to do a full rewrite
|
// TODO(rb): Better help handle the envoy case where you need (prefix=/foo/,rewrite=/) and (exact=/foo,rewrite=/) to do a full rewrite
|
||||||
|
|
||||||
destination := discoveryRoute.Definition.Destination
|
destination := discoveryRoute.Definition.Destination
|
||||||
|
|
||||||
|
route := &envoy_route_v3.Route{}
|
||||||
|
|
||||||
if destination != nil {
|
if destination != nil {
|
||||||
if destination.PrefixRewrite != "" {
|
if destination.PrefixRewrite != "" {
|
||||||
routeAction.Route.PrefixRewrite = destination.PrefixRewrite
|
routeAction.Route.PrefixRewrite = destination.PrefixRewrite
|
||||||
|
@ -403,12 +402,16 @@ func makeUpstreamRouteForDiscoveryChain(
|
||||||
|
|
||||||
routeAction.Route.RetryPolicy = retryPolicy
|
routeAction.Route.RetryPolicy = retryPolicy
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := injectHeaderManipToRoute(destination, route); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to apply header manipulation configuration to route: %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
routes = append(routes, &envoy_route_v3.Route{
|
route.Match = routeMatch
|
||||||
Match: routeMatch,
|
route.Action = routeAction
|
||||||
Action: routeAction,
|
|
||||||
})
|
routes = append(routes, route)
|
||||||
}
|
}
|
||||||
|
|
||||||
case structs.DiscoveryGraphNodeTypeSplitter:
|
case structs.DiscoveryGraphNodeTypeSplitter:
|
||||||
|
@ -714,3 +717,35 @@ func injectLBToRouteAction(lb *structs.LoadBalancer, action *envoy_route_v3.Rout
|
||||||
action.HashPolicy = result
|
action.HashPolicy = result
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func injectHeaderManipToRoute(dest *structs.ServiceRouteDestination, r *envoy_route_v3.Route) error {
|
||||||
|
if dest.RequestHeaders != nil {
|
||||||
|
r.RequestHeadersToAdd = append(
|
||||||
|
r.RequestHeadersToAdd,
|
||||||
|
makeHeadersValueOptions(dest.RequestHeaders.Add, true)...,
|
||||||
|
)
|
||||||
|
r.RequestHeadersToAdd = append(
|
||||||
|
r.RequestHeadersToAdd,
|
||||||
|
makeHeadersValueOptions(dest.RequestHeaders.Set, false)...,
|
||||||
|
)
|
||||||
|
r.RequestHeadersToRemove = append(
|
||||||
|
r.RequestHeadersToRemove,
|
||||||
|
dest.RequestHeaders.Remove...,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if dest.ResponseHeaders != nil {
|
||||||
|
r.ResponseHeadersToAdd = append(
|
||||||
|
r.ResponseHeadersToAdd,
|
||||||
|
makeHeadersValueOptions(dest.ResponseHeaders.Add, true)...,
|
||||||
|
)
|
||||||
|
r.ResponseHeadersToAdd = append(
|
||||||
|
r.ResponseHeadersToAdd,
|
||||||
|
makeHeadersValueOptions(dest.ResponseHeaders.Set, false)...,
|
||||||
|
)
|
||||||
|
r.ResponseHeadersToRemove = append(
|
||||||
|
r.ResponseHeadersToRemove,
|
||||||
|
dest.ResponseHeaders.Remove...,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -343,6 +343,52 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"match": {
|
||||||
|
"path": "/header-manip"
|
||||||
|
},
|
||||||
|
"route": {
|
||||||
|
"cluster": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul"
|
||||||
|
},
|
||||||
|
"requestHeadersToAdd": [
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "request",
|
||||||
|
"value": "bar"
|
||||||
|
},
|
||||||
|
"append": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "bar",
|
||||||
|
"value": "baz"
|
||||||
|
},
|
||||||
|
"append": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"requestHeadersToRemove": [
|
||||||
|
"qux"
|
||||||
|
],
|
||||||
|
"responseHeadersToAdd": [
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "response",
|
||||||
|
"value": "bar"
|
||||||
|
},
|
||||||
|
"append": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "bar",
|
||||||
|
"value": "baz"
|
||||||
|
},
|
||||||
|
"append": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responseHeadersToRemove": [
|
||||||
|
"qux"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"match": {
|
"match": {
|
||||||
"prefix": "/"
|
"prefix": "/"
|
||||||
|
|
|
@ -343,6 +343,52 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"match": {
|
||||||
|
"path": "/header-manip"
|
||||||
|
},
|
||||||
|
"route": {
|
||||||
|
"cluster": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul"
|
||||||
|
},
|
||||||
|
"requestHeadersToAdd": [
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "request",
|
||||||
|
"value": "bar"
|
||||||
|
},
|
||||||
|
"append": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "bar",
|
||||||
|
"value": "baz"
|
||||||
|
},
|
||||||
|
"append": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"requestHeadersToRemove": [
|
||||||
|
"qux"
|
||||||
|
],
|
||||||
|
"responseHeadersToAdd": [
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "response",
|
||||||
|
"value": "bar"
|
||||||
|
},
|
||||||
|
"append": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "bar",
|
||||||
|
"value": "baz"
|
||||||
|
},
|
||||||
|
"append": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responseHeadersToRemove": [
|
||||||
|
"qux"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"match": {
|
"match": {
|
||||||
"prefix": "/"
|
"prefix": "/"
|
||||||
|
|
|
@ -344,6 +344,52 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"match": {
|
||||||
|
"path": "/header-manip"
|
||||||
|
},
|
||||||
|
"route": {
|
||||||
|
"cluster": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul"
|
||||||
|
},
|
||||||
|
"requestHeadersToAdd": [
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "request",
|
||||||
|
"value": "bar"
|
||||||
|
},
|
||||||
|
"append": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "bar",
|
||||||
|
"value": "baz"
|
||||||
|
},
|
||||||
|
"append": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"requestHeadersToRemove": [
|
||||||
|
"qux"
|
||||||
|
],
|
||||||
|
"responseHeadersToAdd": [
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "response",
|
||||||
|
"value": "bar"
|
||||||
|
},
|
||||||
|
"append": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "bar",
|
||||||
|
"value": "baz"
|
||||||
|
},
|
||||||
|
"append": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responseHeadersToRemove": [
|
||||||
|
"qux"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"match": {
|
"match": {
|
||||||
"prefix": "/"
|
"prefix": "/"
|
||||||
|
|
|
@ -344,6 +344,52 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"match": {
|
||||||
|
"path": "/header-manip"
|
||||||
|
},
|
||||||
|
"route": {
|
||||||
|
"cluster": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul"
|
||||||
|
},
|
||||||
|
"requestHeadersToAdd": [
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "request",
|
||||||
|
"value": "bar"
|
||||||
|
},
|
||||||
|
"append": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "bar",
|
||||||
|
"value": "baz"
|
||||||
|
},
|
||||||
|
"append": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"requestHeadersToRemove": [
|
||||||
|
"qux"
|
||||||
|
],
|
||||||
|
"responseHeadersToAdd": [
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "response",
|
||||||
|
"value": "bar"
|
||||||
|
},
|
||||||
|
"append": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "bar",
|
||||||
|
"value": "baz"
|
||||||
|
},
|
||||||
|
"append": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responseHeadersToRemove": [
|
||||||
|
"qux"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"match": {
|
"match": {
|
||||||
"prefix": "/"
|
"prefix": "/"
|
||||||
|
|
|
@ -344,6 +344,52 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"match": {
|
||||||
|
"path": "/header-manip"
|
||||||
|
},
|
||||||
|
"route": {
|
||||||
|
"cluster": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul"
|
||||||
|
},
|
||||||
|
"requestHeadersToAdd": [
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "request",
|
||||||
|
"value": "bar"
|
||||||
|
},
|
||||||
|
"append": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "bar",
|
||||||
|
"value": "baz"
|
||||||
|
},
|
||||||
|
"append": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"requestHeadersToRemove": [
|
||||||
|
"qux"
|
||||||
|
],
|
||||||
|
"responseHeadersToAdd": [
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "response",
|
||||||
|
"value": "bar"
|
||||||
|
},
|
||||||
|
"append": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "bar",
|
||||||
|
"value": "baz"
|
||||||
|
},
|
||||||
|
"append": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responseHeadersToRemove": [
|
||||||
|
"qux"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"match": {
|
"match": {
|
||||||
"prefix": "/"
|
"prefix": "/"
|
||||||
|
|
|
@ -344,6 +344,52 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"match": {
|
||||||
|
"path": "/header-manip"
|
||||||
|
},
|
||||||
|
"route": {
|
||||||
|
"cluster": "header-manip.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul"
|
||||||
|
},
|
||||||
|
"requestHeadersToAdd": [
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "request",
|
||||||
|
"value": "bar"
|
||||||
|
},
|
||||||
|
"append": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "bar",
|
||||||
|
"value": "baz"
|
||||||
|
},
|
||||||
|
"append": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"requestHeadersToRemove": [
|
||||||
|
"qux"
|
||||||
|
],
|
||||||
|
"responseHeadersToAdd": [
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "response",
|
||||||
|
"value": "bar"
|
||||||
|
},
|
||||||
|
"append": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"header": {
|
||||||
|
"key": "bar",
|
||||||
|
"value": "baz"
|
||||||
|
},
|
||||||
|
"append": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responseHeadersToRemove": [
|
||||||
|
"qux"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"match": {
|
"match": {
|
||||||
"prefix": "/"
|
"prefix": "/"
|
||||||
|
|
Loading…
Reference in New Issue