Merge pull request #5271 from baude/dnsnameuserns

populate resolv.conf with dnsname responses when in usernamespace
This commit is contained in:
OpenShift Merge Robot 2020-02-21 08:55:27 -05:00 committed by GitHub
commit 4f5b40598f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 32 additions and 1 deletions

View File

@ -914,6 +914,7 @@ func (c *Container) checkDependenciesRunning() ([]string, error) {
}
func (c *Container) completeNetworkSetup() error {
var outResolvConf []string
netDisabled, err := c.NetworkDisabled()
if err != nil {
return err
@ -927,7 +928,37 @@ func (c *Container) completeNetworkSetup() error {
if c.config.NetMode == "slirp4netns" {
return c.runtime.setupRootlessNetNS(c)
}
return c.runtime.setupNetNS(c)
if err := c.runtime.setupNetNS(c); err != nil {
return err
}
state := c.state
// collect any dns servers that cni tells us to use (dnsname)
for _, cni := range state.NetworkStatus {
if cni.DNS.Nameservers != nil {
for _, server := range cni.DNS.Nameservers {
outResolvConf = append(outResolvConf, fmt.Sprintf("nameserver %s", server))
}
}
}
// check if we have a bindmount for resolv.conf
resolvBindMount := state.BindMounts["/etc/resolv.conf"]
if len(outResolvConf) < 1 || resolvBindMount == "" || len(c.config.NetNsCtr) > 0 {
return nil
}
// read the existing resolv.conf
b, err := ioutil.ReadFile(resolvBindMount)
if err != nil {
return err
}
for _, line := range strings.Split(string(b), "\n") {
// only keep things that dont start with nameserver from the old
// resolv.conf file
if !strings.HasPrefix(line, "nameserver") {
outResolvConf = append([]string{line}, outResolvConf...)
}
}
// write and return
return ioutil.WriteFile(resolvBindMount, []byte(strings.Join(outResolvConf, "\n")), 0644)
}
// Initialize a container, creating it in the runtime