Skip to content

Commit

Permalink
podman machine: use gvproxy for host.containers.internal
Browse files Browse the repository at this point in the history
Let the gvproxy dns server handle the host.containers.internal entry.
Support for this is already added to gvproxy. [1]

To make sure the container uses the dns response from gvproxy we should
not add host.containers.internal to /etc/hosts in this case.

[NO NEW TESTS NEEDED] podman machine has no tests

Fixes containers#11642

[1] containers/gvisor-tap-vsock@1108ea4

Signed-off-by: Paul Holzinger <[email protected]>
  • Loading branch information
Luap99 committed Dec 6, 2021
1 parent fe44757 commit 4573196
Showing 1 changed file with 27 additions and 23 deletions.
50 changes: 27 additions & 23 deletions libpod/container_internal_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -2022,33 +2022,37 @@ func (c *Container) getHosts() string {
}
}

// Add gateway entry
var depCtr *Container
if c.config.NetNsCtr != "" {
// ignoring the error because there isn't anything to do
depCtr, _ = c.getRootNetNsDepCtr()
} else if len(c.state.NetworkStatus) != 0 {
depCtr = c
} else {
depCtr = nil
}
// Add gateway entry if we are not in a machine. If we use podman machine
// the gvproxy dns server will take care of host.containers.internal.
// https://github.com/containers/gvisor-tap-vsock/commit/1108ea45162281046d239047a6db9bc187e64b08
if !c.runtime.config.Engine.MachineEnabled {
var depCtr *Container
if c.config.NetNsCtr != "" {
// ignoring the error because there isn't anything to do
depCtr, _ = c.getRootNetNsDepCtr()
} else if len(c.state.NetworkStatus) != 0 {
depCtr = c
} else {
depCtr = nil
}

if depCtr != nil {
for _, pluginResultsRaw := range depCtr.state.NetworkStatus {
pluginResult, _ := cnitypes.GetResult(pluginResultsRaw)
for _, ip := range pluginResult.IPs {
hosts += fmt.Sprintf("%s host.containers.internal\n", ip.Gateway)
if depCtr != nil {
for _, pluginResultsRaw := range depCtr.state.NetworkStatus {
pluginResult, _ := cnitypes.GetResult(pluginResultsRaw)
for _, ip := range pluginResult.IPs {
hosts += fmt.Sprintf("%s host.containers.internal\n", ip.Gateway)
}
}
} else if c.config.NetMode.IsSlirp4netns() {
gatewayIP, err := GetSlirp4netnsGateway(c.slirp4netnsSubnet)
if err != nil {
logrus.Warn("failed to determine gatewayIP: ", err.Error())
} else {
hosts += fmt.Sprintf("%s host.containers.internal\n", gatewayIP.String())
}
}
} else if c.config.NetMode.IsSlirp4netns() {
gatewayIP, err := GetSlirp4netnsGateway(c.slirp4netnsSubnet)
if err != nil {
logrus.Warn("failed to determine gatewayIP: ", err.Error())
} else {
hosts += fmt.Sprintf("%s host.containers.internal\n", gatewayIP.String())
logrus.Debug("network configuration does not support host.containers.internal address")
}
} else {
logrus.Debug("network configuration does not support host.containers.internal address")
}

return hosts
Expand Down

0 comments on commit 4573196

Please sign in to comment.