From 5c5c024e80a9c78e94f8d3d7d13755b27dd9a8bf Mon Sep 17 00:00:00 2001 From: Matthew Heon Date: Thu, 4 Jan 2018 16:55:08 -0500 Subject: [PATCH] Remove Kubernetes hostport support This can now be handled by CNI plugins, so let them manage ports instead. Signed-off-by: Matthew Heon Closes: #189 Approved by: mheon --- libpod/networking.go | 74 -------------------------------------------- libpod/runtime.go | 5 --- 2 files changed, 79 deletions(-) diff --git a/libpod/networking.go b/libpod/networking.go index 966b40238b..1d61fbc6c7 100644 --- a/libpod/networking.go +++ b/libpod/networking.go @@ -1,15 +1,10 @@ package libpod import ( - "net" - "strings" - "github.com/containernetworking/plugins/pkg/ns" "github.com/cri-o/ocicni/pkg/ocicni" "github.com/pkg/errors" "github.com/sirupsen/logrus" - "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/kubelet/network/hostport" ) // Get an OCICNI network config @@ -23,32 +18,6 @@ func getPodNetwork(id, name, nsPath string, ports []ocicni.PortMapping) ocicni.P } } -// Convert port mapping struct from OCICNI version to one Kubernetes understands -func portMappingToHostport(mappings []ocicni.PortMapping) ([]*hostport.PortMapping, error) { - newMappings := make([]*hostport.PortMapping, len(mappings)) - for _, port := range mappings { - var protocol v1.Protocol - switch strings.ToLower(port.Protocol) { - case "udp": - protocol = v1.ProtocolUDP - case "tcp": - protocol = v1.ProtocolTCP - default: - return nil, errors.Wrapf(ErrInvalidArg, "protocol must be TCP or UDP, instead got %s", port.Protocol) - } - - newPort := new(hostport.PortMapping) - newPort.Name = "" - newPort.HostPort = port.HostPort - newPort.ContainerPort = port.ContainerPort - newPort.Protocol = protocol - newPort.HostIP = port.HostIP - - newMappings = append(newMappings, newPort) - } - return newMappings, nil -} - // Create and configure a new network namespace for a container func (r *Runtime) createNetNS(ctr *Container) (err error) { ctrNS, err := ns.NewNS() @@ -71,33 +40,6 @@ func (r *Runtime) createNetNS(ctr *Container) (err error) { return errors.Wrapf(err, "error configuring network namespace for container %s", ctr.ID()) } - if len(ctr.config.PortMappings) != 0 { - ip, err := r.netPlugin.GetPodNetworkStatus(podNetwork) - if err != nil { - return errors.Wrapf(err, "failed to get status of network for container %s", ctr.ID()) - } - - ip4 := net.ParseIP(ip).To4() - if ip4 == nil { - return errors.Wrapf(err, "failed to parse IPv4 address for container %s", ctr.ID()) - } - - portMappings, err := portMappingToHostport(ctr.config.PortMappings) - if err != nil { - return errors.Wrapf(err, "failed to generate port ammpings for container %s", ctr.ID()) - } - - err = r.hostportManager.Add(ctr.ID(), &hostport.PodPortMapping{ - Name: ctr.Name(), - PortMappings: portMappings, - IP: ip4, - HostNetwork: false, - }, "lo") - if err != nil { - return errors.Wrapf(err, "failed to add port mappings for container %s", ctr.ID()) - } - } - ctr.state.NetNS = ctrNS return nil @@ -143,22 +85,6 @@ func (r *Runtime) teardownNetNS(ctr *Container) error { logrus.Debugf("Tearing down network namespace at %s for container %s", ctr.state.NetNS.Path(), ctr.ID()) - portMappings, err := portMappingToHostport(ctr.config.PortMappings) - if err != nil { - logrus.Errorf("Failed to generate port mappings for container %s: %v", ctr.ID(), err) - } else { - // Only attempt to remove hostport mappings if we successfully - // converted to hostport-style mappings - err := r.hostportManager.Remove(ctr.ID(), &hostport.PodPortMapping{ - Name: ctr.Name(), - PortMappings: portMappings, - HostNetwork: false, - }) - if err != nil { - logrus.Errorf("Failed to tear down port mappings for container %s: %v", ctr.ID(), err) - } - } - podNetwork := getPodNetwork(ctr.ID(), ctr.Name(), ctr.state.NetNS.Path(), ctr.config.PortMappings) // The network may have already been torn down, so don't fail here, just log diff --git a/libpod/runtime.go b/libpod/runtime.go index cb1e8f5315..2a659a1e30 100644 --- a/libpod/runtime.go +++ b/libpod/runtime.go @@ -12,7 +12,6 @@ import ( "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/ulule/deepcopier" - "k8s.io/kubernetes/pkg/kubelet/network/hostport" ) // A RuntimeOption is a functional option which alters the Runtime created by @@ -29,7 +28,6 @@ type Runtime struct { ociRuntime *OCIRuntime lockDir string netPlugin ocicni.CNIPlugin - hostportManager hostport.HostPortManager valid bool lock sync.RWMutex } @@ -181,9 +179,6 @@ func NewRuntime(options ...RuntimeOption) (runtime *Runtime, err error) { } runtime.netPlugin = netPlugin - // Set up the hostport manager - runtime.hostportManager = hostport.NewHostportManager() - // Set up the state if runtime.config.InMemoryState { state, err := NewInMemoryState()