Make a certain ipv4-vs-ipv6 config error non-fatal, for backward compat

This commit is contained in:
Dan Winship 2023-10-05 10:41:04 -04:00
parent f19b62fc09
commit b2f0052d27
2 changed files with 37 additions and 31 deletions

View File

@ -678,7 +678,7 @@ func checkIPConfig(s *ProxyServer, dualStackSupported bool) (error, bool) {
clusterCIDRs := strings.Split(s.Config.ClusterCIDR, ",") clusterCIDRs := strings.Split(s.Config.ClusterCIDR, ",")
if badCIDRs(clusterCIDRs, badFamily) { if badCIDRs(clusterCIDRs, badFamily) {
errors = append(errors, fmt.Errorf("cluster is %s but clusterCIDRs contains only IPv%s addresses", clusterType, badFamily)) errors = append(errors, fmt.Errorf("cluster is %s but clusterCIDRs contains only IPv%s addresses", clusterType, badFamily))
if s.Config.DetectLocalMode == kubeproxyconfig.LocalModeClusterCIDR { if s.Config.DetectLocalMode == kubeproxyconfig.LocalModeClusterCIDR && !dualStackSupported {
// This has always been a fatal error // This has always been a fatal error
fatal = true fatal = true
} }

View File

@ -817,11 +817,12 @@ func Test_detectNodeIPs(t *testing.T) {
func Test_checkIPConfig(t *testing.T) { func Test_checkIPConfig(t *testing.T) {
cases := []struct { cases := []struct {
name string name string
proxy *ProxyServer proxy *ProxyServer
ssErr bool ssErr bool
dsErr bool ssFatal bool
fatal bool dsErr bool
dsFatal bool
}{ }{
{ {
name: "empty config", name: "empty config",
@ -874,9 +875,10 @@ func Test_checkIPConfig(t *testing.T) {
}, },
PrimaryIPFamily: v1.IPv4Protocol, PrimaryIPFamily: v1.IPv4Protocol,
}, },
ssErr: true, ssErr: true,
dsErr: true, ssFatal: false,
fatal: false, dsErr: true,
dsFatal: false,
}, },
{ {
name: "wrong-family clusterCIDR when using ClusterCIDR LocalDetector", name: "wrong-family clusterCIDR when using ClusterCIDR LocalDetector",
@ -887,9 +889,10 @@ func Test_checkIPConfig(t *testing.T) {
}, },
PrimaryIPFamily: v1.IPv4Protocol, PrimaryIPFamily: v1.IPv4Protocol,
}, },
ssErr: true, ssErr: true,
dsErr: true, ssFatal: true,
fatal: true, dsErr: true,
dsFatal: false,
}, },
{ {
@ -933,9 +936,10 @@ func Test_checkIPConfig(t *testing.T) {
}, },
PrimaryIPFamily: v1.IPv6Protocol, PrimaryIPFamily: v1.IPv6Protocol,
}, },
ssErr: true, ssErr: true,
dsErr: true, ssFatal: false,
fatal: false, dsErr: true,
dsFatal: false,
}, },
{ {
@ -983,9 +987,10 @@ func Test_checkIPConfig(t *testing.T) {
PrimaryIPFamily: v1.IPv4Protocol, PrimaryIPFamily: v1.IPv4Protocol,
podCIDRs: []string{"fd01:2345::/64"}, podCIDRs: []string{"fd01:2345::/64"},
}, },
ssErr: true, ssErr: true,
dsErr: true, ssFatal: true,
fatal: true, dsErr: true,
dsFatal: true,
}, },
{ {
@ -1011,9 +1016,10 @@ func Test_checkIPConfig(t *testing.T) {
}, },
PrimaryIPFamily: v1.IPv4Protocol, PrimaryIPFamily: v1.IPv4Protocol,
}, },
ssErr: true, ssErr: true,
dsErr: true, ssFatal: false,
fatal: false, dsErr: true,
dsFatal: false,
}, },
{ {
@ -1057,9 +1063,9 @@ func Test_checkIPConfig(t *testing.T) {
}, },
PrimaryIPFamily: v1.IPv6Protocol, PrimaryIPFamily: v1.IPv6Protocol,
}, },
ssErr: true, ssErr: true,
dsErr: false, ssFatal: false,
fatal: false, dsErr: false,
}, },
{ {
@ -1085,9 +1091,9 @@ func Test_checkIPConfig(t *testing.T) {
}, },
PrimaryIPFamily: v1.IPv6Protocol, PrimaryIPFamily: v1.IPv6Protocol,
}, },
ssErr: true, ssErr: true,
dsErr: false, ssFatal: false,
fatal: false, dsErr: false,
}, },
} }
@ -1098,8 +1104,8 @@ func Test_checkIPConfig(t *testing.T) {
t.Errorf("unexpected error in single-stack case: %v", err) t.Errorf("unexpected error in single-stack case: %v", err)
} else if err == nil && c.ssErr { } else if err == nil && c.ssErr {
t.Errorf("unexpected lack of error in single-stack case") t.Errorf("unexpected lack of error in single-stack case")
} else if fatal != c.fatal { } else if fatal != c.ssFatal {
t.Errorf("expected fatal=%v, got %v", c.fatal, fatal) t.Errorf("expected fatal=%v, got %v", c.ssFatal, fatal)
} }
err, fatal = checkIPConfig(c.proxy, true) err, fatal = checkIPConfig(c.proxy, true)
@ -1107,8 +1113,8 @@ func Test_checkIPConfig(t *testing.T) {
t.Errorf("unexpected error in dual-stack case: %v", err) t.Errorf("unexpected error in dual-stack case: %v", err)
} else if err == nil && c.dsErr { } else if err == nil && c.dsErr {
t.Errorf("unexpected lack of error in dual-stack case") t.Errorf("unexpected lack of error in dual-stack case")
} else if fatal != c.fatal { } else if fatal != c.dsFatal {
t.Errorf("expected fatal=%v, got %v", c.fatal, fatal) t.Errorf("expected fatal=%v, got %v", c.dsFatal, fatal)
} }
}) })
} }