Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[v3.4] backport networking fixes #12269

Merged
merged 2 commits into from
Nov 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cmd/podman/pods/create.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ func create(cmd *cobra.Command, args []string) error {
return fmt.Errorf("cannot specify no-hosts without an infra container")
}
flags := cmd.Flags()
createOptions.Net, err = common.NetFlagsToNetOptions(nil, *flags, false)
createOptions.Net, err = common.NetFlagsToNetOptions(nil, *flags, createOptions.Infra)
if err != nil {
return err
}
Expand All @@ -139,7 +139,7 @@ func create(cmd *cobra.Command, args []string) error {
createOptions.CpusetCpus = infraOptions.CPUSetCPUs
createOptions.Pid = infraOptions.PID
flags := cmd.Flags()
infraOptions.Net, err = common.NetFlagsToNetOptions(nil, *flags, false)
infraOptions.Net, err = common.NetFlagsToNetOptions(nil, *flags, createOptions.Infra)
if err != nil {
return err
}
Expand Down
3 changes: 3 additions & 0 deletions libpod/networking_slirp4netns.go
Original file line number Diff line number Diff line change
Expand Up @@ -629,6 +629,9 @@ func getRootlessPortChildIP(c *Container) string {
// reloadRootlessRLKPortMapping will trigger a reload for the port mappings in the rootlessport process.
// This should only be called by network connect/disconnect and only as rootless.
func (c *Container) reloadRootlessRLKPortMapping() error {
if len(c.config.PortMappings) == 0 {
return nil
}
childIP := getRootlessPortChildIP(c)
logrus.Debugf("reloading rootless ports for container %s, childIP is %s", c.config.ID, childIP)

Expand Down
3 changes: 3 additions & 0 deletions test/e2e/config/containers-netns.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[containers]

netns = "host"
2 changes: 2 additions & 0 deletions test/e2e/network_connect_disconnect_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ var _ = Describe("Podman network connect and disconnect", func() {
dis := podmanTest.Podman([]string{"network", "disconnect", netName, "test"})
dis.WaitWithDefaultTimeout()
Expect(dis).Should(Exit(0))
Expect(dis.ErrorToString()).Should(Equal(""))

inspect := podmanTest.Podman([]string{"container", "inspect", "test", "--format", "{{len .NetworkSettings.Networks}}"})
inspect.WaitWithDefaultTimeout()
Expand Down Expand Up @@ -178,6 +179,7 @@ var _ = Describe("Podman network connect and disconnect", func() {
connect := podmanTest.Podman([]string{"network", "connect", newNetName, "test"})
connect.WaitWithDefaultTimeout()
Expect(connect).Should(Exit(0))
Expect(connect.ErrorToString()).Should(Equal(""))

inspect := podmanTest.Podman([]string{"container", "inspect", "test", "--format", "{{len .NetworkSettings.Networks}}"})
inspect.WaitWithDefaultTimeout()
Expand Down
18 changes: 18 additions & 0 deletions test/e2e/pod_create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -806,4 +806,22 @@ ENTRYPOINT ["sleep","99999"]
Expect(ok).To(BeTrue())
})

It("podman pod create read network mode from config", func() {
confPath, err := filepath.Abs("config/containers-netns.conf")
Expect(err).ToNot(HaveOccurred())
os.Setenv("CONTAINERS_CONF", confPath)
defer os.Unsetenv("CONTAINERS_CONF")
if IsRemote() {
podmanTest.RestartRemoteService()
}

pod := podmanTest.Podman([]string{"pod", "create", "--name", "test", "--infra-name", "test-infra"})
pod.WaitWithDefaultTimeout()
Expect(pod).Should(Exit(0))

inspect := podmanTest.Podman([]string{"inspect", "--format", "{{.HostConfig.NetworkMode}}", "test-infra"})
inspect.WaitWithDefaultTimeout()
Expect(inspect).Should(Exit(0))
Expect(inspect.OutputToString()).Should(Equal("host"))
})
})
9 changes: 9 additions & 0 deletions test/system/500-networking.bats
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,7 @@ load helpers
mac="$output"

run_podman network disconnect $netname $cid
is "$output" "" "Output should be empty (no errors)"

# check that we cannot curl (timeout after 3 sec)
run curl --max-time 3 -s $SERVER/index.txt
Expand All @@ -399,6 +400,7 @@ load helpers
fi

run_podman network connect $netname $cid
is "$output" "" "Output should be empty (no errors)"

# curl should work again
run curl --max-time 3 -s $SERVER/index.txt
Expand All @@ -415,8 +417,15 @@ load helpers
die "MAC address did not change after podman network disconnect/connect"
fi

# Disconnect/reconnect of a container *with no ports* should succeed quietly
run_podman network disconnect $netname $background_cid
is "$output" "" "disconnect of container with no open ports"
run_podman network connect $netname $background_cid
is "$output" "" "(re)connect of container with no open ports"

# connect a second network
run_podman network connect $netname2 $cid
is "$output" "" "Output should be empty (no errors)"

# curl should work
run curl --max-time 3 -s $SERVER/index.txt
Expand Down