Skip to content

Commit 17d27f7

Browse files
author
Philipp Hossner
committed
Make ingress pathType "Exact" always override pathType "Prefix"
1 parent 04d271c commit 17d27f7

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

pkg/controller/controller.go

+6
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,12 @@ func (c *HAProxyController) setupHAProxyRules() error {
307307
Scope: "txn",
308308
Expression: fmt.Sprintf("var(txn.host_match),concat(,txn.path,),map(%s)", maps.GetPath(route.PATH_EXACT)),
309309
}, false),
310+
c.haproxy.AddRule(frontend, rules.ReqSetVar{
311+
Name: "path_match",
312+
Scope: "txn",
313+
Expression: fmt.Sprintf("var(txn.host_match),concat(,txn.path,),map(%s)", maps.GetPath(route.PATH_PREFIX_EXACT)),
314+
CondTest: "!{ var(txn.path_match) -m found }",
315+
}, false),
310316
c.haproxy.AddRule(frontend, rules.ReqSetVar{
311317
Name: "path_match",
312318
Scope: "txn",

pkg/haproxy/main.go

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ func New(osArgs utils.OSArgs, env env.Env, cfgFile []byte, p process.Process, cl
5353
route.SNI,
5454
route.HOST,
5555
route.PATH_EXACT,
56+
route.PATH_PREFIX_EXACT,
5657
route.PATH_PREFIX,
5758
}
5859
if h.Maps, err = maps.New(env.MapsDir, persistentMaps); err != nil {

pkg/route/route.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,11 @@ const (
3333
FrontendHTTP = "http"
3434
FrontendHTTPS = "https"
3535
// Routing Maps
36-
SNI maps.Name = "sni"
37-
HOST maps.Name = "host"
38-
PATH_EXACT maps.Name = "path-exact"
39-
PATH_PREFIX maps.Name = "path-prefix"
36+
SNI maps.Name = "sni"
37+
HOST maps.Name = "host"
38+
PATH_EXACT maps.Name = "path-exact"
39+
PATH_PREFIX_EXACT maps.Name = "path-prefix-exact"
40+
PATH_PREFIX maps.Name = "path-prefix"
4041
)
4142

4243
var (
@@ -87,11 +88,11 @@ func AddHostPathRoute(route Route, mapFiles maps.Maps) error {
8788
mapFiles.MapAppend(PATH_PREFIX, route.Host+"/"+"\t\t\t"+value)
8889
case route.Path.PathTypeMatch == store.PATH_TYPE_PREFIX:
8990
path = strings.TrimSuffix(path, "/")
90-
mapFiles.MapAppend(PATH_EXACT, route.Host+path+"\t\t\t"+value)
91+
mapFiles.MapAppend(PATH_PREFIX_EXACT, route.Host+path+"\t\t\t"+value)
9192
mapFiles.MapAppend(PATH_PREFIX, route.Host+path+"/"+"\t\t\t"+value)
9293
case route.Path.PathTypeMatch == store.PATH_TYPE_IMPLEMENTATION_SPECIFIC:
9394
path = strings.TrimSuffix(path, "/")
94-
mapFiles.MapAppend(PATH_EXACT, route.Host+path+"\t\t\t"+value)
95+
mapFiles.MapAppend(PATH_PREFIX_EXACT, route.Host+path+"\t\t\t"+value)
9596
mapFiles.MapAppend(PATH_PREFIX, route.Host+path+"\t\t\t"+value)
9697
default:
9798
return fmt.Errorf("unknown path type '%s' with backend '%s'", route.Path.PathTypeMatch, route.BackendName)

0 commit comments

Comments
 (0)