diff --git a/core/pkg/ingress/controller/controller.go b/core/pkg/ingress/controller/controller.go index 459b9158c..e4b5f6a8b 100644 --- a/core/pkg/ingress/controller/controller.go +++ b/core/pkg/ingress/controller/controller.go @@ -39,6 +39,7 @@ import ( "k8s.io/client-go/kubernetes/scheme" unversionedcore "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/client-go/tools/cache" + fcache "k8s.io/client-go/tools/cache/testing" "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" "k8s.io/ingress/core/pkg/ingress" @@ -130,6 +131,7 @@ type Configuration struct { ConfigMapName string ForceNamespaceIsolation bool + DisableNodeList bool // optional TCPConfigMapName string @@ -324,8 +326,14 @@ func newIngressController(config *Configuration) *GenericController { cache.NewListWatchFromClient(ic.cfg.Client.CoreV1().RESTClient(), "services", ic.cfg.Namespace, fields.Everything()), &api.Service{}, ic.cfg.ResyncPeriod, cache.ResourceEventHandlerFuncs{}) + var nodeListerWatcher cache.ListerWatcher + if config.DisableNodeList { + nodeListerWatcher = fcache.NewFakeControllerSource() + } else { + nodeListerWatcher = cache.NewListWatchFromClient(ic.cfg.Client.CoreV1().RESTClient(), "nodes", api.NamespaceAll, fields.Everything()) + } ic.nodeLister.Store, ic.nodeController = cache.NewInformer( - cache.NewListWatchFromClient(ic.cfg.Client.CoreV1().RESTClient(), "nodes", api.NamespaceAll, fields.Everything()), + nodeListerWatcher, &api.Node{}, ic.cfg.ResyncPeriod, cache.ResourceEventHandlerFuncs{}) if config.UpdateStatus { diff --git a/core/pkg/ingress/controller/launch.go b/core/pkg/ingress/controller/launch.go index 3236e7981..fd2403f3a 100644 --- a/core/pkg/ingress/controller/launch.go +++ b/core/pkg/ingress/controller/launch.go @@ -56,14 +56,14 @@ func NewIngressController(backend ingress.Controller) *GenericController { tcpConfigMapName = flags.String("tcp-services-configmap", "", `Name of the ConfigMap that contains the definition of the TCP services to expose. The key in the map indicates the external port to be used. The value is the name of the - service with the format namespace/serviceName and the port of the service could be a + service with the format namespace/serviceName and the port of the service could be a number of the name of the port. The ports 80 and 443 are not allowed as external ports. This ports are reserved for the backend`) udpConfigMapName = flags.String("udp-services-configmap", "", `Name of the ConfigMap that contains the definition of the UDP services to expose. The key in the map indicates the external port to be used. The value is the name of the - service with the format namespace/serviceName and the port of the service could be a + service with the format namespace/serviceName and the port of the service could be a number of the name of the port.`) resyncPeriod = flags.Duration("sync-period", 600*time.Second, @@ -76,23 +76,26 @@ func NewIngressController(backend ingress.Controller) *GenericController { profiling = flags.Bool("profiling", true, `Enable profiling via web interface host:port/debug/pprof/`) - defSSLCertificate = flags.String("default-ssl-certificate", "", `Name of the secret + defSSLCertificate = flags.String("default-ssl-certificate", "", `Name of the secret that contains a SSL certificate to be used as default for a HTTPS catch-all server`) - defHealthzURL = flags.String("health-check-path", "/healthz", `Defines + defHealthzURL = flags.String("health-check-path", "/healthz", `Defines the URL to be used as health check inside in the default server in NGINX.`) - updateStatus = flags.Bool("update-status", true, `Indicates if the + updateStatus = flags.Bool("update-status", true, `Indicates if the ingress controller should update the Ingress status IP/hostname. Default is true`) electionID = flags.String("election-id", "ingress-controller-leader", `Election id to use for status update.`) forceIsolation = flags.Bool("force-namespace-isolation", false, - `Force namespace isolation. This flag is required to avoid the reference of secrets or + `Force namespace isolation. This flag is required to avoid the reference of secrets or configmaps located in a different namespace than the specified in the flag --watch-namespace.`) - updateStatusOnShutdown = flags.Bool("update-status-on-shutdown", true, `Indicates if the - ingress controller should update the Ingress status IP/hostname when the controller + disableNodeList = flags.Bool("disable-node-list", false, + `Disable querying nodes. If --force-namespace-isolation is true, this should also be set.`) + + updateStatusOnShutdown = flags.Bool("update-status-on-shutdown", true, `Indicates if the + ingress controller should update the Ingress status IP/hostname when the controller is being stopped. Default is true`) sortBackends = flags.Bool("sort-backends", false, @@ -183,6 +186,7 @@ func NewIngressController(backend ingress.Controller) *GenericController { PublishService: *publishSvc, Backend: backend, ForceNamespaceIsolation: *forceIsolation, + DisableNodeList: *disableNodeList, UpdateStatusOnShutdown: *updateStatusOnShutdown, SortBackends: *sortBackends, }