Skip to content

Commit 2914171

Browse files
committed
kubeadm: reimplement IPVS check
Used existing IPVS Proxier API CanUseIPVSProxier instead of custom implementation. Fixes kubernetes/kubeadm#975
1 parent 897d62a commit 2914171

File tree

9 files changed

+54
-249
lines changed

9 files changed

+54
-249
lines changed

cmd/kubeadm/.import-restrictions

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@
4343
"k8s.io/utils/integer",
4444
"k8s.io/utils/path",
4545
"k8s.io/utils/pointer",
46-
"k8s.io/utils/net"
46+
"k8s.io/utils/net",
47+
"k8s.io/utils/trace"
4748
]
4849
},
4950
{
@@ -57,6 +58,7 @@
5758
"k8s.io/kubernetes/pkg/apis/rbac",
5859
"k8s.io/kubernetes/pkg/apis/scheduling",
5960
"k8s.io/kubernetes/pkg/api/v1/pod",
61+
"k8s.io/kubernetes/pkg/api/v1/service",
6062
"k8s.io/kubernetes/pkg/capabilities",
6163
"k8s.io/kubernetes/pkg/controller",
6264
"k8s.io/kubernetes/pkg/features",
@@ -67,20 +69,26 @@
6769
"k8s.io/kubernetes/pkg/kubelet/types",
6870
"k8s.io/kubernetes/pkg/master/ports",
6971
"k8s.io/kubernetes/pkg/proxy/apis/config",
72+
"k8s.io/kubernetes/pkg/proxy",
7073
"k8s.io/kubernetes/pkg/registry/core/service/allocator",
7174
"k8s.io/kubernetes/pkg/registry/core/service/ipallocator",
7275
"k8s.io/kubernetes/pkg/security/apparmor",
7376
"k8s.io/kubernetes/pkg/serviceaccount",
77+
"k8s.io/kubernetes/pkg/util/async",
78+
"k8s.io/kubernetes/pkg/util/conntrack",
79+
"k8s.io/kubernetes/pkg/util/dbus",
7480
"k8s.io/kubernetes/pkg/util/hash",
7581
"k8s.io/kubernetes/pkg/util/initsystem",
82+
"k8s.io/kubernetes/pkg/util/ipset",
83+
"k8s.io/kubernetes/pkg/util/iptables",
7684
"k8s.io/kubernetes/pkg/util/ipvs",
7785
"k8s.io/kubernetes/pkg/util/metrics",
7886
"k8s.io/kubernetes/pkg/util/node",
7987
"k8s.io/kubernetes/pkg/util/normalizer",
8088
"k8s.io/kubernetes/pkg/util/parsers",
8189
"k8s.io/kubernetes/pkg/util/procfs",
90+
"k8s.io/kubernetes/pkg/util/sysctl",
8291
"k8s.io/kubernetes/pkg/util/taints",
83-
"k8s.io/kubernetes/pkg/util/ipvs",
8492
"k8s.io/kubernetes/pkg/version"
8593
],
8694
"ForbiddenPrefixes": [
@@ -120,6 +128,7 @@
120128
"github.com/docker/go-connections/tlsconfig",
121129
"github.com/docker/go-units",
122130
"github.com/docker/libnetwork/ipvs",
131+
"github.com/godbus/dbus",
123132
"github.com/gogo/protobuf/proto",
124133
"github.com/gogo/protobuf/sortkeys",
125134
"github.com/golang/groupcache/lru",
@@ -156,7 +165,8 @@
156165
"github.com/russross/blackfriday",
157166
"github.com/shurcooL/sanitized_anchor_name",
158167
"github.com/spf13/cobra",
159-
"github.com/spf13/pflag"
168+
"github.com/spf13/pflag",
169+
"github.com/vishvananda/netlink"
160170
]
161171
},
162172
{

cmd/kubeadm/app/preflight/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ go_library(
3939
] + select({
4040
"@io_bazel_rules_go//go/platform:linux": [
4141
"//cmd/kubeadm/app/util:go_default_library",
42+
"//pkg/proxy/ipvs:go_default_library",
43+
"//pkg/util/ipset:go_default_library",
4244
],
4345
"//conditions:default": [],
4446
}),

cmd/kubeadm/app/preflight/checks.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -872,6 +872,16 @@ func (ncc NumCPUCheck) Check() (warnings, errorList []error) {
872872
return warnings, errorList
873873
}
874874

875+
// IPVSProxierCheck tests if IPVS proxier can be used.
876+
type IPVSProxierCheck struct {
877+
exec utilsexec.Interface
878+
}
879+
880+
// Name returns label for IPVSProxierCheck
881+
func (r IPVSProxierCheck) Name() string {
882+
return "IPVSProxierCheck"
883+
}
884+
875885
// RunInitNodeChecks executes all individual, applicable to control-plane node checks.
876886
// The boolean flag 'isSecondaryControlPlane' controls whether we are running checks in a --join-control-plane scenario.
877887
// If the flag is set to true we should skip checks already executed by RunJoinNodeChecks and RunOptionalJoinNodeChecks.
@@ -903,11 +913,9 @@ func RunInitNodeChecks(execer utilsexec.Interface, cfg *kubeadmapi.InitConfigura
903913
if !isSecondaryControlPlane {
904914
checks = addCommonChecks(execer, cfg, checks)
905915

906-
// Check IVPS required kernel module once we use IVPS kube-proxy mode
916+
// Check if IVPS kube-proxy mode is supported
907917
if cfg.ComponentConfigs.KubeProxy != nil && cfg.ComponentConfigs.KubeProxy.Mode == ipvsutil.IPVSProxyMode {
908-
checks = append(checks,
909-
ipvsutil.RequiredIPVSKernelModulesAvailableCheck{Executor: execer},
910-
)
918+
checks = append(checks, IPVSProxierCheck{exec: execer})
911919
}
912920

913921
// Check if Bridge-netfilter and IPv6 relevant flags are set
@@ -994,11 +1002,9 @@ func RunJoinNodeChecks(execer utilsexec.Interface, cfg *kubeadmapi.JoinConfigura
9941002
func RunOptionalJoinNodeChecks(execer utilsexec.Interface, cfg *kubeadmapi.ClusterConfiguration, ignorePreflightErrors sets.String) error {
9951003
checks := []Checker{}
9961004

997-
// Check ipvs required kernel module if we use ipvs kube-proxy mode
1005+
// Check if IVPS kube-proxy mode is supported
9981006
if cfg.ComponentConfigs.KubeProxy != nil && cfg.ComponentConfigs.KubeProxy.Mode == ipvsutil.IPVSProxyMode {
999-
checks = append(checks,
1000-
ipvsutil.RequiredIPVSKernelModulesAvailableCheck{Executor: execer},
1001-
)
1007+
checks = append(checks, IPVSProxierCheck{exec: execer})
10021008
}
10031009

10041010
return RunChecks(checks, os.Stderr, ignorePreflightErrors)

cmd/kubeadm/app/preflight/checks_darwin.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,9 @@ package preflight
2525
func (idsc IsDockerSystemdCheck) Check() (warnings, errorList []error) {
2626
return nil, nil
2727
}
28+
29+
// Check determines if IPVS proxier can be used or not
30+
// No-op for for Darwin (MacOS).
31+
func (ipvspc IPVSProxierCheck) Check() (warnings, errors []error) {
32+
return nil, nil
33+
}

cmd/kubeadm/app/preflight/checks_linux.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ package preflight
2121
import (
2222
"github.com/pkg/errors"
2323
"k8s.io/kubernetes/cmd/kubeadm/app/util"
24+
"k8s.io/kubernetes/pkg/proxy/ipvs"
2425
"k8s.io/utils/exec"
26+
27+
utilipset "k8s.io/kubernetes/pkg/util/ipset"
2528
)
2629

2730
// Check validates if Docker is setup to use systemd as the cgroup driver.
@@ -42,3 +45,13 @@ func (idsc IsDockerSystemdCheck) Check() (warnings, errorList []error) {
4245
}
4346
return warnings, nil
4447
}
48+
49+
// Check determines if IPVS proxier can be used or not
50+
func (ipvspc IPVSProxierCheck) Check() (warnings, errors []error) {
51+
ipsetInterface := utilipset.New(ipvspc.exec)
52+
kernelHandler := ipvs.NewLinuxKernelHandler()
53+
if _, err := ipvs.CanUseIPVSProxier(kernelHandler, ipsetInterface); err != nil {
54+
return nil, append(errors, err)
55+
}
56+
return nil, nil
57+
}

cmd/kubeadm/app/preflight/checks_windows.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,9 @@ func (ipuc IsPrivilegedUserCheck) Check() (warnings, errorList []error) {
4949
func (idsc IsDockerSystemdCheck) Check() (warnings, errorList []error) {
5050
return nil, nil
5151
}
52+
53+
// Check determines if IPVS proxier can be used or not
54+
// No-op for Windows.
55+
func (ipvspc IPVSProxierCheck) Check() (warnings, errors []error) {
56+
return nil, nil
57+
}

pkg/util/ipvs/BUILD

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,11 @@ go_test(
1111
srcs = [
1212
"ipvs_linux_test.go",
1313
"ipvs_test.go",
14-
"kernelcheck_linux_test.go",
1514
],
1615
embed = [":go_default_library"],
1716
deps = select({
1817
"@io_bazel_rules_go//go/platform:linux": [
1918
"//vendor/github.com/docker/libnetwork/ipvs:go_default_library",
20-
"//vendor/k8s.io/utils/exec:go_default_library",
21-
"//vendor/k8s.io/utils/exec/testing:go_default_library",
2219
],
2320
"//conditions:default": [],
2421
}),
@@ -30,7 +27,6 @@ go_library(
3027
"ipvs.go",
3128
"ipvs_linux.go",
3229
"ipvs_unsupported.go",
33-
"kernelcheck_linux.go",
3430
"kernelcheck_unsupported.go",
3531
],
3632
importpath = "k8s.io/kubernetes/pkg/util/ipvs",
@@ -39,9 +35,7 @@ go_library(
3935
"//vendor/k8s.io/utils/exec:go_default_library",
4036
] + select({
4137
"@io_bazel_rules_go//go/platform:linux": [
42-
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
4338
"//vendor/github.com/docker/libnetwork/ipvs:go_default_library",
44-
"//vendor/github.com/lithammer/dedent:go_default_library",
4539
"//vendor/k8s.io/klog:go_default_library",
4640
],
4741
"//conditions:default": [],

pkg/util/ipvs/kernelcheck_linux.go

Lines changed: 0 additions & 102 deletions
This file was deleted.

0 commit comments

Comments
 (0)