aboutsummaryrefslogtreecommitdiff
path: root/middleware/kubernetes/kubernetes.go
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/kubernetes/kubernetes.go')
-rw-r--r--middleware/kubernetes/kubernetes.go38
1 files changed, 27 insertions, 11 deletions
diff --git a/middleware/kubernetes/kubernetes.go b/middleware/kubernetes/kubernetes.go
index 7c64580c1..4fa1e494b 100644
--- a/middleware/kubernetes/kubernetes.go
+++ b/middleware/kubernetes/kubernetes.go
@@ -15,20 +15,24 @@ import (
"github.com/miekg/dns"
"k8s.io/kubernetes/pkg/api"
- "k8s.io/kubernetes/pkg/client/unversioned"
+ unversionedapi "k8s.io/kubernetes/pkg/api/unversioned"
+ "k8s.io/kubernetes/pkg/labels"
+ unversionedclient "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
)
type Kubernetes struct {
- Next middleware.Handler
- Zones []string
- Proxy proxy.Proxy // Proxy for looking up names during the resolution process
- APIEndpoint string
- APIConn *dnsController
- ResyncPeriod time.Duration
- NameTemplate *nametemplate.NameTemplate
- Namespaces []string
+ Next middleware.Handler
+ Zones []string
+ Proxy proxy.Proxy // Proxy for looking up names during the resolution process
+ APIEndpoint string
+ APIConn *dnsController
+ ResyncPeriod time.Duration
+ NameTemplate *nametemplate.NameTemplate
+ Namespaces []string
+ LabelSelector *unversionedapi.LabelSelector
+ Selector *labels.Selector
}
func (g *Kubernetes) StartKubeCache() error {
@@ -45,14 +49,26 @@ func (g *Kubernetes) StartKubeCache() error {
log.Printf("[debug] error connecting to the client: %v", err)
return err
}
- kubeClient, err := unversioned.New(config)
+ kubeClient, err := unversionedclient.New(config)
if err != nil {
log.Printf("[ERROR] Failed to create kubernetes notification controller: %v", err)
return err
}
+ if g.LabelSelector == nil {
+ log.Printf("[INFO] Kubernetes middleware configured without a label selector. No label-based filtering will be operformed.")
+ } else {
+ var selector labels.Selector
+ selector, err = unversionedapi.LabelSelectorAsSelector(g.LabelSelector)
+ g.Selector = &selector
+ if err != nil {
+ log.Printf("[ERROR] Unable to create Selector for LabelSelector '%s'.Error was: %s", g.LabelSelector, err)
+ return err
+ }
+ log.Printf("[INFO] Kubernetes middleware configured with the label selector '%s'. Only kubernetes objects matching this label selector will be exposed.", unversionedapi.FormatLabelSelector(g.LabelSelector))
+ }
log.Printf("[debug] Starting kubernetes middleware with k8s API resync period: %s", g.ResyncPeriod)
- g.APIConn = newdnsController(kubeClient, g.ResyncPeriod)
+ g.APIConn = newdnsController(kubeClient, g.ResyncPeriod, g.Selector)
go g.APIConn.Run()