mirror of https://github.com/containers/podman.git
Merge pull request #8203 from Luap99/fix-8194
Fix dnsname when joining a different network namespace in a pod
This commit is contained in:
commit
5a53c6e5c9
|
|
@ -102,17 +102,7 @@ func (r *Runtime) configureNetNS(ctr *Container, ctrNS ns.NetNS) ([]*cnitypes.Re
|
||||||
requestedMAC = ctr.config.StaticMAC
|
requestedMAC = ctr.config.StaticMAC
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we are in a pod use the pod name for the network, otherwise the container name
|
podName := getCNIPodName(ctr)
|
||||||
var podName string
|
|
||||||
if ctr.PodID() != "" {
|
|
||||||
pod, err := r.GetPod(ctr.PodID())
|
|
||||||
if err == nil {
|
|
||||||
podName = pod.Name()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if podName == "" {
|
|
||||||
podName = ctr.Name()
|
|
||||||
}
|
|
||||||
|
|
||||||
podNetwork := r.getPodNetwork(ctr.ID(), podName, ctrNS.Path(), ctr.config.Networks, ctr.config.PortMappings, requestedIP, requestedMAC)
|
podNetwork := r.getPodNetwork(ctr.ID(), podName, ctrNS.Path(), ctr.config.Networks, ctr.config.PortMappings, requestedIP, requestedMAC)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ func AllocRootlessCNI(ctx context.Context, c *Container) (ns.NetNS, []*cnitypes.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
k8sPodName := getPodOrContainerName(c) // passed to CNI as K8S_POD_NAME
|
k8sPodName := getCNIPodName(c) // passed to CNI as K8S_POD_NAME
|
||||||
cniResults := make([]*cnitypes.Result, len(c.config.Networks))
|
cniResults := make([]*cnitypes.Result, len(c.config.Networks))
|
||||||
for i, nw := range c.config.Networks {
|
for i, nw := range c.config.Networks {
|
||||||
cniRes, err := rootlessCNIInfraCallAlloc(infra, c.ID(), nw, k8sPodName)
|
cniRes, err := rootlessCNIInfraCallAlloc(infra, c.ID(), nw, k8sPodName)
|
||||||
|
|
@ -115,12 +115,16 @@ func getRootlessCNIInfraLock(r *Runtime) (lockfile.Locker, error) {
|
||||||
return lockfile.GetLockfile(fname)
|
return lockfile.GetLockfile(fname)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getPodOrContainerName(c *Container) string {
|
// getCNIPodName return the pod name (hostname) used by CNI and the dnsname plugin.
|
||||||
pod, err := c.runtime.GetPod(c.PodID())
|
// If we are in the pod network namespace use the pod name otherwise the container name
|
||||||
if err != nil || pod.config.Name == "" {
|
func getCNIPodName(c *Container) string {
|
||||||
return c.Name()
|
if c.config.NetMode.IsPod() || c.IsInfra() {
|
||||||
|
pod, err := c.runtime.GetPod(c.PodID())
|
||||||
|
if err == nil {
|
||||||
|
return pod.Name()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return pod.config.Name
|
return c.Name()
|
||||||
}
|
}
|
||||||
|
|
||||||
func rootlessCNIInfraCallAlloc(infra *Container, id, nw, k8sPodName string) (*cnitypes.Result, error) {
|
func rootlessCNIInfraCallAlloc(infra *Container, id, nw, k8sPodName string) (*cnitypes.Result, error) {
|
||||||
|
|
|
||||||
|
|
@ -594,4 +594,39 @@ var _ = Describe("Podman run networking", func() {
|
||||||
Expect(run.ExitCode()).To(BeZero())
|
Expect(run.ExitCode()).To(BeZero())
|
||||||
Expect(strings.Contains(run.OutputToString(), hostname)).To(BeTrue())
|
Expect(strings.Contains(run.OutputToString(), hostname)).To(BeTrue())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("podman run check dnsname plugin", func() {
|
||||||
|
pod := "testpod"
|
||||||
|
session := podmanTest.Podman([]string{"pod", "create", "--name", pod})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(BeZero())
|
||||||
|
|
||||||
|
net := "dnsNetTest"
|
||||||
|
session = podmanTest.Podman([]string{"network", "create", net})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(BeZero())
|
||||||
|
defer podmanTest.removeCNINetwork(net)
|
||||||
|
|
||||||
|
pod2 := "testpod2"
|
||||||
|
session = podmanTest.Podman([]string{"pod", "create", "--network", net, "--name", pod2})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(BeZero())
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{"run", "--name", "con1", "--network", net, ALPINE, "nslookup", "con1"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(BeZero())
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{"run", "--name", "con2", "--pod", pod, "--network", net, ALPINE, "nslookup", "con2"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(BeZero())
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{"run", "--name", "con3", "--pod", pod2, ALPINE, "nslookup", "con3"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(1))
|
||||||
|
Expect(session.ErrorToString()).To(ContainSubstring("can't resolve 'con3'"))
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{"run", "--name", "con4", "--network", net, ALPINE, "nslookup", pod2})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(BeZero())
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue