fix: routing priorities are not working properly (#472)

Signed-off-by: charlie <qianglin98@qq.com>
This commit is contained in:
Qianglin Li
2023-08-11 09:55:33 +08:00
committed by GitHub
parent 35d5669b51
commit 49269b4303
5 changed files with 69 additions and 6 deletions

View File

@@ -482,6 +482,9 @@ func (m *IngressConfig) convertVirtualService(configs []common.WrapperConfig) []
vs := wrapperVS.VirtualService
vs.Gateways = gateways
// Sort, exact -> prefix -> regex
common.SortHTTPRoutes(routes)
for _, route := range routes {
vs.Http = append(vs.Http, route.HTTPRoute)
}

View File

@@ -170,7 +170,14 @@ func SortHTTPRoutes(routes []*WrapperHTTPRoute) {
isAllCatch := func(route *WrapperHTTPRoute) bool {
if route.OriginPathType == Prefix && route.OriginPath == "/" {
return true
if route.HTTPRoute.Match == nil {
return true
}
match := route.HTTPRoute.Match[0]
if len(match.Headers) == 0 && len(match.QueryParams) == 0 && match.Method == nil {
return true
}
}
return false
}

View File

@@ -599,11 +599,6 @@ func (c *controller) ConvertHTTPRoute(convertOptions *common.ConvertOptions, wra
} else {
convertOptions.HTTPRoutes[rule.Host] = wrapperHttpRoutes
}
// Sort, exact -> prefix -> regex
routes := convertOptions.HTTPRoutes[rule.Host]
IngressLog.Debugf("routes of host %s is %v", rule.Host, routes)
common.SortHTTPRoutes(routes)
}
return nil

View File

@@ -90,6 +90,25 @@ var HTTPRouteSameHostAndPath = suite.ConformanceTest{
},
},
},
{
Meta: http.AssertionMeta{
TargetBackend: "infra-backend-v2",
TargetNamespace: "higress-conformance-infra",
},
Request: http.AssertionRequest{
ActualRequest: http.Request{
Path: "/",
Headers: map[string]string{
"abc": "123",
},
},
},
Response: http.AssertionResponse{
ExpectedResponse: http.Response{
StatusCode: 200,
},
},
},
}
t.Run("Match Routes With same host and path", func(t *testing.T) {

View File

@@ -102,3 +102,42 @@ spec:
name: infra-backend-v2
port:
number: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: higress-same-host-and-path-05
namespace: higress-conformance-infra
spec:
ingressClassName: higress
rules:
- http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: infra-backend-v1
port:
number: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
# exact matching
higress.io/exact-match-header-abc: "123"
name: higress-same-host-and-path-06
namespace: higress-conformance-infra
spec:
ingressClassName: higress
rules:
- http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: infra-backend-v2
port:
number: 8080