Skip to content

Commit 72ca8a2

Browse files
authored
Merge pull request #14780 from afbjorklund/docker-cni
Always use cni unless running with dockershim
2 parents ebf3850 + 2576422 commit 72ca8a2

File tree

4 files changed

+37
-12
lines changed

4 files changed

+37
-12
lines changed

Diff for: pkg/minikube/cni/cni.go

+17-10
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 = chooseDefault(*cc)
90+
cnm, err = chooseDefault(*cc)
9191
case "false":
9292
cnm = Disabled{cc: *cc}
9393
case "kindnet", "true":
@@ -117,33 +117,40 @@ func IsDisabled(cc config.ClusterConfig) bool {
117117
return true
118118
}
119119

120-
if chooseDefault(cc).String() == "Disabled" {
120+
def, err := chooseDefault(cc)
121+
if err == nil && def.String() == "Disabled" {
121122
return true
122123
}
123124
return false
124125
}
125126

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

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

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)
141148
if driver.IsKIC(cc.Driver) {
142149
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
144151
}
145152
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
147154
}
148155

149156
// 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 {
155162
kv, err := util.ParseKubernetesVersion(cc.KubernetesConfig.KubernetesVersion)
156163
if err == nil && kv.GTE(semver.MustParse("1.24.0-alpha.2")) {
157164
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
159166
}
160167

161168
klog.Infof("CNI unnecessary in this configuration, recommending no CNI")
162-
return Disabled{cc: cc}
169+
return Disabled{cc: cc}, nil
163170
}
164171

165172
// manifestPath returns the path to the CNI manifest

Diff for: site/content/en/docs/drivers/includes/none_usage.inc

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ This VM must also meet the [kubeadm requirements](https://kubernetes.io/docs/set
1414
* iptables (in legacy mode)
1515
* conntrack
1616
* crictl
17+
* cni-plugins
1718
* SELinux permissive
1819
* cgroups v1 (v2 is not yet supported by Kubernetes)
1920

Diff for: site/content/en/docs/drivers/includes/ssh_usage.inc

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ This VM must also meet the [kubeadm requirements](https://kubernetes.io/docs/set
1313
* iptables (in legacy mode)
1414
* conntrack
1515
* crictl
16+
* cni-plugins
1617
* SELinux permissive
1718
* cgroups v1 (v2 is not yet supported by Kubernetes)
1819

Diff for: test/integration/net_test.go

+18-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/blang/semver/v4"
3232
"k8s.io/minikube/pkg/kapi"
3333
"k8s.io/minikube/pkg/minikube/config"
34+
"k8s.io/minikube/pkg/minikube/constants"
3435
"k8s.io/minikube/pkg/minikube/reason"
3536
"k8s.io/minikube/pkg/util"
3637
"k8s.io/minikube/pkg/util/retry"
@@ -57,7 +58,8 @@ func TestNetworkPlugins(t *testing.T) {
5758
namespace string
5859
hairpin bool
5960
}{
60-
{"auto", []string{}, "", "", "", true},
61+
// kindnet CNI is used by default and hairpin is enabled
62+
{"auto", []string{}, "", "", "", usingCNI()},
6163
{"kubenet", []string{"--network-plugin=kubenet"}, "kubenet", "", "", true},
6264
{"bridge", []string{"--cni=bridge"}, "cni", "", "", true},
6365
{"enable-default-cni", []string{"--enable-default-cni=true"}, "cni", "", "", true},
@@ -88,7 +90,6 @@ func TestNetworkPlugins(t *testing.T) {
8890

8991
if ContainerRuntime() != "docker" && tc.name == "kubenet" {
9092
// CNI is disabled when --network-plugin=kubenet option is passed. See cni.New(..) function
91-
// But for containerd/crio CNI has to be configured
9293
t.Skipf("Skipping the test as %s container runtimes requires CNI", ContainerRuntime())
9394
}
9495

@@ -212,6 +213,21 @@ func TestNetworkPlugins(t *testing.T) {
212213
})
213214
}
214215

216+
// usingCNI checks if not using dockershim
217+
func usingCNI() bool {
218+
if ContainerRuntime() != "docker" {
219+
return true
220+
}
221+
version, err := util.ParseKubernetesVersion(constants.DefaultKubernetesVersion)
222+
if err != nil {
223+
return false
224+
}
225+
if version.GTE(semver.MustParse("1.24.0-alpha.2")) {
226+
return true
227+
}
228+
return false
229+
}
230+
215231
// validateFalseCNI checks that minikube returns and error
216232
// if container runtime is "containerd" or "crio"
217233
// and --cni=false

0 commit comments

Comments
 (0)