mirror of
https://github.com/alibaba/higress.git
synced 2026-02-24 20:50:51 +08:00
fix: routing priorities are not working properly (#472)
Signed-off-by: charlie <qianglin98@qq.com>
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user