mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	External IPs support.
This commit is contained in:
		@@ -1090,12 +1090,11 @@ func ValidateService(service *api.Service) errs.ValidationErrorList {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, ip := range service.Spec.DeprecatedPublicIPs {
 | 
			
		||||
	for _, ip := range service.Spec.ExternalIPs {
 | 
			
		||||
		if ip == "0.0.0.0" {
 | 
			
		||||
			allErrs = append(allErrs, errs.NewFieldInvalid("spec.publicIPs", ip, "is not an IP address"))
 | 
			
		||||
		} else if util.IsValidIPv4(ip) && net.ParseIP(ip).IsLoopback() {
 | 
			
		||||
			allErrs = append(allErrs, errs.NewFieldInvalid("spec.publicIPs", ip, "publicIP cannot be a loopback"))
 | 
			
		||||
			allErrs = append(allErrs, errs.NewFieldInvalid("spec.externalIPs", ip, "is not an IP address"))
 | 
			
		||||
		}
 | 
			
		||||
		allErrs = append(allErrs, validateIpIsNotLinkLocalOrLoopback(ip, "spec.externalIPs")...)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if service.Spec.Type == "" {
 | 
			
		||||
@@ -1740,18 +1739,26 @@ func validateEndpointAddress(address *api.EndpointAddress) errs.ValidationErrorL
 | 
			
		||||
		allErrs = append(allErrs, errs.NewFieldInvalid("ip", address.IP, "invalid IPv4 address"))
 | 
			
		||||
		return allErrs
 | 
			
		||||
	}
 | 
			
		||||
	// We disallow some IPs as endpoints.  Specifically, loopback addresses are
 | 
			
		||||
	// nonsensical and link-local addresses tend to be used for node-centric
 | 
			
		||||
	// purposes (e.g. metadata service).
 | 
			
		||||
	ip := net.ParseIP(address.IP)
 | 
			
		||||
	return validateIpIsNotLinkLocalOrLoopback(address.IP, "ip")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func validateIpIsNotLinkLocalOrLoopback(ipAddress, fieldName string) errs.ValidationErrorList {
 | 
			
		||||
	// We disallow some IPs as endpoints or external-ips.  Specifically, loopback addresses are
 | 
			
		||||
	// nonsensical and link-local addresses tend to be used for node-centric purposes (e.g. metadata service).
 | 
			
		||||
	allErrs := errs.ValidationErrorList{}
 | 
			
		||||
	ip := net.ParseIP(ipAddress)
 | 
			
		||||
	if ip == nil {
 | 
			
		||||
		allErrs = append(allErrs, errs.NewFieldInvalid(fieldName, ipAddress, "not a valid IP address"))
 | 
			
		||||
		return allErrs
 | 
			
		||||
	}
 | 
			
		||||
	if ip.IsLoopback() {
 | 
			
		||||
		allErrs = append(allErrs, errs.NewFieldInvalid("ip", address.IP, "may not be in the loopback range (127.0.0.0/8)"))
 | 
			
		||||
		allErrs = append(allErrs, errs.NewFieldInvalid(fieldName, ipAddress, "may not be in the loopback range (127.0.0.0/8)"))
 | 
			
		||||
	}
 | 
			
		||||
	if ip.IsLinkLocalUnicast() {
 | 
			
		||||
		allErrs = append(allErrs, errs.NewFieldInvalid("ip", address.IP, "may not be in the link-local range (169.254.0.0/16)"))
 | 
			
		||||
		allErrs = append(allErrs, errs.NewFieldInvalid(fieldName, ipAddress, "may not be in the link-local range (169.254.0.0/16)"))
 | 
			
		||||
	}
 | 
			
		||||
	if ip.IsLinkLocalMulticast() {
 | 
			
		||||
		allErrs = append(allErrs, errs.NewFieldInvalid("ip", address.IP, "may not be in the link-local multicast range (224.0.0.0/24)"))
 | 
			
		||||
		allErrs = append(allErrs, errs.NewFieldInvalid(fieldName, ipAddress, "may not be in the link-local multicast range (224.0.0.0/24)"))
 | 
			
		||||
	}
 | 
			
		||||
	return allErrs
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user