Skip to content

Commit

Permalink
Merge pull request #16463 from dcbw/sdn-crio-hostports
Browse files Browse the repository at this point in the history
Automatic merge from submit-queue

sdn: disable hostports when CRI-O is used

For now...

@openshift/networking @knobunc @rajatchopra
  • Loading branch information
openshift-merge-robot committed Sep 26, 2017
2 parents 899d4c9 + 59b2b62 commit 4be6729
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 9 deletions.
8 changes: 8 additions & 0 deletions pkg/cmd/server/kubernetes/network/sdn_linux.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package network

import (
"strings"

"k8s.io/kubernetes/pkg/apis/componentconfig"
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
kinternalinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
Expand All @@ -22,6 +24,11 @@ func NewSDNInterfaces(options configapi.NodeConfig, networkClient networkclient.
}
}

// dockershim + kube CNI driver delegates hostport handling to plugins,
// while CRI-O handles hostports itself. Thus we need to disable the
// SDN's hostport handling when run under CRI-O.
enableHostports := !strings.Contains(runtimeEndpoint, "crio")

node, err := sdnnode.New(&sdnnode.OsdnNodeConfig{
PluginName: options.NetworkConfig.NetworkPluginName,
Hostname: options.NodeName,
Expand All @@ -33,6 +40,7 @@ func NewSDNInterfaces(options configapi.NodeConfig, networkClient networkclient.
KubeInformers: internalKubeInformers,
IPTablesSyncPeriod: proxyconfig.IPTables.SyncPeriod.Duration,
ProxyMode: proxyconfig.Mode,
EnableHostports: enableHostports,
})
if err != nil {
return nil, nil, err
Expand Down
3 changes: 2 additions & 1 deletion pkg/network/node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ type OsdnNodeConfig struct {
SelfIP string
RuntimeEndpoint string
MTU uint32
EnableHostports bool

NetworkClient networkclient.Interface
KClient kclientset.Interface
Expand Down Expand Up @@ -178,7 +179,7 @@ func New(c *OsdnNodeConfig) (network.NodeInterface, error) {
kClient: c.KClient,
networkClient: c.NetworkClient,
oc: oc,
podManager: newPodManager(c.KClient, policy, c.MTU, oc),
podManager: newPodManager(c.KClient, policy, c.MTU, oc, c.EnableHostports),
localIP: c.SelfIP,
hostName: c.Hostname,
useConnTrack: useConnTrack,
Expand Down
27 changes: 19 additions & 8 deletions pkg/network/node/pod.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,20 +69,23 @@ type podManager struct {
mtu uint32
ovs *ovsController

enableHostports bool

// Things only accessed through the processCNIRequests() goroutine
// and thus can be set from Start()
ipamConfig []byte
hostportSyncer kubehostport.HostportSyncer
}

// Creates a new live podManager; used by node code0
func newPodManager(kClient kclientset.Interface, policy osdnPolicy, mtu uint32, ovs *ovsController) *podManager {
func newPodManager(kClient kclientset.Interface, policy osdnPolicy, mtu uint32, ovs *ovsController, enableHostports bool) *podManager {
pm := newDefaultPodManager()
pm.kClient = kClient
pm.policy = policy
pm.mtu = mtu
pm.podHandler = pm
pm.ovs = ovs
pm.enableHostports = enableHostports
return pm
}

Expand Down Expand Up @@ -152,7 +155,9 @@ func getIPAMConfig(clusterNetwork *net.IPNet, localSubnet string) ([]byte, error

// Start the CNI server and start processing requests from it
func (m *podManager) Start(socketPath string, localSubnetCIDR string, clusterNetwork *net.IPNet) error {
m.hostportSyncer = kubehostport.NewHostportSyncer()
if m.enableHostports {
m.hostportSyncer = kubehostport.NewHostportSyncer()
}

var err error
if m.ipamConfig, err = getIPAMConfig(clusterNetwork, localSubnetCIDR); err != nil {
Expand Down Expand Up @@ -501,8 +506,10 @@ func (m *podManager) setup(req *cniserver.PodRequest) (cnitypes.Result, *running
defer func() {
if !success {
m.ipamDel(req.SandboxID)
if err := m.hostportSyncer.SyncHostports(Tun0, m.getRunningPods()); err != nil {
glog.Warningf("failed syncing hostports: %v", err)
if m.hostportSyncer != nil {
if err := m.hostportSyncer.SyncHostports(Tun0, m.getRunningPods()); err != nil {
glog.Warningf("failed syncing hostports: %v", err)
}
}
}
}()
Expand All @@ -513,8 +520,10 @@ func (m *podManager) setup(req *cniserver.PodRequest) (cnitypes.Result, *running
return nil, nil, err
}
podPortMapping := kubehostport.ConstructPodPortMapping(&v1Pod, podIP)
if err := m.hostportSyncer.OpenPodHostportsAndSync(podPortMapping, Tun0, m.getRunningPods()); err != nil {
return nil, nil, err
if m.hostportSyncer != nil {
if err := m.hostportSyncer.OpenPodHostportsAndSync(podPortMapping, Tun0, m.getRunningPods()); err != nil {
return nil, nil, err
}
}

var hostVethName, contVethMac string
Expand Down Expand Up @@ -633,8 +642,10 @@ func (m *podManager) teardown(req *cniserver.PodRequest) error {
errList = append(errList, err)
}

if err := m.hostportSyncer.SyncHostports(Tun0, m.getRunningPods()); err != nil {
errList = append(errList, err)
if m.hostportSyncer != nil {
if err := m.hostportSyncer.SyncHostports(Tun0, m.getRunningPods()); err != nil {
errList = append(errList, err)
}
}

return kerrors.NewAggregate(errList)
Expand Down

0 comments on commit 4be6729

Please sign in to comment.