diff --git a/internal/ingress/controller/template/template.go b/internal/ingress/controller/template/template.go index f4e990229..83facd3aa 100644 --- a/internal/ingress/controller/template/template.go +++ b/internal/ingress/controller/template/template.go @@ -880,7 +880,12 @@ func getIngressInformation(i, h, p interface{}) *ingressInformation { continue } - if hostname != rule.Host { + host := "_" + if rule.Host != "" { + host = rule.Host + } + + if hostname != host { continue } diff --git a/test/e2e/ingress/without_host.go b/test/e2e/ingress/without_host.go new file mode 100644 index 000000000..027866044 --- /dev/null +++ b/test/e2e/ingress/without_host.go @@ -0,0 +1,52 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package ingress + +import ( + "fmt" + "net/http" + "strings" + + "github.com/onsi/ginkgo" + + "k8s.io/ingress-nginx/test/e2e/framework" +) + +var _ = framework.IngressNginxDescribe("[Ingress] definition without host", func() { + f := framework.NewDefaultFramework("ingress-without-host") + + ginkgo.It("should set ingress details variables for ingresses without a host", func() { + f.NewEchoDeployment() + + ing := framework.NewSingleIngress("default-host", "/", "", f.Namespace, framework.EchoService, 80, nil) + f.EnsureIngress(ing) + + f.WaitForNginxServer("_", + func(server string) bool { + return strings.Contains(server, fmt.Sprintf(`set $namespace "%v";`, f.Namespace)) && + strings.Contains(server, fmt.Sprintf(`set $ingress_name "%v";`, ing.Name)) && + strings.Contains(server, fmt.Sprintf(`set $service_name "%v";`, framework.EchoService)) && + strings.Contains(server, `set $service_port "80";`) && + strings.Contains(server, `set $location_path "/";`) + }) + + f.HTTPTestClient(). + GET("/"). + Expect(). + Status(http.StatusOK) + }) +})