mirror of https://github.com/kubernetes/kops.git
				
				
				
			Merge pull request #15493 from justinsb/hetzner_kops_controller
Use kops-controller on hetzner, even with gossip
This commit is contained in:
		
						commit
						38b99df517
					
				|  | @ -52,11 +52,14 @@ func UseChallengeCallback(cloudProvider kops.CloudProviderID) bool { | |||
| 
 | ||||
| // UseKopsControllerForNodeConfig checks if nodeup should use kops-controller to get nodeup.Config.
 | ||||
| func UseKopsControllerForNodeConfig(cluster *kops.Cluster) bool { | ||||
| 	switch cluster.Spec.GetCloudProvider() { | ||||
| 	case kops.CloudProviderGCE: | ||||
| 		// We can use cloud-discovery here.
 | ||||
| 	default: | ||||
| 		if cluster.UsesLegacyGossip() { | ||||
| 	if cluster.UsesLegacyGossip() { | ||||
| 		switch cluster.Spec.GetCloudProvider() { | ||||
| 		case kops.CloudProviderGCE: | ||||
| 			// We can use cloud-discovery here.
 | ||||
| 		case kops.CloudProviderHetzner: | ||||
| 			// We don't have a cloud-discovery mechanism implemented in nodeup for hetzner,
 | ||||
| 			// but we assume that we're using a load balancer with a fixed IP address
 | ||||
| 		default: | ||||
| 			return false | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -60,7 +60,7 @@ func (b *LoadBalancerModelBuilder) Build(c *fi.CloudupModelBuilderContext) error | |||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	if b.Cluster.UsesNoneDNS() { | ||||
| 	if b.Cluster.UsesNoneDNS() || b.UseKopsControllerForNodeBootstrap() { | ||||
| 		loadbalancer.Services = append(loadbalancer.Services, &hetznertasks.LoadBalancerService{ | ||||
| 			Protocol:        string(hcloud.LoadBalancerServiceProtocolTCP), | ||||
| 			ListenerPort:    fi.PtrTo(wellknownports.KopsControllerPort), | ||||
|  |  | |||
|  | @ -1419,44 +1419,64 @@ func (n *nodeUpConfigBuilder) BuildConfig(ig *kops.InstanceGroup, apiserverAddit | |||
| 	} | ||||
| 
 | ||||
| 	// Set API server address to an IP from the cluster network CIDR
 | ||||
| 	var controlPlaneIPs []string | ||||
| 	switch cluster.Spec.GetCloudProvider() { | ||||
| 	case kops.CloudProviderAWS, kops.CloudProviderHetzner, kops.CloudProviderOpenstack: | ||||
| 		// Use a private IP address that belongs to the cluster network CIDR (some additional addresses may be FQDNs or public IPs)
 | ||||
| 		for _, additionalIP := range apiserverAdditionalIPs { | ||||
| 			for _, networkCIDR := range append(cluster.Spec.Networking.AdditionalNetworkCIDRs, cluster.Spec.Networking.NetworkCIDR) { | ||||
| 				_, cidr, err := net.ParseCIDR(networkCIDR) | ||||
| 				if err != nil { | ||||
| 					return nil, nil, fmt.Errorf("failed to parse network CIDR %q: %w", networkCIDR, err) | ||||
| 				} | ||||
| 				if cidr.Contains(net.ParseIP(additionalIP)) { | ||||
| 					controlPlaneIPs = append(controlPlaneIPs, additionalIP) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 	case kops.CloudProviderDO, kops.CloudProviderScaleway: | ||||
| 		// Use any IP address that is found (including public ones)
 | ||||
| 		for _, additionalIP := range apiserverAdditionalIPs { | ||||
| 			controlPlaneIPs = append(controlPlaneIPs, additionalIP) | ||||
| 		} | ||||
| 
 | ||||
| 	case kops.CloudProviderGCE: | ||||
| 		// Use any IP address that is found (including public ones)
 | ||||
| 		for _, additionalIP := range apiserverAdditionalIPs { | ||||
| 			controlPlaneIPs = append(controlPlaneIPs, additionalIP) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if cluster.UsesNoneDNS() { | ||||
| 		switch cluster.Spec.GetCloudProvider() { | ||||
| 		case kops.CloudProviderAWS, kops.CloudProviderHetzner, kops.CloudProviderOpenstack: | ||||
| 			// Use a private IP address that belongs to the cluster network CIDR (some additional addresses may be FQDNs or public IPs)
 | ||||
| 			for _, additionalIP := range apiserverAdditionalIPs { | ||||
| 				for _, networkCIDR := range append(cluster.Spec.Networking.AdditionalNetworkCIDRs, cluster.Spec.Networking.NetworkCIDR) { | ||||
| 					_, cidr, err := net.ParseCIDR(networkCIDR) | ||||
| 					if err != nil { | ||||
| 						return nil, nil, fmt.Errorf("failed to parse network CIDR %q: %w", networkCIDR, err) | ||||
| 					} | ||||
| 					if cidr.Contains(net.ParseIP(additionalIP)) { | ||||
| 						bootConfig.APIServerIPs = append(bootConfig.APIServerIPs, additionalIP) | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			bootConfig.APIServerIPs = controlPlaneIPs | ||||
| 
 | ||||
| 		case kops.CloudProviderDO, kops.CloudProviderScaleway: | ||||
| 			// Use any IP address that is found (including public ones)
 | ||||
| 			for _, additionalIP := range apiserverAdditionalIPs { | ||||
| 				bootConfig.APIServerIPs = append(bootConfig.APIServerIPs, additionalIP) | ||||
| 			} | ||||
| 			bootConfig.APIServerIPs = controlPlaneIPs | ||||
| 
 | ||||
| 		case kops.CloudProviderGCE: | ||||
| 			// Use any IP address that is found (including public ones)
 | ||||
| 			for _, additionalIP := range apiserverAdditionalIPs { | ||||
| 				bootConfig.APIServerIPs = append(bootConfig.APIServerIPs, additionalIP) | ||||
| 			} | ||||
| 			bootConfig.APIServerIPs = controlPlaneIPs | ||||
| 
 | ||||
| 		default: | ||||
| 			return nil, nil, fmt.Errorf("'none' DNS topology is not supported for cloud %q", cluster.Spec.GetCloudProvider()) | ||||
| 		} | ||||
| 	} else { | ||||
| 		// If we do have a fixed IP, we use it (on some clouds, initially)
 | ||||
| 		switch cluster.Spec.GetCloudProvider() { | ||||
| 		case kops.CloudProviderHetzner: | ||||
| 			bootConfig.APIServerIPs = controlPlaneIPs | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	useConfigServer := apiModel.UseKopsControllerForNodeConfig(cluster) && !ig.HasAPIServer() | ||||
| 	if useConfigServer { | ||||
| 		hosts := []string{"kops-controller.internal." + cluster.ObjectMeta.Name} | ||||
| 		if cluster.UsesNoneDNS() && len(bootConfig.APIServerIPs) > 0 { | ||||
| 		if len(bootConfig.APIServerIPs) > 0 { | ||||
| 			hosts = bootConfig.APIServerIPs | ||||
| 		} | ||||
| 
 | ||||
| 		configServer := &nodeup.ConfigServerOptions{ | ||||
| 			CACertificates: config.CAs[fi.CertificateIDCA], | ||||
| 		} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue