From 4edd92f26d812c2bc7b7442e6a553ca3f60a4a8e Mon Sep 17 00:00:00 2001 From: Ricky Pai Date: Mon, 14 Aug 2017 14:44:21 -0700 Subject: [PATCH] add HostAlias support for HostNetwork pods --- pkg/kubelet/kubelet_pods.go | 11 +++- pkg/kubelet/kubelet_pods_test.go | 94 ++++++++++++++++++++++++++++++-- 2 files changed, 97 insertions(+), 8 deletions(-) diff --git a/pkg/kubelet/kubelet_pods.go b/pkg/kubelet/kubelet_pods.go index 34847d84883..11a65313a66 100644 --- a/pkg/kubelet/kubelet_pods.go +++ b/pkg/kubelet/kubelet_pods.go @@ -233,7 +233,7 @@ func ensureHostsFile(fileName, hostIP, hostName, hostDomainName string, hostAlia // if Pod is using host network, read hosts file from the node's filesystem. // `etcHostsPath` references the location of the hosts file on the node. // `/etc/hosts` for *nix systems. - hostsFileContent, err = nodeHostsFileContent(etcHostsPath) + hostsFileContent, err = nodeHostsFileContent(etcHostsPath, hostAliases) if err != nil { return err } @@ -246,8 +246,13 @@ func ensureHostsFile(fileName, hostIP, hostName, hostDomainName string, hostAlia } // nodeHostsFileContent reads the content of node's hosts file. -func nodeHostsFileContent(hostsFilePath string) ([]byte, error) { - return ioutil.ReadFile(hostsFilePath) +func nodeHostsFileContent(hostsFilePath string, hostAliases []v1.HostAlias) ([]byte, error) { + hostsFileContent, err := ioutil.ReadFile(hostsFilePath) + if err != nil { + return nil, err + } + hostsFileContent = append(hostsFileContent, hostsEntriesFromHostAliases(hostAliases)...) + return hostsFileContent, nil } // managedHostsFileContent generates the content of the managed etc hosts based on Pod IP and other diff --git a/pkg/kubelet/kubelet_pods_test.go b/pkg/kubelet/kubelet_pods_test.go index 83a48fde143..413f266b84c 100644 --- a/pkg/kubelet/kubelet_pods_test.go +++ b/pkg/kubelet/kubelet_pods_test.go @@ -184,11 +184,23 @@ func TestMakeMounts(t *testing.T) { func TestNodeHostsFileContent(t *testing.T) { testCases := []struct { - hostsFileName string - expectedContent string + hostsFileName string + hostAliases []v1.HostAlias + rawHostsFileContent string + expectedHostsFileContent string }{ { "hosts_test_file1", + []v1.HostAlias{}, + `# hosts file for testing. +127.0.0.1 localhost +::1 localhost ip6-localhost ip6-loopback +fe00::0 ip6-localnet +fe00::0 ip6-mcastprefix +fe00::1 ip6-allnodes +fe00::2 ip6-allrouters +123.45.67.89 some.domain +`, `# hosts file for testing. 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback @@ -201,6 +213,16 @@ fe00::2 ip6-allrouters }, { "hosts_test_file2", + []v1.HostAlias{}, + `# another hosts file for testing. +127.0.0.1 localhost +::1 localhost ip6-localhost ip6-loopback +fe00::0 ip6-localnet +fe00::0 ip6-mcastprefix +fe00::1 ip6-allnodes +fe00::2 ip6-allrouters +12.34.56.78 another.domain +`, `# another hosts file for testing. 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback @@ -209,18 +231,80 @@ fe00::0 ip6-mcastprefix fe00::1 ip6-allnodes fe00::2 ip6-allrouters 12.34.56.78 another.domain +`, + }, + { + "hosts_test_file1_with_host_aliases", + []v1.HostAlias{ + {IP: "123.45.67.89", Hostnames: []string{"foo", "bar", "baz"}}, + }, + `# hosts file for testing. +127.0.0.1 localhost +::1 localhost ip6-localhost ip6-loopback +fe00::0 ip6-localnet +fe00::0 ip6-mcastprefix +fe00::1 ip6-allnodes +fe00::2 ip6-allrouters +123.45.67.89 some.domain +`, + `# hosts file for testing. +127.0.0.1 localhost +::1 localhost ip6-localhost ip6-loopback +fe00::0 ip6-localnet +fe00::0 ip6-mcastprefix +fe00::1 ip6-allnodes +fe00::2 ip6-allrouters +123.45.67.89 some.domain + +# Entries added by HostAliases. +123.45.67.89 foo +123.45.67.89 bar +123.45.67.89 baz +`, + }, + { + "hosts_test_file2_with_host_aliases", + []v1.HostAlias{ + {IP: "123.45.67.89", Hostnames: []string{"foo", "bar", "baz"}}, + {IP: "456.78.90.123", Hostnames: []string{"park", "doo", "boo"}}, + }, + `# another hosts file for testing. +127.0.0.1 localhost +::1 localhost ip6-localhost ip6-loopback +fe00::0 ip6-localnet +fe00::0 ip6-mcastprefix +fe00::1 ip6-allnodes +fe00::2 ip6-allrouters +12.34.56.78 another.domain +`, + `# another hosts file for testing. +127.0.0.1 localhost +::1 localhost ip6-localhost ip6-loopback +fe00::0 ip6-localnet +fe00::0 ip6-mcastprefix +fe00::1 ip6-allnodes +fe00::2 ip6-allrouters +12.34.56.78 another.domain + +# Entries added by HostAliases. +123.45.67.89 foo +123.45.67.89 bar +123.45.67.89 baz +456.78.90.123 park +456.78.90.123 doo +456.78.90.123 boo `, }, } for _, testCase := range testCases { - tmpdir, err := writeHostsFile(testCase.hostsFileName, testCase.expectedContent) + tmpdir, err := writeHostsFile(testCase.hostsFileName, testCase.rawHostsFileContent) require.NoError(t, err, "could not create a temp hosts file") defer os.RemoveAll(tmpdir) - actualContent, fileReadErr := nodeHostsFileContent(filepath.Join(tmpdir, testCase.hostsFileName)) + actualContent, fileReadErr := nodeHostsFileContent(filepath.Join(tmpdir, testCase.hostsFileName), testCase.hostAliases) require.NoError(t, fileReadErr, "could not create read hosts file") - assert.Equal(t, testCase.expectedContent, string(actualContent), "hosts file content not expected") + assert.Equal(t, testCase.expectedHostsFileContent, string(actualContent), "hosts file content not expected") } }