diff --git a/cmd/cloud-controller-manager/app/controllermanager.go b/cmd/cloud-controller-manager/app/controllermanager.go index e556ac1ab9b..c01f2cabeb7 100644 --- a/cmd/cloud-controller-manager/app/controllermanager.go +++ b/cmd/cloud-controller-manager/app/controllermanager.go @@ -24,6 +24,7 @@ import ( "os" goruntime "runtime" "strconv" + "strings" "time" clientv1 "k8s.io/api/core/v1" @@ -209,11 +210,6 @@ func StartControllers(s *options.CloudControllerManagerServer, kubeconfig *restc versionedClient := client("shared-informers") sharedInformers := informers.NewSharedInformerFactory(versionedClient, resyncPeriod(s)()) - _, clusterCIDR, err := net.ParseCIDR(s.ClusterCIDR) - if err != nil { - glog.Warningf("Unsuccessful parsing of cluster CIDR %v: %v", s.ClusterCIDR, err) - } - // Start the CloudNodeController nodeController := nodecontroller.NewCloudNodeController( sharedInformers.Core().V1().Nodes(), @@ -244,6 +240,14 @@ func StartControllers(s *options.CloudControllerManagerServer, kubeconfig *restc if routes, ok := cloud.Routes(); !ok { glog.Warning("configure-cloud-routes is set, but cloud provider does not support routes. Will not configure cloud provider routes.") } else { + var clusterCIDR *net.IPNet + if len(strings.TrimSpace(s.ClusterCIDR)) != 0 { + _, clusterCIDR, err = net.ParseCIDR(s.ClusterCIDR) + if err != nil { + glog.Warningf("Unsuccessful parsing of cluster CIDR %v: %v", s.ClusterCIDR, err) + } + } + routeController := routecontroller.New(routes, client("route-controller"), sharedInformers.Core().V1().Nodes(), s.ClusterName, clusterCIDR) go routeController.Run(stop, s.RouteReconciliationPeriod.Duration) time.Sleep(wait.Jitter(s.ControllerStartInterval.Duration, ControllerStartJitter)) diff --git a/cmd/kube-controller-manager/app/core.go b/cmd/kube-controller-manager/app/core.go index e97ec353a3a..12de3bd0031 100644 --- a/cmd/kube-controller-manager/app/core.go +++ b/cmd/kube-controller-manager/app/core.go @@ -23,6 +23,7 @@ package app import ( "fmt" "net" + "strings" "time" "github.com/golang/glog" @@ -74,14 +75,23 @@ func startServiceController(ctx ControllerContext) (bool, error) { } func startNodeController(ctx ControllerContext) (bool, error) { - _, clusterCIDR, err := net.ParseCIDR(ctx.Options.ClusterCIDR) - if err != nil { - glog.Warningf("Unsuccessful parsing of cluster CIDR %v: %v", ctx.Options.ClusterCIDR, err) + var clusterCIDR *net.IPNet + var err error + if len(strings.TrimSpace(ctx.Options.ClusterCIDR)) != 0 { + _, clusterCIDR, err = net.ParseCIDR(ctx.Options.ClusterCIDR) + if err != nil { + glog.Warningf("Unsuccessful parsing of cluster CIDR %v: %v", ctx.Options.ClusterCIDR, err) + } } - _, serviceCIDR, err := net.ParseCIDR(ctx.Options.ServiceCIDR) - if err != nil { - glog.Warningf("Unsuccessful parsing of service CIDR %v: %v", ctx.Options.ServiceCIDR, err) + + var serviceCIDR *net.IPNet + if len(strings.TrimSpace(ctx.Options.ServiceCIDR)) != 0 { + _, serviceCIDR, err = net.ParseCIDR(ctx.Options.ServiceCIDR) + if err != nil { + glog.Warningf("Unsuccessful parsing of service CIDR %v: %v", ctx.Options.ServiceCIDR, err) + } } + nodeController, err := nodecontroller.NewNodeController( ctx.InformerFactory.Core().V1().Pods(), ctx.InformerFactory.Core().V1().Nodes(), diff --git a/pkg/controller/route/routecontroller.go b/pkg/controller/route/routecontroller.go index e7d74d9b0ef..d8c62a70fcf 100644 --- a/pkg/controller/route/routecontroller.go +++ b/pkg/controller/route/routecontroller.go @@ -64,6 +64,11 @@ func New(routes cloudprovider.Routes, kubeClient clientset.Interface, nodeInform if kubeClient != nil && kubeClient.Core().RESTClient().GetRateLimiter() != nil { metrics.RegisterMetricAndTrackRateLimiterUsage("route_controller", kubeClient.Core().RESTClient().GetRateLimiter()) } + + if clusterCIDR == nil { + glog.Fatal("RouteController: Must specify clusterCIDR.") + } + rc := &RouteController{ routes: routes, kubeClient: kubeClient,