Skip to content

Commit 4be6729

Browse files
Merge pull request #16463 from dcbw/sdn-crio-hostports
Automatic merge from submit-queue sdn: disable hostports when CRI-O is used For now... @openshift/networking @knobunc @rajatchopra
2 parents 899d4c9 + 59b2b62 commit 4be6729

File tree

3 files changed

+29
-9
lines changed

3 files changed

+29
-9
lines changed

pkg/cmd/server/kubernetes/network/sdn_linux.go

+8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package network
22

33
import (
4+
"strings"
5+
46
"k8s.io/kubernetes/pkg/apis/componentconfig"
57
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
68
kinternalinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
@@ -22,6 +24,11 @@ func NewSDNInterfaces(options configapi.NodeConfig, networkClient networkclient.
2224
}
2325
}
2426

27+
// dockershim + kube CNI driver delegates hostport handling to plugins,
28+
// while CRI-O handles hostports itself. Thus we need to disable the
29+
// SDN's hostport handling when run under CRI-O.
30+
enableHostports := !strings.Contains(runtimeEndpoint, "crio")
31+
2532
node, err := sdnnode.New(&sdnnode.OsdnNodeConfig{
2633
PluginName: options.NetworkConfig.NetworkPluginName,
2734
Hostname: options.NodeName,
@@ -33,6 +40,7 @@ func NewSDNInterfaces(options configapi.NodeConfig, networkClient networkclient.
3340
KubeInformers: internalKubeInformers,
3441
IPTablesSyncPeriod: proxyconfig.IPTables.SyncPeriod.Duration,
3542
ProxyMode: proxyconfig.Mode,
43+
EnableHostports: enableHostports,
3644
})
3745
if err != nil {
3846
return nil, nil, err

pkg/network/node/node.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ type OsdnNodeConfig struct {
7070
SelfIP string
7171
RuntimeEndpoint string
7272
MTU uint32
73+
EnableHostports bool
7374

7475
NetworkClient networkclient.Interface
7576
KClient kclientset.Interface
@@ -178,7 +179,7 @@ func New(c *OsdnNodeConfig) (network.NodeInterface, error) {
178179
kClient: c.KClient,
179180
networkClient: c.NetworkClient,
180181
oc: oc,
181-
podManager: newPodManager(c.KClient, policy, c.MTU, oc),
182+
podManager: newPodManager(c.KClient, policy, c.MTU, oc, c.EnableHostports),
182183
localIP: c.SelfIP,
183184
hostName: c.Hostname,
184185
useConnTrack: useConnTrack,

pkg/network/node/pod.go

+19-8
Original file line numberDiff line numberDiff line change
@@ -69,20 +69,23 @@ type podManager struct {
6969
mtu uint32
7070
ovs *ovsController
7171

72+
enableHostports bool
73+
7274
// Things only accessed through the processCNIRequests() goroutine
7375
// and thus can be set from Start()
7476
ipamConfig []byte
7577
hostportSyncer kubehostport.HostportSyncer
7678
}
7779

7880
// Creates a new live podManager; used by node code0
79-
func newPodManager(kClient kclientset.Interface, policy osdnPolicy, mtu uint32, ovs *ovsController) *podManager {
81+
func newPodManager(kClient kclientset.Interface, policy osdnPolicy, mtu uint32, ovs *ovsController, enableHostports bool) *podManager {
8082
pm := newDefaultPodManager()
8183
pm.kClient = kClient
8284
pm.policy = policy
8385
pm.mtu = mtu
8486
pm.podHandler = pm
8587
pm.ovs = ovs
88+
pm.enableHostports = enableHostports
8689
return pm
8790
}
8891

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

153156
// Start the CNI server and start processing requests from it
154157
func (m *podManager) Start(socketPath string, localSubnetCIDR string, clusterNetwork *net.IPNet) error {
155-
m.hostportSyncer = kubehostport.NewHostportSyncer()
158+
if m.enableHostports {
159+
m.hostportSyncer = kubehostport.NewHostportSyncer()
160+
}
156161

157162
var err error
158163
if m.ipamConfig, err = getIPAMConfig(clusterNetwork, localSubnetCIDR); err != nil {
@@ -501,8 +506,10 @@ func (m *podManager) setup(req *cniserver.PodRequest) (cnitypes.Result, *running
501506
defer func() {
502507
if !success {
503508
m.ipamDel(req.SandboxID)
504-
if err := m.hostportSyncer.SyncHostports(Tun0, m.getRunningPods()); err != nil {
505-
glog.Warningf("failed syncing hostports: %v", err)
509+
if m.hostportSyncer != nil {
510+
if err := m.hostportSyncer.SyncHostports(Tun0, m.getRunningPods()); err != nil {
511+
glog.Warningf("failed syncing hostports: %v", err)
512+
}
506513
}
507514
}
508515
}()
@@ -513,8 +520,10 @@ func (m *podManager) setup(req *cniserver.PodRequest) (cnitypes.Result, *running
513520
return nil, nil, err
514521
}
515522
podPortMapping := kubehostport.ConstructPodPortMapping(&v1Pod, podIP)
516-
if err := m.hostportSyncer.OpenPodHostportsAndSync(podPortMapping, Tun0, m.getRunningPods()); err != nil {
517-
return nil, nil, err
523+
if m.hostportSyncer != nil {
524+
if err := m.hostportSyncer.OpenPodHostportsAndSync(podPortMapping, Tun0, m.getRunningPods()); err != nil {
525+
return nil, nil, err
526+
}
518527
}
519528

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

636-
if err := m.hostportSyncer.SyncHostports(Tun0, m.getRunningPods()); err != nil {
637-
errList = append(errList, err)
645+
if m.hostportSyncer != nil {
646+
if err := m.hostportSyncer.SyncHostports(Tun0, m.getRunningPods()); err != nil {
647+
errList = append(errList, err)
648+
}
638649
}
639650

640651
return kerrors.NewAggregate(errList)

0 commit comments

Comments
 (0)