mirror of
https://github.com/alibaba/higress.git
synced 2026-06-08 12:17:28 +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 := wrapperVS.VirtualService
|
||||||
vs.Gateways = gateways
|
vs.Gateways = gateways
|
||||||
|
|
||||||
|
// Sort, exact -> prefix -> regex
|
||||||
|
common.SortHTTPRoutes(routes)
|
||||||
|
|
||||||
for _, route := range routes {
|
for _, route := range routes {
|
||||||
vs.Http = append(vs.Http, route.HTTPRoute)
|
vs.Http = append(vs.Http, route.HTTPRoute)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -170,7 +170,14 @@ func SortHTTPRoutes(routes []*WrapperHTTPRoute) {
|
|||||||
|
|
||||||
isAllCatch := func(route *WrapperHTTPRoute) bool {
|
isAllCatch := func(route *WrapperHTTPRoute) bool {
|
||||||
if route.OriginPathType == Prefix && route.OriginPath == "/" {
|
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
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -599,11 +599,6 @@ func (c *controller) ConvertHTTPRoute(convertOptions *common.ConvertOptions, wra
|
|||||||
} else {
|
} else {
|
||||||
convertOptions.HTTPRoutes[rule.Host] = wrapperHttpRoutes
|
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
|
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) {
|
t.Run("Match Routes With same host and path", func(t *testing.T) {
|
||||||
|
|||||||
@@ -102,3 +102,42 @@ spec:
|
|||||||
name: infra-backend-v2
|
name: infra-backend-v2
|
||||||
port:
|
port:
|
||||||
number: 8080
|
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