mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Validate if service has duplicate targetPort
This commit is contained in:
		@@ -2865,6 +2865,22 @@ func ValidateService(service *api.Service) field.ErrorList {
 | 
				
			|||||||
		nodePorts[key] = true
 | 
							nodePorts[key] = true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Check for duplicate TargetPort
 | 
				
			||||||
 | 
						portsPath = specPath.Child("ports")
 | 
				
			||||||
 | 
						targetPorts := make(map[api.ServicePort]bool)
 | 
				
			||||||
 | 
						for i, port := range service.Spec.Ports {
 | 
				
			||||||
 | 
							if (port.TargetPort.Type == intstr.Int && port.TargetPort.IntVal == 0) || (port.TargetPort.Type == intstr.String && port.TargetPort.StrVal == "") {
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							portPath := portsPath.Index(i)
 | 
				
			||||||
 | 
							key := api.ServicePort{Protocol: port.Protocol, TargetPort: port.TargetPort}
 | 
				
			||||||
 | 
							_, found := targetPorts[key]
 | 
				
			||||||
 | 
							if found {
 | 
				
			||||||
 | 
								allErrs = append(allErrs, field.Duplicate(portPath.Child("targetPort"), port.TargetPort))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							targetPorts[key] = true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Validate SourceRange field and annotation
 | 
						// Validate SourceRange field and annotation
 | 
				
			||||||
	_, ok := service.Annotations[api.AnnotationLoadBalancerSourceRangesKey]
 | 
						_, ok := service.Annotations[api.AnnotationLoadBalancerSourceRangesKey]
 | 
				
			||||||
	if len(service.Spec.LoadBalancerSourceRanges) > 0 || ok {
 | 
						if len(service.Spec.LoadBalancerSourceRanges) > 0 || ok {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6033,6 +6033,42 @@ func TestValidateService(t *testing.T) {
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
			numErrs: 0,
 | 
								numErrs: 0,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "invalid duplicate targetports (number with same protocol)",
 | 
				
			||||||
 | 
								tweakSvc: func(s *api.Service) {
 | 
				
			||||||
 | 
									s.Spec.Type = api.ServiceTypeClusterIP
 | 
				
			||||||
 | 
									s.Spec.Ports = append(s.Spec.Ports, api.ServicePort{Name: "q", Port: 1, Protocol: "TCP", TargetPort: intstr.FromInt(8080)})
 | 
				
			||||||
 | 
									s.Spec.Ports = append(s.Spec.Ports, api.ServicePort{Name: "r", Port: 2, Protocol: "TCP", TargetPort: intstr.FromInt(8080)})
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								numErrs: 1,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "invalid duplicate targetports (name with same protocol)",
 | 
				
			||||||
 | 
								tweakSvc: func(s *api.Service) {
 | 
				
			||||||
 | 
									s.Spec.Type = api.ServiceTypeClusterIP
 | 
				
			||||||
 | 
									s.Spec.Ports = append(s.Spec.Ports, api.ServicePort{Name: "q", Port: 1, Protocol: "TCP", TargetPort: intstr.FromString("http")})
 | 
				
			||||||
 | 
									s.Spec.Ports = append(s.Spec.Ports, api.ServicePort{Name: "r", Port: 2, Protocol: "TCP", TargetPort: intstr.FromString("http")})
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								numErrs: 1,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "valid duplicate targetports (number with different protocols)",
 | 
				
			||||||
 | 
								tweakSvc: func(s *api.Service) {
 | 
				
			||||||
 | 
									s.Spec.Type = api.ServiceTypeClusterIP
 | 
				
			||||||
 | 
									s.Spec.Ports = append(s.Spec.Ports, api.ServicePort{Name: "q", Port: 1, Protocol: "TCP", TargetPort: intstr.FromInt(8080)})
 | 
				
			||||||
 | 
									s.Spec.Ports = append(s.Spec.Ports, api.ServicePort{Name: "r", Port: 2, Protocol: "UDP", TargetPort: intstr.FromInt(8080)})
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								numErrs: 0,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								name: "valid duplicate targetports (name with different protocols)",
 | 
				
			||||||
 | 
								tweakSvc: func(s *api.Service) {
 | 
				
			||||||
 | 
									s.Spec.Type = api.ServiceTypeClusterIP
 | 
				
			||||||
 | 
									s.Spec.Ports = append(s.Spec.Ports, api.ServicePort{Name: "q", Port: 1, Protocol: "TCP", TargetPort: intstr.FromString("http")})
 | 
				
			||||||
 | 
									s.Spec.Ports = append(s.Spec.Ports, api.ServicePort{Name: "r", Port: 2, Protocol: "UDP", TargetPort: intstr.FromString("http")})
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								numErrs: 0,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name: "valid type - cluster",
 | 
								name: "valid type - cluster",
 | 
				
			||||||
			tweakSvc: func(s *api.Service) {
 | 
								tweakSvc: func(s *api.Service) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user