Merge pull request #56368 from xiangpengzhao/validate-ipvs-stuff
Automatic merge from submit-queue (batch tested with PRs 57211, 56150, 56368, 56271, 55957). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Validate IPVSConfiguration only when IPVS mode is enabled. **What this PR does / why we need it**: It's strange for users that they should configuration valid values for ipvs params even when they don't use ipvs mode. Users don't need to care about these params in this case. **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes # **Special notes for your reviewer**: /cc @m1093782566 **Release note**: ```release-note NONE ```
This commit is contained in:
		@@ -36,7 +36,9 @@ func Validate(config *kubeproxyconfig.KubeProxyConfiguration) field.ErrorList {
 | 
				
			|||||||
	newPath := field.NewPath("KubeProxyConfiguration")
 | 
						newPath := field.NewPath("KubeProxyConfiguration")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	allErrs = append(allErrs, validateKubeProxyIPTablesConfiguration(config.IPTables, newPath.Child("KubeProxyIPTablesConfiguration"))...)
 | 
						allErrs = append(allErrs, validateKubeProxyIPTablesConfiguration(config.IPTables, newPath.Child("KubeProxyIPTablesConfiguration"))...)
 | 
				
			||||||
 | 
						if config.Mode == kubeproxyconfig.ProxyModeIPVS {
 | 
				
			||||||
		allErrs = append(allErrs, validateKubeProxyIPVSConfiguration(config.IPVS, newPath.Child("KubeProxyIPVSConfiguration"))...)
 | 
							allErrs = append(allErrs, validateKubeProxyIPVSConfiguration(config.IPVS, newPath.Child("KubeProxyIPVSConfiguration"))...)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	allErrs = append(allErrs, validateKubeProxyConntrackConfiguration(config.Conntrack, newPath.Child("KubeProxyConntrackConfiguration"))...)
 | 
						allErrs = append(allErrs, validateKubeProxyConntrackConfiguration(config.Conntrack, newPath.Child("KubeProxyConntrackConfiguration"))...)
 | 
				
			||||||
	allErrs = append(allErrs, validateProxyMode(config.Mode, newPath.Child("Mode"))...)
 | 
						allErrs = append(allErrs, validateProxyMode(config.Mode, newPath.Child("Mode"))...)
 | 
				
			||||||
	allErrs = append(allErrs, validateClientConnectionConfiguration(config.ClientConnection, newPath.Child("ClientConnection"))...)
 | 
						allErrs = append(allErrs, validateClientConnectionConfiguration(config.ClientConnection, newPath.Child("ClientConnection"))...)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,6 +43,7 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
 | 
				
			|||||||
				SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
									SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
				MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
									MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
 | 
								Mode: kubeproxyconfig.ProxyModeIPVS,
 | 
				
			||||||
			IPVS: kubeproxyconfig.KubeProxyIPVSConfiguration{
 | 
								IPVS: kubeproxyconfig.KubeProxyIPVSConfiguration{
 | 
				
			||||||
				SyncPeriod:    metav1.Duration{Duration: 10 * time.Second},
 | 
									SyncPeriod:    metav1.Duration{Duration: 10 * time.Second},
 | 
				
			||||||
				MinSyncPeriod: metav1.Duration{Duration: 5 * time.Second},
 | 
									MinSyncPeriod: metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
@@ -55,6 +56,26 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
 | 
				
			|||||||
				TCPCloseWaitTimeout:   &metav1.Duration{Duration: 5 * time.Second},
 | 
									TCPCloseWaitTimeout:   &metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								BindAddress:        "192.168.59.103",
 | 
				
			||||||
 | 
								HealthzBindAddress: "0.0.0.0:10256",
 | 
				
			||||||
 | 
								MetricsBindAddress: "127.0.0.1:10249",
 | 
				
			||||||
 | 
								ClusterCIDR:        "192.168.59.0/24",
 | 
				
			||||||
 | 
								UDPIdleTimeout:     metav1.Duration{Duration: 1 * time.Second},
 | 
				
			||||||
 | 
								ConfigSyncPeriod:   metav1.Duration{Duration: 1 * time.Second},
 | 
				
			||||||
 | 
								IPTables: kubeproxyconfig.KubeProxyIPTablesConfiguration{
 | 
				
			||||||
 | 
									MasqueradeAll: true,
 | 
				
			||||||
 | 
									SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
 | 
									MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
				
			||||||
 | 
									Max:        pointer.Int32Ptr(2),
 | 
				
			||||||
 | 
									MaxPerCore: pointer.Int32Ptr(1),
 | 
				
			||||||
 | 
									Min:        pointer.Int32Ptr(1),
 | 
				
			||||||
 | 
									TCPEstablishedTimeout: &metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
 | 
									TCPCloseWaitTimeout:   &metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, successCase := range successCases {
 | 
						for _, successCase := range successCases {
 | 
				
			||||||
@@ -81,10 +102,6 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
 | 
				
			|||||||
					SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
										SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
					MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
										MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				IPVS: kubeproxyconfig.KubeProxyIPVSConfiguration{
 | 
					 | 
				
			||||||
					SyncPeriod:    metav1.Duration{Duration: 10 * time.Second},
 | 
					 | 
				
			||||||
					MinSyncPeriod: metav1.Duration{Duration: 5 * time.Second},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
									Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
				
			||||||
					Max:        pointer.Int32Ptr(2),
 | 
										Max:        pointer.Int32Ptr(2),
 | 
				
			||||||
					MaxPerCore: pointer.Int32Ptr(1),
 | 
										MaxPerCore: pointer.Int32Ptr(1),
 | 
				
			||||||
@@ -109,10 +126,6 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
 | 
				
			|||||||
					SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
										SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
					MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
										MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				IPVS: kubeproxyconfig.KubeProxyIPVSConfiguration{
 | 
					 | 
				
			||||||
					SyncPeriod:    metav1.Duration{Duration: 10 * time.Second},
 | 
					 | 
				
			||||||
					MinSyncPeriod: metav1.Duration{Duration: 5 * time.Second},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
									Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
				
			||||||
					Max:        pointer.Int32Ptr(2),
 | 
										Max:        pointer.Int32Ptr(2),
 | 
				
			||||||
					MaxPerCore: pointer.Int32Ptr(1),
 | 
										MaxPerCore: pointer.Int32Ptr(1),
 | 
				
			||||||
@@ -137,10 +150,6 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
 | 
				
			|||||||
					SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
										SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
					MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
										MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				IPVS: kubeproxyconfig.KubeProxyIPVSConfiguration{
 | 
					 | 
				
			||||||
					SyncPeriod:    metav1.Duration{Duration: 10 * time.Second},
 | 
					 | 
				
			||||||
					MinSyncPeriod: metav1.Duration{Duration: 5 * time.Second},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
									Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
				
			||||||
					Max:        pointer.Int32Ptr(2),
 | 
										Max:        pointer.Int32Ptr(2),
 | 
				
			||||||
					MaxPerCore: pointer.Int32Ptr(1),
 | 
										MaxPerCore: pointer.Int32Ptr(1),
 | 
				
			||||||
@@ -165,10 +174,6 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
 | 
				
			|||||||
					SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
										SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
					MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
										MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				IPVS: kubeproxyconfig.KubeProxyIPVSConfiguration{
 | 
					 | 
				
			||||||
					SyncPeriod:    metav1.Duration{Duration: 10 * time.Second},
 | 
					 | 
				
			||||||
					MinSyncPeriod: metav1.Duration{Duration: 5 * time.Second},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
									Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
				
			||||||
					Max:        pointer.Int32Ptr(2),
 | 
										Max:        pointer.Int32Ptr(2),
 | 
				
			||||||
					MaxPerCore: pointer.Int32Ptr(1),
 | 
										MaxPerCore: pointer.Int32Ptr(1),
 | 
				
			||||||
@@ -193,10 +198,6 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
 | 
				
			|||||||
					SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
										SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
					MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
										MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				IPVS: kubeproxyconfig.KubeProxyIPVSConfiguration{
 | 
					 | 
				
			||||||
					SyncPeriod:    metav1.Duration{Duration: 10 * time.Second},
 | 
					 | 
				
			||||||
					MinSyncPeriod: metav1.Duration{Duration: 5 * time.Second},
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
									Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
				
			||||||
					Max:        pointer.Int32Ptr(2),
 | 
										Max:        pointer.Int32Ptr(2),
 | 
				
			||||||
					MaxPerCore: pointer.Int32Ptr(1),
 | 
										MaxPerCore: pointer.Int32Ptr(1),
 | 
				
			||||||
@@ -221,10 +222,31 @@ func TestValidateKubeProxyConfiguration(t *testing.T) {
 | 
				
			|||||||
					SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
										SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
					MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
										MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				IPVS: kubeproxyconfig.KubeProxyIPVSConfiguration{
 | 
									Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
				
			||||||
					SyncPeriod:    metav1.Duration{Duration: 10 * time.Second},
 | 
										Max:        pointer.Int32Ptr(2),
 | 
				
			||||||
					MinSyncPeriod: metav1.Duration{Duration: 5 * time.Second},
 | 
										MaxPerCore: pointer.Int32Ptr(1),
 | 
				
			||||||
 | 
										Min:        pointer.Int32Ptr(1),
 | 
				
			||||||
 | 
										TCPEstablishedTimeout: &metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
 | 
										TCPCloseWaitTimeout:   &metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								msg: "must be greater than 0",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								config: kubeproxyconfig.KubeProxyConfiguration{
 | 
				
			||||||
 | 
									BindAddress:        "192.168.59.103",
 | 
				
			||||||
 | 
									HealthzBindAddress: "0.0.0.0:10256",
 | 
				
			||||||
 | 
									MetricsBindAddress: "127.0.0.1:10249",
 | 
				
			||||||
 | 
									ClusterCIDR:        "192.168.59.0/24",
 | 
				
			||||||
 | 
									UDPIdleTimeout:     metav1.Duration{Duration: 1 * time.Second},
 | 
				
			||||||
 | 
									ConfigSyncPeriod:   metav1.Duration{Duration: 1 * time.Second},
 | 
				
			||||||
 | 
									IPTables: kubeproxyconfig.KubeProxyIPTablesConfiguration{
 | 
				
			||||||
 | 
										MasqueradeAll: true,
 | 
				
			||||||
 | 
										SyncPeriod:    metav1.Duration{Duration: 5 * time.Second},
 | 
				
			||||||
 | 
										MinSyncPeriod: metav1.Duration{Duration: 2 * time.Second},
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									// not specifying valid period in IPVS mode.
 | 
				
			||||||
 | 
									Mode: kubeproxyconfig.ProxyModeIPVS,
 | 
				
			||||||
				Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
									Conntrack: kubeproxyconfig.KubeProxyConntrackConfiguration{
 | 
				
			||||||
					Max:        pointer.Int32Ptr(2),
 | 
										Max:        pointer.Int32Ptr(2),
 | 
				
			||||||
					MaxPerCore: pointer.Int32Ptr(1),
 | 
										MaxPerCore: pointer.Int32Ptr(1),
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user