Fix mirror-target values without path separator and port (#9889)

* Remove variables with $ before feeding into url.Parse

Signed-off-by: Gerald Pape <gerald@giantswarm.io>

* Do not render invalid request mirroring config

Signed-off-by: Gerald Pape <gerald@giantswarm.io>

* Remove additional note from docs again

Signed-off-by: Gerald Pape <gerald@giantswarm.io>

* Include quotes in e2e test for mirror proxy_pass

---------

Signed-off-by: Gerald Pape <gerald@giantswarm.io>
This commit is contained in:
Gerald Pape 2023-06-11 20:59:47 +02:00 committed by GitHub
parent 4d3e64258c
commit db49b9da6f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 26 additions and 7 deletions

View file

@ -93,12 +93,13 @@ func (a mirror) Parse(ing *networking.Ingress) (interface{}, error) {
config.Host, err = parser.GetStringAnnotation("mirror-host", ing) config.Host, err = parser.GetStringAnnotation("mirror-host", ing)
if err != nil { if err != nil {
if config.Target != "" { if config.Target != "" {
url, err := parser.StringToURL(config.Target) target := strings.Split(config.Target, "$")
url, err := parser.StringToURL(target[0])
if err != nil { if err != nil {
config.Host = "" config.Host = ""
} else { } else {
hostname := strings.Split(url.Hostname(), "$") config.Host = url.Hostname()
config.Host = hostname[0]
} }
} }
} }

View file

@ -48,6 +48,24 @@ func TestParse(t *testing.T) {
Target: "https://test.env.com/$request_uri", Target: "https://test.env.com/$request_uri",
Host: "test.env.com", Host: "test.env.com",
}}, }},
{map[string]string{backendURL: "https://test.env.com$request_uri"}, &Config{
Source: ngxURI,
RequestBody: "on",
Target: "https://test.env.com$request_uri",
Host: "test.env.com",
}},
{map[string]string{backendURL: "https://test.env.com:8080$request_uri"}, &Config{
Source: ngxURI,
RequestBody: "on",
Target: "https://test.env.com:8080$request_uri",
Host: "test.env.com",
}},
{map[string]string{backendURL: "https://test.env.com:8080/$request_uri"}, &Config{
Source: ngxURI,
RequestBody: "on",
Target: "https://test.env.com:8080/$request_uri",
Host: "test.env.com",
}},
{map[string]string{requestBody: "off"}, &Config{ {map[string]string{requestBody: "off"}, &Config{
Source: "", Source: "",
RequestBody: "off", RequestBody: "off",

View file

@ -1727,7 +1727,7 @@ func buildMirrorLocations(locs []*ingress.Location) string {
mapped := sets.Set[string]{} mapped := sets.Set[string]{}
for _, loc := range locs { for _, loc := range locs {
if loc.Mirror.Source == "" || loc.Mirror.Target == "" { if loc.Mirror.Source == "" || loc.Mirror.Target == "" || loc.Mirror.Host == "" {
continue continue
} }
@ -1738,8 +1738,8 @@ func buildMirrorLocations(locs []*ingress.Location) string {
mapped.Insert(loc.Mirror.Source) mapped.Insert(loc.Mirror.Source)
buffer.WriteString(fmt.Sprintf(`location = %v { buffer.WriteString(fmt.Sprintf(`location = %v {
internal; internal;
proxy_set_header Host %v; proxy_set_header Host "%v";
proxy_pass %v; proxy_pass "%v";
} }
`, loc.Mirror.Source, loc.Mirror.Host, loc.Mirror.Target)) `, loc.Mirror.Source, loc.Mirror.Host, loc.Mirror.Target))

View file

@ -60,7 +60,7 @@ var _ = framework.DescribeAnnotation("mirror-*", func() {
func(server string) bool { func(server string) bool {
return strings.Contains(server, fmt.Sprintf("mirror /_mirror-%v;", ing.UID)) && return strings.Contains(server, fmt.Sprintf("mirror /_mirror-%v;", ing.UID)) &&
strings.Contains(server, "mirror_request_body on;") && strings.Contains(server, "mirror_request_body on;") &&
strings.Contains(server, "proxy_pass https://test.env.com/$request_uri;") strings.Contains(server, `proxy_pass "https://test.env.com/$request_uri";`)
}) })
}) })