@@ -87,7 +87,7 @@ func New(cc *config.ClusterConfig) (Manager, error) {
87
87
var err error
88
88
switch cc .KubernetesConfig .CNI {
89
89
case "" , "auto" :
90
- cnm = chooseDefault (* cc )
90
+ cnm , err = chooseDefault (* cc )
91
91
case "false" :
92
92
cnm = Disabled {cc : * cc }
93
93
case "kindnet" , "true" :
@@ -117,33 +117,40 @@ func IsDisabled(cc config.ClusterConfig) bool {
117
117
return true
118
118
}
119
119
120
- if chooseDefault (cc ).String () == "Disabled" {
120
+ def , err := chooseDefault (cc )
121
+ if err == nil && def .String () == "Disabled" {
121
122
return true
122
123
}
123
124
return false
124
125
}
125
126
126
- func chooseDefault (cc config.ClusterConfig ) Manager {
127
+ func chooseDefault (cc config.ClusterConfig ) ( Manager , error ) {
127
128
// For backwards compatibility with older profiles using --enable-default-cni
128
129
if cc .KubernetesConfig .EnableDefaultCNI {
129
130
klog .Infof ("EnableDefaultCNI is true, recommending bridge" )
130
- return Bridge {}
131
+ return Bridge {}, nil
131
132
}
132
133
133
134
if len (cc .Nodes ) > 1 || cc .MultiNodeRequested {
134
135
// Enables KindNet CNI in master in multi node cluster, This solves the network problem
135
136
// inside pod for multi node clusters. See https://github.com/kubernetes/minikube/issues/9838.
136
137
klog .Infof ("%d nodes found, recommending kindnet" , len (cc .Nodes ))
137
- return KindNet {cc : cc }
138
+ return KindNet {cc : cc }, nil
138
139
}
139
140
140
- if cc .KubernetesConfig .ContainerRuntime != constants .Docker {
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" )) {
147
+ // Always use CNI when running with CRI (without dockershim)
141
148
if driver .IsKIC (cc .Driver ) {
142
149
klog .Infof ("%q driver + %q runtime found, recommending kindnet" , cc .Driver , cc .KubernetesConfig .ContainerRuntime )
143
- return KindNet {cc : cc }
150
+ return KindNet {cc : cc }, nil
144
151
}
145
152
klog .Infof ("%q driver + %q runtime found, recommending bridge" , cc .Driver , cc .KubernetesConfig .ContainerRuntime )
146
- return Bridge {cc : cc }
153
+ return Bridge {cc : cc }, nil
147
154
}
148
155
149
156
// for docker container runtime and k8s v1.24+ where dockershim and kubenet were removed, we fallback to bridge cni for cri-docker(d)
@@ -155,11 +162,11 @@ func chooseDefault(cc config.ClusterConfig) Manager {
155
162
kv , err := util .ParseKubernetesVersion (cc .KubernetesConfig .KubernetesVersion )
156
163
if err == nil && kv .GTE (semver .MustParse ("1.24.0-alpha.2" )) {
157
164
klog .Infof ("%q driver + %q container runtime found on kubernetes v1.24+, recommending bridge" , cc .Driver , cc .KubernetesConfig .ContainerRuntime )
158
- return Bridge {cc : cc }
165
+ return Bridge {cc : cc }, nil
159
166
}
160
167
161
168
klog .Infof ("CNI unnecessary in this configuration, recommending no CNI" )
162
- return Disabled {cc : cc }
169
+ return Disabled {cc : cc }, nil
163
170
}
164
171
165
172
// manifestPath returns the path to the CNI manifest
0 commit comments