From ba8ffec559e24096690616c74981baa91a936222 Mon Sep 17 00:00:00 2001 From: Bomin Zhang Date: Mon, 13 Jun 2022 16:55:21 +0800 Subject: [PATCH] fix issue #633 --- pkg/object/ingresscontroller/translator.go | 41 ++++++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/pkg/object/ingresscontroller/translator.go b/pkg/object/ingresscontroller/translator.go index 25f6098d2d..e7d7e6052d 100644 --- a/pkg/object/ingresscontroller/translator.go +++ b/pkg/object/ingresscontroller/translator.go @@ -387,14 +387,41 @@ func (st *specTranslator) translate() error { st.translateIngressRules(b, ingress) } + // sort rules by host + // * precise hosts first(in alphabetical order) + // * wildcard hosts next(in alphabetical order) + // * empty host last + sort.Slice(b.Rules, func(i, j int) bool { + r1, r2 := b.Rules[i], b.Rules[j] + + if r1.Host != "" { + if r2.Host == "" { + return true + } + return r1.Host < r2.Host + } + if r2.Host != "" { + return false + } + + if r1.HostRegexp == "" { + return false + } + if r2.HostRegexp == "" { + return true + } + return r1.HostRegexp < r2.HostRegexp + }) + if p := st.pipelines[defaultPipelineName]; p != nil { - b.Rules = append(b.Rules, &httpserver.Rule{ - Paths: []*httpserver.Path{ - { - Backend: defaultPipelineName, - PathPrefix: "/", - }, - }, + r := b.Rules[len(b.Rules)-1] + if r.Host != "" || r.HostRegexp != "" { + r = &httpserver.Rule{} + b.Rules = append(b.Rules, r) + } + r.Paths = append(r.Paths, &httpserver.Path{ + Backend: defaultPipelineName, + PathPrefix: "/", }) }