From c1890e6cb1365320f2f441a35814d42f3e4271d8 Mon Sep 17 00:00:00 2001 From: Tao Yi Date: Fri, 11 Nov 2022 03:18:41 +0800 Subject: [PATCH] fix(annotations) use "." as header separator (#3155) Co-authored-by: Travis Raines <571832+rainest@users.noreply.github.com> --- CHANGELOG.md | 6 +++++- internal/annotations/annotations.go | 2 +- internal/annotations/annotations_test.go | 4 ++-- internal/dataplane/kongstate/route_test.go | 12 ++++++------ 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 90a614a76d..47623798e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -118,8 +118,12 @@ Adding a new version? You'll need three changes: [#3121](https://github.com/Kong/kubernetes-ingress-controller/pull/3121) - Services support annotations for retries. [#3121](https://github.com/Kong/kubernetes-ingress-controller/pull/3121) -- Routes support annotations for headers. +- Routes support annotations for headers. These use a special + `konghq.com/headers.HEADERNAME` format. For example, adding + `konghq.com/headers.x-example: green` to an Ingress will create routes that + only match requests with an `x-example: green` request header. [#3121](https://github.com/Kong/kubernetes-ingress-controller/pull/3121) + [#3155](https://github.com/Kong/kubernetes-ingress-controller/pull/3155) - Routes support annotations for path handling. [#3121](https://github.com/Kong/kubernetes-ingress-controller/pull/3121) - Warning events are recorded when CA secrets cannot be properly translated into Kong configuration. diff --git a/internal/annotations/annotations.go b/internal/annotations/annotations.go index ec8816a736..5347feee60 100644 --- a/internal/annotations/annotations.go +++ b/internal/annotations/annotations.go @@ -298,7 +298,7 @@ func ExtractRetries(anns map[string]string) (string, bool) { // ExtractHeaders extracts the parsed headers annotations values. It returns a map of header names to slices of values. func ExtractHeaders(anns map[string]string) (map[string][]string, bool) { headers := make(map[string][]string) - prefix := AnnotationPrefix + HeadersKey + "/" + prefix := AnnotationPrefix + HeadersKey + "." for key, val := range anns { if strings.HasPrefix(key, prefix) { header := strings.TrimPrefix(key, prefix) diff --git a/internal/annotations/annotations_test.go b/internal/annotations/annotations_test.go index 19c250ab57..eea793d0b8 100644 --- a/internal/annotations/annotations_test.go +++ b/internal/annotations/annotations_test.go @@ -849,7 +849,7 @@ func TestExtractHeaders(t *testing.T) { name: "non-empty", args: args{ anns: map[string]string{ - "konghq.com/headers/foo": "foo", + "konghq.com/headers.foo": "foo", }, }, want: map[string][]string{"foo": {"foo"}}, @@ -867,7 +867,7 @@ func TestExtractHeaders(t *testing.T) { name: "no header name", args: args{ anns: map[string]string{ - "konghq.com/headers/": "foo", + "konghq.com/headers.": "foo", }, }, want: map[string][]string{}, diff --git a/internal/dataplane/kongstate/route_test.go b/internal/dataplane/kongstate/route_test.go index 5200259765..61dfa57cd9 100644 --- a/internal/dataplane/kongstate/route_test.go +++ b/internal/dataplane/kongstate/route_test.go @@ -1073,7 +1073,7 @@ func TestOverrideHeaders(t *testing.T) { name: "single header single value", args: args{ anns: map[string]string{ - "konghq.com/headers/x-example": "example", + "konghq.com/headers.x-example": "example", }, }, want: Route{ @@ -1086,7 +1086,7 @@ func TestOverrideHeaders(t *testing.T) { name: "single header multi value", args: args{ anns: map[string]string{ - "konghq.com/headers/x-example": "foo,bar", + "konghq.com/headers.x-example": "foo,bar", }, }, want: Route{ @@ -1099,8 +1099,8 @@ func TestOverrideHeaders(t *testing.T) { name: "multi header single value", args: args{ anns: map[string]string{ - "konghq.com/headers/x-foo": "example", - "konghq.com/headers/x-bar": "example", + "konghq.com/headers.x-foo": "example", + "konghq.com/headers.x-bar": "example", }, }, want: Route{ @@ -1116,8 +1116,8 @@ func TestOverrideHeaders(t *testing.T) { name: "multi header multi value", args: args{ anns: map[string]string{ - "konghq.com/headers/x-foo": "foo,bar", - "konghq.com/headers/x-bar": "bar,baz", + "konghq.com/headers.x-foo": "foo,bar", + "konghq.com/headers.x-bar": "bar,baz", }, }, want: Route{