mirror of https://github.com/containers/podman.git
Remove Kubernetes hostport support
This can now be handled by CNI plugins, so let them manage ports instead. Signed-off-by: Matthew Heon <matthew.heon@gmail.com> Closes: #189 Approved by: mheon
This commit is contained in:
parent
c246b9d24f
commit
5c5c024e80
|
|
@ -1,15 +1,10 @@
|
||||||
package libpod
|
package libpod
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/containernetworking/plugins/pkg/ns"
|
"github.com/containernetworking/plugins/pkg/ns"
|
||||||
"github.com/cri-o/ocicni/pkg/ocicni"
|
"github.com/cri-o/ocicni/pkg/ocicni"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
|
||||||
"k8s.io/kubernetes/pkg/kubelet/network/hostport"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Get an OCICNI network config
|
// 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
|
// Create and configure a new network namespace for a container
|
||||||
func (r *Runtime) createNetNS(ctr *Container) (err error) {
|
func (r *Runtime) createNetNS(ctr *Container) (err error) {
|
||||||
ctrNS, err := ns.NewNS()
|
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())
|
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
|
ctr.state.NetNS = ctrNS
|
||||||
|
|
||||||
return nil
|
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())
|
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)
|
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
|
// The network may have already been torn down, so don't fail here, just log
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@ import (
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"github.com/ulule/deepcopier"
|
"github.com/ulule/deepcopier"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/network/hostport"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// A RuntimeOption is a functional option which alters the Runtime created by
|
// A RuntimeOption is a functional option which alters the Runtime created by
|
||||||
|
|
@ -29,7 +28,6 @@ type Runtime struct {
|
||||||
ociRuntime *OCIRuntime
|
ociRuntime *OCIRuntime
|
||||||
lockDir string
|
lockDir string
|
||||||
netPlugin ocicni.CNIPlugin
|
netPlugin ocicni.CNIPlugin
|
||||||
hostportManager hostport.HostPortManager
|
|
||||||
valid bool
|
valid bool
|
||||||
lock sync.RWMutex
|
lock sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
@ -181,9 +179,6 @@ func NewRuntime(options ...RuntimeOption) (runtime *Runtime, err error) {
|
||||||
}
|
}
|
||||||
runtime.netPlugin = netPlugin
|
runtime.netPlugin = netPlugin
|
||||||
|
|
||||||
// Set up the hostport manager
|
|
||||||
runtime.hostportManager = hostport.NewHostportManager()
|
|
||||||
|
|
||||||
// Set up the state
|
// Set up the state
|
||||||
if runtime.config.InMemoryState {
|
if runtime.config.InMemoryState {
|
||||||
state, err := NewInMemoryState()
|
state, err := NewInMemoryState()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue