diff options
Diffstat (limited to 'middleware/kubernetes')
-rw-r--r-- | middleware/kubernetes/kubernetes.go | 9 | ||||
-rw-r--r-- | middleware/kubernetes/setup.go | 13 |
2 files changed, 21 insertions, 1 deletions
diff --git a/middleware/kubernetes/kubernetes.go b/middleware/kubernetes/kubernetes.go index deab8e453..78c14ee82 100644 --- a/middleware/kubernetes/kubernetes.go +++ b/middleware/kubernetes/kubernetes.go @@ -31,6 +31,7 @@ import ( type Kubernetes struct { Next middleware.Handler Zones []string + primaryZone int Proxy proxy.Proxy // Proxy for looking up names during the resolution process APIEndpoint string APICertAuth string @@ -53,6 +54,11 @@ func (k *Kubernetes) Services(state request.Request, exact bool, opt middleware. return s, nil, e // Haven't implemented debug queries yet. } +// PrimaryZone will return the first non-reverse zone being handled by this middleware +func (k *Kubernetes) PrimaryZone() (string) { + return k.Zones[k.primaryZone] +} + // Reverse implements the ServiceBackend interface. func (k *Kubernetes) Reverse(state request.Request, exact bool, opt middleware.Options) ([]msg.Service, []msg.Service, error) { ip := dnsutil.ExtractAddressFromReverse(state.Name()) @@ -286,7 +292,8 @@ func (k *Kubernetes) getServiceRecordForIP(ip, name string) []msg.Service { } for _, service := range svcList { if service.Spec.ClusterIP == ip { - return []msg.Service{{Host: ip}} + name := k.NameTemplate.RecordNameFromNameValues(nametemplate.NameValues{TypeName: "svc", ServiceName: service.ObjectMeta.Name, Namespace: service.ObjectMeta.Namespace, Zone: k.PrimaryZone()}) + return []msg.Service{msg.Service{Host: name}} } } diff --git a/middleware/kubernetes/setup.go b/middleware/kubernetes/setup.go index 76280dcd5..d2b34b054 100644 --- a/middleware/kubernetes/setup.go +++ b/middleware/kubernetes/setup.go @@ -71,6 +71,19 @@ func kubernetesParse(c *caddy.Controller) (*Kubernetes, error) { return nil, errors.New("Zone name must be provided for kubernetes middleware.") } + k8s.primaryZone = -1 + for i, z := range k8s.Zones { + if strings.HasSuffix(z, "in-addr.arpa.") || strings.HasSuffix(z, "ip6.arpa.") { + continue + } + k8s.primaryZone = i + break + } + + if k8s.primaryZone == -1 { + return nil, errors.New("A non-reverse zone name must be given for Kubernetes.") + } + for c.NextBlock() { switch c.Val() { case "template": |