From a215a88d919047360a84d62aae27eb184752bba2 Mon Sep 17 00:00:00 2001 From: Fernando Crespo Gravalos Date: Tue, 24 Sep 2019 16:30:22 +0200 Subject: [PATCH 1/4] remove trailing dots from the parsed searches from host resolv.conf --- pkg/kubelet/network/dns/dns.go | 6 +++++- pkg/kubelet/network/dns/dns_test.go | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pkg/kubelet/network/dns/dns.go b/pkg/kubelet/network/dns/dns.go index b329b848700..476b7b02781 100644 --- a/pkg/kubelet/network/dns/dns.go +++ b/pkg/kubelet/network/dns/dns.go @@ -230,7 +230,11 @@ func parseResolvConf(reader io.Reader) (nameservers []string, searches []string, } } if fields[0] == "search" { - searches = fields[1:] + trimTrailingDot := []string{} + for _, s := range fields[1:] { + trimTrailingDot = append(trimTrailingDot, strings.TrimSuffix(s, ".")) + } + searches = trimTrailingDot } if fields[0] == "options" { options = fields[1:] diff --git a/pkg/kubelet/network/dns/dns_test.go b/pkg/kubelet/network/dns/dns_test.go index 5cbf6a8b1ab..de4bf620041 100644 --- a/pkg/kubelet/network/dns/dns_test.go +++ b/pkg/kubelet/network/dns/dns_test.go @@ -74,6 +74,7 @@ func TestParseResolvConf(t *testing.T) { {"search ", []string{}, []string{}, []string{}, false}, // search empty {"search foo", []string{}, []string{"foo"}, []string{}, false}, {"search foo bar", []string{}, []string{"foo", "bar"}, []string{}, false}, + {"search foo. bar", []string{}, []string{"foo", "bar"}, []string{}, false}, {"search foo bar bat\n", []string{}, []string{"foo", "bar", "bat"}, []string{}, false}, {"search foo\nsearch bar", []string{}, []string{"bar"}, []string{}, false}, {"nameserver 1.2.3.4\nsearch foo bar", []string{"1.2.3.4"}, []string{"foo", "bar"}, []string{}, false}, From 0b850c5d82389fff3cf241127c9bd80bb03198f6 Mon Sep 17 00:00:00 2001 From: Fernando Crespo Gravalos Date: Thu, 26 Sep 2019 10:04:01 +0200 Subject: [PATCH 2/4] add comment explaining why we remove trailing dots in searches --- pkg/kubelet/network/dns/dns.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/kubelet/network/dns/dns.go b/pkg/kubelet/network/dns/dns.go index 476b7b02781..65f5911a35d 100644 --- a/pkg/kubelet/network/dns/dns.go +++ b/pkg/kubelet/network/dns/dns.go @@ -230,6 +230,7 @@ func parseResolvConf(reader io.Reader) (nameservers []string, searches []string, } } if fields[0] == "search" { + // Strip redundant trailing dot to avoid hitting search validation limits. trimTrailingDot := []string{} for _, s := range fields[1:] { trimTrailingDot = append(trimTrailingDot, strings.TrimSuffix(s, ".")) From 9dac0c2d026dade99ae9b6b684047648cb1d887b Mon Sep 17 00:00:00 2001 From: Fernando Crespo Gravalos Date: Fri, 4 Oct 2019 11:37:48 +0200 Subject: [PATCH 3/4] improve explanatory comment about trailing dots in searches --- pkg/kubelet/network/dns/dns.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/kubelet/network/dns/dns.go b/pkg/kubelet/network/dns/dns.go index 65f5911a35d..4afebc2152c 100644 --- a/pkg/kubelet/network/dns/dns.go +++ b/pkg/kubelet/network/dns/dns.go @@ -230,7 +230,7 @@ func parseResolvConf(reader io.Reader) (nameservers []string, searches []string, } } if fields[0] == "search" { - // Strip redundant trailing dot to avoid hitting search validation limits. + // Normalise search fields so the same domain with and without trailing dot will only count once, to avoid hitting search validation limits. trimTrailingDot := []string{} for _, s := range fields[1:] { trimTrailingDot = append(trimTrailingDot, strings.TrimSuffix(s, ".")) From c959b5ef8a81fdd2f8490245cc69613bc34b61dd Mon Sep 17 00:00:00 2001 From: Fernando Crespo Gravalos Date: Fri, 4 Oct 2019 12:19:08 +0200 Subject: [PATCH 4/4] don't add extra variable for searches --- pkg/kubelet/network/dns/dns.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkg/kubelet/network/dns/dns.go b/pkg/kubelet/network/dns/dns.go index 4afebc2152c..f09b6f111d7 100644 --- a/pkg/kubelet/network/dns/dns.go +++ b/pkg/kubelet/network/dns/dns.go @@ -231,11 +231,10 @@ func parseResolvConf(reader io.Reader) (nameservers []string, searches []string, } if fields[0] == "search" { // Normalise search fields so the same domain with and without trailing dot will only count once, to avoid hitting search validation limits. - trimTrailingDot := []string{} + searches = []string{} for _, s := range fields[1:] { - trimTrailingDot = append(trimTrailingDot, strings.TrimSuffix(s, ".")) + searches = append(searches, strings.TrimSuffix(s, ".")) } - searches = trimTrailingDot } if fields[0] == "options" { options = fields[1:]