Skip to content

Commit 55aa6b2

Browse files
authored
Merge pull request #16912 from spowelljr/fixCNIRegression
cni: Fix regression in auto selection
2 parents 56075be + e8cb7b9 commit 55aa6b2

File tree

2 files changed

+64
-16
lines changed

2 files changed

+64
-16
lines changed

pkg/minikube/cni/cni.go

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func New(cc *config.ClusterConfig) (Manager, error) {
8787
var err error
8888
switch cc.KubernetesConfig.CNI {
8989
case "", "auto":
90-
cnm, err = chooseDefault(*cc)
90+
cnm = chooseDefault(*cc)
9191
case "false":
9292
cnm = Disabled{cc: *cc}
9393
case "kindnet", "true":
@@ -117,40 +117,34 @@ func IsDisabled(cc config.ClusterConfig) bool {
117117
return true
118118
}
119119

120-
def, err := chooseDefault(cc)
121-
if err == nil && def.String() == "Disabled" {
120+
if chooseDefault(cc).String() == "Disabled" {
122121
return true
123122
}
124123
return false
125124
}
126125

127-
func chooseDefault(cc config.ClusterConfig) (Manager, error) {
126+
func chooseDefault(cc config.ClusterConfig) Manager {
128127
// For backwards compatibility with older profiles using --enable-default-cni
129128
if cc.KubernetesConfig.EnableDefaultCNI {
130129
klog.Infof("EnableDefaultCNI is true, recommending bridge")
131-
return Bridge{}, nil
130+
return Bridge{}
132131
}
133132

134133
if len(cc.Nodes) > 1 || cc.MultiNodeRequested {
135134
// Enables KindNet CNI in master in multi node cluster, This solves the network problem
136135
// inside pod for multi node clusters. See https://github.com/kubernetes/minikube/issues/9838.
137136
klog.Infof("%d nodes found, recommending kindnet", len(cc.Nodes))
138-
return KindNet{cc: cc}, nil
137+
return KindNet{cc: cc}
139138
}
140139

141-
version, err := util.ParseKubernetesVersion(cc.KubernetesConfig.KubernetesVersion)
142-
if err != nil {
143-
return nil, err
144-
}
145-
146-
if cc.KubernetesConfig.ContainerRuntime != constants.Docker || version.GTE(semver.MustParse("1.24.0-alpha.2")) {
140+
if cc.KubernetesConfig.ContainerRuntime != constants.Docker {
147141
// Always use CNI when running with CRI (without dockershim)
148142
if driver.IsKIC(cc.Driver) {
149143
klog.Infof("%q driver + %q runtime found, recommending kindnet", cc.Driver, cc.KubernetesConfig.ContainerRuntime)
150-
return KindNet{cc: cc}, nil
144+
return KindNet{cc: cc}
151145
}
152146
klog.Infof("%q driver + %q runtime found, recommending bridge", cc.Driver, cc.KubernetesConfig.ContainerRuntime)
153-
return Bridge{cc: cc}, nil
147+
return Bridge{cc: cc}
154148
}
155149

156150
// for docker container runtime and k8s v1.24+ where dockershim and kubenet were removed, we fallback to bridge cni for cri-docker(d)
@@ -162,11 +156,11 @@ func chooseDefault(cc config.ClusterConfig) (Manager, error) {
162156
kv, err := util.ParseKubernetesVersion(cc.KubernetesConfig.KubernetesVersion)
163157
if err == nil && kv.GTE(semver.MustParse("1.24.0-alpha.2")) {
164158
klog.Infof("%q driver + %q container runtime found on kubernetes v1.24+, recommending bridge", cc.Driver, cc.KubernetesConfig.ContainerRuntime)
165-
return Bridge{cc: cc}, nil
159+
return Bridge{cc: cc}
166160
}
167161

168162
klog.Infof("CNI unnecessary in this configuration, recommending no CNI")
169-
return Disabled{cc: cc}, nil
163+
return Disabled{cc: cc}
170164
}
171165

172166
// manifestPath returns the path to the CNI manifest

pkg/minikube/cni/cni_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
Copyright 2023 The Kubernetes Authors All rights reserved.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package cni
18+
19+
import (
20+
"testing"
21+
22+
"k8s.io/minikube/pkg/minikube/config"
23+
)
24+
25+
func TestChooseDefault(t *testing.T) {
26+
tests := []struct {
27+
driver string
28+
containerRuntime string
29+
version string
30+
want string
31+
}{
32+
{"docker", "docker", "v1.23.0", "Disabled"},
33+
{"docker", "docker", "v1.27.0", "bridge CNI"},
34+
{"docker", "containerd", "v1.23.0", "CNI"},
35+
{"docker", "containerd", "v1.27.0", "CNI"},
36+
{"qemu", "docker", "v1.23.0", "Disabled"},
37+
{"qemu", "docker", "v1.27.0", "bridge CNI"},
38+
{"qemu", "containerd", "v1.23.0", "bridge CNI"},
39+
{"qemu", "containerd", "v1.27.0", "bridge CNI"},
40+
}
41+
for _, tc := range tests {
42+
cc := config.ClusterConfig{
43+
Driver: tc.driver,
44+
KubernetesConfig: config.KubernetesConfig{
45+
ContainerRuntime: tc.containerRuntime,
46+
KubernetesVersion: tc.version,
47+
},
48+
}
49+
got := chooseDefault(cc).String()
50+
if got != tc.want {
51+
t.Errorf("chooseDefault(%+v) = %s; want = %s", cc, got, tc.want)
52+
}
53+
}
54+
}

0 commit comments

Comments
 (0)