Merge pull request #89867 from gongguan/ipvs-check

remove duplicate ipvs check
This commit is contained in:
Kubernetes Prow Robot 2020-04-07 16:45:57 -07:00 committed by GitHub
commit 5123c3a018
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 13 deletions

View File

@ -159,7 +159,7 @@ func newProxyServer(
var proxier proxy.Provider var proxier proxy.Provider
var detectLocalMode proxyconfigapi.LocalMode var detectLocalMode proxyconfigapi.LocalMode
proxyMode := getProxyMode(string(config.Mode), kernelHandler, ipsetInterface, iptables.LinuxKernelCompatTester{}) proxyMode := getProxyMode(string(config.Mode), canUseIPVS, iptables.LinuxKernelCompatTester{})
detectLocalMode, err = getDetectLocalMode(config) detectLocalMode, err = getDetectLocalMode(config)
if err != nil { if err != nil {
return nil, fmt.Errorf("cannot determine detect-local-mode: %v", err) return nil, fmt.Errorf("cannot determine detect-local-mode: %v", err)
@ -554,28 +554,21 @@ func nodeIPTuple(bindAddress string) [2]net.IP {
return nodes return nodes
} }
func getProxyMode(proxyMode string, khandle ipvs.KernelHandler, ipsetver ipvs.IPSetVersioner, kcompat iptables.KernelCompatTester) string { func getProxyMode(proxyMode string, canUseIPVS bool, kcompat iptables.KernelCompatTester) string {
switch proxyMode { switch proxyMode {
case proxyModeUserspace: case proxyModeUserspace:
return proxyModeUserspace return proxyModeUserspace
case proxyModeIPTables: case proxyModeIPTables:
return tryIPTablesProxy(kcompat) return tryIPTablesProxy(kcompat)
case proxyModeIPVS: case proxyModeIPVS:
return tryIPVSProxy(khandle, ipsetver, kcompat) return tryIPVSProxy(canUseIPVS, kcompat)
} }
klog.Warningf("Unknown proxy mode %q, assuming iptables proxy", proxyMode) klog.Warningf("Unknown proxy mode %q, assuming iptables proxy", proxyMode)
return tryIPTablesProxy(kcompat) return tryIPTablesProxy(kcompat)
} }
func tryIPVSProxy(khandle ipvs.KernelHandler, ipsetver ipvs.IPSetVersioner, kcompat iptables.KernelCompatTester) string { func tryIPVSProxy(canUseIPVS bool, kcompat iptables.KernelCompatTester) string {
// guaranteed false on error, error only necessary for debugging if canUseIPVS {
// IPVS Proxier relies on ip_vs_* kernel modules and ipset
useIPVSProxy, err := ipvs.CanUseIPVSProxier(khandle, ipsetver)
if err != nil {
// Try to fallback to iptables before falling back to userspace
utilruntime.HandleError(fmt.Errorf("can't determine whether to use ipvs proxy, error: %v", err))
}
if useIPVSProxy {
return proxyModeIPVS return proxyModeIPVS
} }

View File

@ -145,7 +145,8 @@ func Test_getProxyMode(t *testing.T) {
modules: c.kmods, modules: c.kmods,
kernelVersion: c.kernelVersion, kernelVersion: c.kernelVersion,
} }
r := getProxyMode(c.flag, khandler, ipsetver, kcompater) canUseIPVS, _ := ipvs.CanUseIPVSProxier(khandler, ipsetver)
r := getProxyMode(c.flag, canUseIPVS, kcompater)
if r != c.expected { if r != c.expected {
t.Errorf("Case[%d] Expected %q, got %q", i, c.expected, r) t.Errorf("Case[%d] Expected %q, got %q", i, c.expected, r)
} }