Merge pull request #13143 from Luap99/dns

append podman dns search domain
This commit is contained in:
OpenShift Merge Robot
2022-02-04 11:49:11 -05:00
committed by GitHub
2 changed files with 32 additions and 14 deletions

View File

@@ -2099,38 +2099,38 @@ func (c *Container) generateResolvConf() (string, error) {
} }
dnsServers := append(dns, c.config.DNSServer...) dnsServers := append(dns, c.config.DNSServer...)
// If the user provided dns, it trumps all; then dns masq; then resolv.conf // If the user provided dns, it trumps all; then dns masq; then resolv.conf
var search []string
switch { switch {
case len(dnsServers) > 0: case len(dnsServers) > 0:
// We store DNS servers as net.IP, so need to convert to string // We store DNS servers as net.IP, so need to convert to string
for _, server := range dnsServers { for _, server := range dnsServers {
nameservers = append(nameservers, server.String()) nameservers = append(nameservers, server.String())
} }
case len(networkNameServers) > 0:
nameservers = append(nameservers, networkNameServers...)
default: default:
// Make a new resolv.conf // Make a new resolv.conf
nameservers = resolvconf.GetNameservers(resolv.Content) // first add the nameservers from the networks status
// slirp4netns has a built in DNS server. nameservers = append(nameservers, networkNameServers...)
// when we add network dns server we also have to add the search domains
search = networkSearchDomains
// slirp4netns has a built in DNS forwarder.
if c.config.NetMode.IsSlirp4netns() { if c.config.NetMode.IsSlirp4netns() {
slirp4netnsDNS, err := GetSlirp4netnsDNS(c.slirp4netnsSubnet) slirp4netnsDNS, err := GetSlirp4netnsDNS(c.slirp4netnsSubnet)
if err != nil { if err != nil {
logrus.Warn("Failed to determine Slirp4netns DNS: ", err.Error()) logrus.Warn("Failed to determine Slirp4netns DNS: ", err.Error())
} else { } else {
nameservers = append([]string{slirp4netnsDNS.String()}, nameservers...) nameservers = append(nameservers, slirp4netnsDNS.String())
} }
} }
nameservers = append(nameservers, resolvconf.GetNameservers(resolv.Content)...)
} }
var search []string if len(c.config.DNSSearch) > 0 || len(c.runtime.config.Containers.DNSSearches) > 0 {
if len(c.config.DNSSearch) > 0 || len(c.runtime.config.Containers.DNSSearches) > 0 || len(networkSearchDomains) > 0 {
if !util.StringInSlice(".", c.config.DNSSearch) { if !util.StringInSlice(".", c.config.DNSSearch) {
search = c.runtime.config.Containers.DNSSearches search = append(search, c.runtime.config.Containers.DNSSearches...)
search = append(search, c.config.DNSSearch...) search = append(search, c.config.DNSSearch...)
search = append(search, networkSearchDomains...)
} }
} else { } else {
search = resolvconf.GetSearchDomains(resolv.Content) search = append(search, resolvconf.GetSearchDomains(resolv.Content)...)
} }
var options []string var options []string

View File

@@ -609,9 +609,27 @@ load helpers
"8.8.8.8", "8.8.8.8",
] ]
EOF EOF
CONTAINERS_CONF=$containersconf run_podman run --rm $IMAGE grep "example.com" /etc/resolv.conf
CONTAINERS_CONF=$containersconf run_podman run --rm $IMAGE grep $searchIP /etc/resolv.conf local nl="
is "$output" "nameserver $searchIP" "Should only be one $searchIP not multiple" "
CONTAINERS_CONF=$containersconf run_podman run --rm $IMAGE cat /etc/resolv.conf
is "$output" "search example.com$nl.*" "correct seach domain"
is "$output" ".*nameserver 1.1.1.1${nl}nameserver $searchIP${nl}nameserver 1.0.0.1${nl}nameserver 8.8.8.8" "nameserver order is correct"
# create network with dns
local netname=testnet-$(random_string 10)
local subnet=$(random_rfc1918_subnet)
run_podman network create --subnet "$subnet.0/24" $netname
# custom server overwrites the network dns server
CONTAINERS_CONF=$containersconf run_podman run --network $netname --rm $IMAGE cat /etc/resolv.conf
is "$output" "search example.com$nl.*" "correct seach domain"
is "$output" ".*nameserver 1.1.1.1${nl}nameserver $searchIP${nl}nameserver 1.0.0.1${nl}nameserver 8.8.8.8" "nameserver order is correct"
# we should use the integrated dns server
run_podman run --network $netname --rm $IMAGE cat /etc/resolv.conf
is "$output" "search dns.podman.*" "correct seach domain"
is "$output" ".*nameserver $subnet.1.*" "integrated dns nameserver is set"
} }
# vim: filetype=sh # vim: filetype=sh