diff --git a/internal/ingress/controller/controller.go b/internal/ingress/controller/controller.go index 20d5ef0ea..bd10ab57a 100644 --- a/internal/ingress/controller/controller.go +++ b/internal/ingress/controller/controller.go @@ -651,6 +651,15 @@ func (n *NGINXController) getBackendServers(ingresses []*ingress.Ingress) ([]*in locs[host] = []string{} } locs[host] = append(locs[host], path.Path) + + if len(server.Aliases) > 0 { + for _, alias := range server.Aliases { + if _, ok := locs[alias]; !ok { + locs[alias] = []string{} + } + locs[alias] = append(locs[alias], path.Path) + } + } } } } diff --git a/test/e2e/annotations/affinity.go b/test/e2e/annotations/affinity.go index b42b0c4d4..ecc313c8e 100644 --- a/test/e2e/annotations/affinity.go +++ b/test/e2e/annotations/affinity.go @@ -311,4 +311,45 @@ var _ = framework.DescribeAnnotation("affinity session-cookie-name", func() { Status(http.StatusOK). Header("Set-Cookie").Contains("SERVERID=") }) + + ginkgo.It("should work with server-alias annotation", func() { + host := "foo.com" + alias1 := "a1.foo.com" + alias2 := "a2.foo.com" + annotations := make(map[string]string) + annotations["nginx.ingress.kubernetes.io/affinity"] = "cookie" + annotations["nginx.ingress.kubernetes.io/session-cookie-name"] = "SERVERID" + annotations["nginx.ingress.kubernetes.io/server-alias"] = fmt.Sprintf("%s,%s", alias1, alias2) + + ing := framework.NewSingleIngress(host, "/bar", host, f.Namespace, framework.EchoService, 80, annotations) + f.EnsureIngress(ing) + + f.WaitForNginxServer(host, + func(server string) bool { + //server alias sort by sort.Strings(), see: internal/ingress/annotations/alias/main.go:60 + return strings.Contains(server, fmt.Sprintf("server_name %s %s %s ;", host, alias1, alias2)) + }) + + f.HTTPTestClient(). + GET("/bar"). + WithHeader("Host", host). + Expect(). + Status(http.StatusOK). + Header("Set-Cookie").Contains("SERVERID=") + + f.HTTPTestClient(). + GET("/bar"). + WithHeader("Host", alias1). + Expect(). + Status(http.StatusOK). + Header("Set-Cookie").Contains("SERVERID=") + + f.HTTPTestClient(). + GET("/bar"). + WithHeader("Host", alias2). + Expect(). + Status(http.StatusOK). + Header("Set-Cookie").Contains("SERVERID=") + }) + })