Skip to content

Commit a735c97

Browse files
committed
kube-proxy: drop iptables version check
Kube-proxy's iptables mode used to care whether utiliptables's EnsureRule was able to use "iptables -C" or if it had to implement it hackily using "iptables-save". But that became irrelevant when kube-proxy was reimplemented using "iptables-restore", and no one ever noticed. So remove that check.
1 parent 8bced9b commit a735c97

File tree

6 files changed

+87
-206
lines changed

6 files changed

+87
-206
lines changed

cmd/kube-proxy/app/BUILD

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -172,43 +172,33 @@ go_test(
172172
] + select({
173173
"@io_bazel_rules_go//go/platform:android": [
174174
"//pkg/proxy/ipvs:go_default_library",
175-
"//pkg/util/iptables:go_default_library",
176175
],
177176
"@io_bazel_rules_go//go/platform:darwin": [
178177
"//pkg/proxy/ipvs:go_default_library",
179-
"//pkg/util/iptables:go_default_library",
180178
],
181179
"@io_bazel_rules_go//go/platform:dragonfly": [
182180
"//pkg/proxy/ipvs:go_default_library",
183-
"//pkg/util/iptables:go_default_library",
184181
],
185182
"@io_bazel_rules_go//go/platform:freebsd": [
186183
"//pkg/proxy/ipvs:go_default_library",
187-
"//pkg/util/iptables:go_default_library",
188184
],
189185
"@io_bazel_rules_go//go/platform:linux": [
190186
"//pkg/proxy/ipvs:go_default_library",
191-
"//pkg/util/iptables:go_default_library",
192187
],
193188
"@io_bazel_rules_go//go/platform:nacl": [
194189
"//pkg/proxy/ipvs:go_default_library",
195-
"//pkg/util/iptables:go_default_library",
196190
],
197191
"@io_bazel_rules_go//go/platform:netbsd": [
198192
"//pkg/proxy/ipvs:go_default_library",
199-
"//pkg/util/iptables:go_default_library",
200193
],
201194
"@io_bazel_rules_go//go/platform:openbsd": [
202195
"//pkg/proxy/ipvs:go_default_library",
203-
"//pkg/util/iptables:go_default_library",
204196
],
205197
"@io_bazel_rules_go//go/platform:plan9": [
206198
"//pkg/proxy/ipvs:go_default_library",
207-
"//pkg/util/iptables:go_default_library",
208199
],
209200
"@io_bazel_rules_go//go/platform:solaris": [
210201
"//pkg/proxy/ipvs:go_default_library",
211-
"//pkg/util/iptables:go_default_library",
212202
],
213203
"//conditions:default": [],
214204
}),

cmd/kube-proxy/app/server_others.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ func newProxyServer(
134134

135135
var proxier proxy.ProxyProvider
136136

137-
proxyMode := getProxyMode(string(config.Mode), iptInterface, kernelHandler, ipsetInterface, iptables.LinuxKernelCompatTester{})
137+
proxyMode := getProxyMode(string(config.Mode), kernelHandler, ipsetInterface, iptables.LinuxKernelCompatTester{})
138138
nodeIP := net.ParseIP(config.BindAddress)
139139
if nodeIP.IsUnspecified() {
140140
nodeIP = utilnode.GetNodeIP(client, hostname)
@@ -236,20 +236,20 @@ func newProxyServer(
236236
}, nil
237237
}
238238

239-
func getProxyMode(proxyMode string, iptver iptables.Versioner, khandle ipvs.KernelHandler, ipsetver ipvs.IPSetVersioner, kcompat iptables.KernelCompatTester) string {
239+
func getProxyMode(proxyMode string, khandle ipvs.KernelHandler, ipsetver ipvs.IPSetVersioner, kcompat iptables.KernelCompatTester) string {
240240
switch proxyMode {
241241
case proxyModeUserspace:
242242
return proxyModeUserspace
243243
case proxyModeIPTables:
244-
return tryIPTablesProxy(iptver, kcompat)
244+
return tryIPTablesProxy(kcompat)
245245
case proxyModeIPVS:
246-
return tryIPVSProxy(iptver, khandle, ipsetver, kcompat)
246+
return tryIPVSProxy(khandle, ipsetver, kcompat)
247247
}
248248
klog.Warningf("Flag proxy-mode=%q unknown, assuming iptables proxy", proxyMode)
249-
return tryIPTablesProxy(iptver, kcompat)
249+
return tryIPTablesProxy(kcompat)
250250
}
251251

252-
func tryIPVSProxy(iptver iptables.Versioner, khandle ipvs.KernelHandler, ipsetver ipvs.IPSetVersioner, kcompat iptables.KernelCompatTester) string {
252+
func tryIPVSProxy(khandle ipvs.KernelHandler, ipsetver ipvs.IPSetVersioner, kcompat iptables.KernelCompatTester) string {
253253
// guaranteed false on error, error only necessary for debugging
254254
// IPVS Proxier relies on ip_vs_* kernel modules and ipset
255255
useIPVSProxy, err := ipvs.CanUseIPVSProxier(khandle, ipsetver)
@@ -263,12 +263,12 @@ func tryIPVSProxy(iptver iptables.Versioner, khandle ipvs.KernelHandler, ipsetve
263263

264264
// Try to fallback to iptables before falling back to userspace
265265
klog.V(1).Infof("Can't use ipvs proxier, trying iptables proxier")
266-
return tryIPTablesProxy(iptver, kcompat)
266+
return tryIPTablesProxy(kcompat)
267267
}
268268

269-
func tryIPTablesProxy(iptver iptables.Versioner, kcompat iptables.KernelCompatTester) string {
269+
func tryIPTablesProxy(kcompat iptables.KernelCompatTester) string {
270270
// guaranteed false on error, error only necessary for debugging
271-
useIPTablesProxy, err := iptables.CanUseIPTablesProxier(iptver, kcompat)
271+
useIPTablesProxy, err := iptables.CanUseIPTablesProxier(kcompat)
272272
if err != nil {
273273
utilruntime.HandleError(fmt.Errorf("can't determine whether to use iptables proxy, using userspace proxier: %v", err))
274274
return proxyModeUserspace

cmd/kube-proxy/app/server_others_test.go

Lines changed: 76 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -23,68 +23,75 @@ import (
2323
"testing"
2424

2525
"k8s.io/kubernetes/pkg/proxy/ipvs"
26-
"k8s.io/kubernetes/pkg/util/iptables"
2726
)
2827

28+
type fakeIPSetVersioner struct {
29+
version string // what to return
30+
err error // what to return
31+
}
32+
33+
func (fake *fakeIPSetVersioner) GetVersion() (string, error) {
34+
return fake.version, fake.err
35+
}
36+
37+
type fakeKernelCompatTester struct {
38+
ok bool
39+
}
40+
41+
func (fake *fakeKernelCompatTester) IsCompatible() error {
42+
if !fake.ok {
43+
return fmt.Errorf("error")
44+
}
45+
return nil
46+
}
47+
48+
// fakeKernelHandler implements KernelHandler.
49+
type fakeKernelHandler struct {
50+
modules []string
51+
kernelVersion string
52+
}
53+
54+
func (fake *fakeKernelHandler) GetModules() ([]string, error) {
55+
return fake.modules, nil
56+
}
57+
58+
func (fake *fakeKernelHandler) GetKernelVersion() (string, error) {
59+
return fake.kernelVersion, nil
60+
}
61+
2962
func Test_getProxyMode(t *testing.T) {
3063
var cases = []struct {
31-
flag string
32-
iptablesVersion string
33-
ipsetVersion string
34-
kmods []string
35-
kernelVersion string
36-
kernelCompat bool
37-
iptablesError error
38-
ipsetError error
39-
expected string
64+
flag string
65+
ipsetVersion string
66+
kmods []string
67+
kernelVersion string
68+
kernelCompat bool
69+
ipsetError error
70+
expected string
4071
}{
4172
{ // flag says userspace
4273
flag: "userspace",
4374
expected: proxyModeUserspace,
4475
},
45-
{ // flag says iptables, error detecting version
46-
flag: "iptables",
47-
iptablesError: fmt.Errorf("flag says iptables, error detecting version"),
48-
expected: proxyModeUserspace,
49-
},
50-
{ // flag says iptables, version too low
51-
flag: "iptables",
52-
iptablesVersion: "0.0.0",
53-
expected: proxyModeUserspace,
76+
{ // flag says iptables, kernel not compatible
77+
flag: "iptables",
78+
kernelCompat: false,
79+
expected: proxyModeUserspace,
5480
},
55-
{ // flag says iptables, version ok, kernel not compatible
56-
flag: "iptables",
57-
iptablesVersion: iptables.MinCheckVersion,
58-
kernelCompat: false,
59-
expected: proxyModeUserspace,
81+
{ // flag says iptables, kernel is compatible
82+
flag: "iptables",
83+
kernelCompat: true,
84+
expected: proxyModeIPTables,
6085
},
61-
{ // flag says iptables, version ok, kernel is compatible
62-
flag: "iptables",
63-
iptablesVersion: iptables.MinCheckVersion,
64-
kernelCompat: true,
65-
expected: proxyModeIPTables,
86+
{ // detect, kernel not compatible
87+
flag: "",
88+
kernelCompat: false,
89+
expected: proxyModeUserspace,
6690
},
67-
{ // detect, error
68-
flag: "",
69-
iptablesError: fmt.Errorf("oops"),
70-
expected: proxyModeUserspace,
71-
},
72-
{ // detect, version too low
73-
flag: "",
74-
iptablesVersion: "0.0.0",
75-
expected: proxyModeUserspace,
76-
},
77-
{ // detect, version ok, kernel not compatible
78-
flag: "",
79-
iptablesVersion: iptables.MinCheckVersion,
80-
kernelCompat: false,
81-
expected: proxyModeUserspace,
82-
},
83-
{ // detect, version ok, kernel is compatible
84-
flag: "",
85-
iptablesVersion: iptables.MinCheckVersion,
86-
kernelCompat: true,
87-
expected: proxyModeIPTables,
91+
{ // detect, kernel is compatible
92+
flag: "",
93+
kernelCompat: true,
94+
expected: proxyModeIPTables,
8895
},
8996
{ // flag says ipvs, ipset version ok, kernel modules installed for linux kernel before 4.19
9097
flag: "ipvs",
@@ -101,69 +108,38 @@ func Test_getProxyMode(t *testing.T) {
101108
expected: proxyModeIPVS,
102109
},
103110
{ // flag says ipvs, ipset version too low, fallback on iptables mode
104-
flag: "ipvs",
105-
kmods: []string{"ip_vs", "ip_vs_rr", "ip_vs_wrr", "ip_vs_sh", "nf_conntrack"},
106-
kernelVersion: "4.19",
107-
ipsetVersion: "0.0",
108-
iptablesVersion: iptables.MinCheckVersion,
109-
kernelCompat: true,
110-
expected: proxyModeIPTables,
111+
flag: "ipvs",
112+
kmods: []string{"ip_vs", "ip_vs_rr", "ip_vs_wrr", "ip_vs_sh", "nf_conntrack"},
113+
kernelVersion: "4.19",
114+
ipsetVersion: "0.0",
115+
kernelCompat: true,
116+
expected: proxyModeIPTables,
111117
},
112118
{ // flag says ipvs, bad ipset version, fallback on iptables mode
113-
flag: "ipvs",
114-
kmods: []string{"ip_vs", "ip_vs_rr", "ip_vs_wrr", "ip_vs_sh", "nf_conntrack"},
115-
kernelVersion: "4.19",
116-
ipsetVersion: "a.b.c",
117-
iptablesVersion: iptables.MinCheckVersion,
118-
kernelCompat: true,
119-
expected: proxyModeIPTables,
119+
flag: "ipvs",
120+
kmods: []string{"ip_vs", "ip_vs_rr", "ip_vs_wrr", "ip_vs_sh", "nf_conntrack"},
121+
kernelVersion: "4.19",
122+
ipsetVersion: "a.b.c",
123+
kernelCompat: true,
124+
expected: proxyModeIPTables,
120125
},
121126
{ // flag says ipvs, required kernel modules are not installed, fallback on iptables mode
122-
flag: "ipvs",
123-
kmods: []string{"foo", "bar", "baz"},
124-
kernelVersion: "4.19",
125-
ipsetVersion: ipvs.MinIPSetCheckVersion,
126-
iptablesVersion: iptables.MinCheckVersion,
127-
kernelCompat: true,
128-
expected: proxyModeIPTables,
129-
},
130-
{ // flag says ipvs, required kernel modules are not installed, iptables version too old, fallback on userspace mode
131-
flag: "ipvs",
132-
kmods: []string{"foo", "bar", "baz"},
133-
kernelVersion: "4.19",
134-
ipsetVersion: ipvs.MinIPSetCheckVersion,
135-
iptablesVersion: "0.0.0",
136-
kernelCompat: true,
137-
expected: proxyModeUserspace,
138-
},
139-
{ // flag says ipvs, required kernel modules are not installed, iptables version too old, fallback on userspace mode
140-
flag: "ipvs",
141-
kmods: []string{"foo", "bar", "baz"},
142-
kernelVersion: "4.19",
143-
ipsetVersion: ipvs.MinIPSetCheckVersion,
144-
iptablesVersion: "0.0.0",
145-
kernelCompat: true,
146-
expected: proxyModeUserspace,
147-
},
148-
{ // flag says ipvs, ipset version too low, iptables version too old, kernel not compatible, fallback on userspace mode
149-
flag: "ipvs",
150-
kmods: []string{"ip_vs", "ip_vs_rr", "ip_vs_wrr", "ip_vs_sh", "nf_conntrack"},
151-
kernelVersion: "4.19",
152-
ipsetVersion: "0.0",
153-
iptablesVersion: iptables.MinCheckVersion,
154-
kernelCompat: false,
155-
expected: proxyModeUserspace,
127+
flag: "ipvs",
128+
kmods: []string{"foo", "bar", "baz"},
129+
kernelVersion: "4.19",
130+
ipsetVersion: ipvs.MinIPSetCheckVersion,
131+
kernelCompat: true,
132+
expected: proxyModeIPTables,
156133
},
157134
}
158135
for i, c := range cases {
159-
versioner := &fakeIPTablesVersioner{c.iptablesVersion, c.iptablesError}
160136
kcompater := &fakeKernelCompatTester{c.kernelCompat}
161137
ipsetver := &fakeIPSetVersioner{c.ipsetVersion, c.ipsetError}
162138
khandler := &fakeKernelHandler{
163139
modules: c.kmods,
164140
kernelVersion: c.kernelVersion,
165141
}
166-
r := getProxyMode(c.flag, versioner, khandler, ipsetver, kcompater)
142+
r := getProxyMode(c.flag, khandler, ipsetver, kcompater)
167143
if r != c.expected {
168144
t.Errorf("Case[%d] Expected %q, got %q", i, c.expected, r)
169145
}

cmd/kube-proxy/app/server_test.go

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -38,53 +38,6 @@ import (
3838
utilpointer "k8s.io/utils/pointer"
3939
)
4040

41-
type fakeIPTablesVersioner struct {
42-
version string // what to return
43-
err error // what to return
44-
}
45-
46-
func (fake *fakeIPTablesVersioner) GetVersion() (string, error) {
47-
return fake.version, fake.err
48-
}
49-
50-
func (fake *fakeIPTablesVersioner) IsCompatible() error {
51-
return fake.err
52-
}
53-
54-
type fakeIPSetVersioner struct {
55-
version string // what to return
56-
err error // what to return
57-
}
58-
59-
func (fake *fakeIPSetVersioner) GetVersion() (string, error) {
60-
return fake.version, fake.err
61-
}
62-
63-
type fakeKernelCompatTester struct {
64-
ok bool
65-
}
66-
67-
func (fake *fakeKernelCompatTester) IsCompatible() error {
68-
if !fake.ok {
69-
return fmt.Errorf("error")
70-
}
71-
return nil
72-
}
73-
74-
// fakeKernelHandler implements KernelHandler.
75-
type fakeKernelHandler struct {
76-
modules []string
77-
kernelVersion string
78-
}
79-
80-
func (fake *fakeKernelHandler) GetModules() ([]string, error) {
81-
return fake.modules, nil
82-
}
83-
84-
func (fake *fakeKernelHandler) GetKernelVersion() (string, error) {
85-
return fake.kernelVersion, nil
86-
}
87-
8841
// This test verifies that NewProxyServer does not crash when CleanupAndExit is true.
8942
func TestProxyServerWithCleanupAndExit(t *testing.T) {
9043
// Each bind address below is a separate test case

pkg/proxy/iptables/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ go_library(
2121
"//pkg/util/sysctl:go_default_library",
2222
"//staging/src/k8s.io/api/core/v1:go_default_library",
2323
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
24-
"//staging/src/k8s.io/apimachinery/pkg/util/version:go_default_library",
2524
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
2625
"//staging/src/k8s.io/client-go/tools/record:go_default_library",
2726
"//vendor/k8s.io/klog:go_default_library",

0 commit comments

Comments
 (0)