aboutsummaryrefslogtreecommitdiff
path: root/middleware/kubernetes/kubernetes.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2016-11-05 15:43:27 +0000
committerGravatar GitHub <noreply@github.com> 2016-11-05 15:43:27 +0000
commit8d3418c01535f63129da2fe1ffd5ff8e4ceceb2d (patch)
treeb36578d8d551e79810b504db8dac9550330c40d7 /middleware/kubernetes/kubernetes.go
parent2cca527d9f17fd1595366545c47630bf35591873 (diff)
downloadcoredns-8d3418c01535f63129da2fe1ffd5ff8e4ceceb2d.tar.gz
coredns-8d3418c01535f63129da2fe1ffd5ff8e4ceceb2d.tar.zst
coredns-8d3418c01535f63129da2fe1ffd5ff8e4ceceb2d.zip
BackendService: add Reverse method (#381)
Add a Reverse method to BackendService because different backends want to to do diff. things. This allows etc/k8s to share even more code and we can unify the PTR handling.
Diffstat (limited to 'middleware/kubernetes/kubernetes.go')
-rw-r--r--middleware/kubernetes/kubernetes.go24
1 files changed, 14 insertions, 10 deletions
diff --git a/middleware/kubernetes/kubernetes.go b/middleware/kubernetes/kubernetes.go
index 05359dc69..d5766377f 100644
--- a/middleware/kubernetes/kubernetes.go
+++ b/middleware/kubernetes/kubernetes.go
@@ -18,13 +18,13 @@ import (
"github.com/miekg/coredns/request"
"github.com/miekg/dns"
+ "k8s.io/client-go/1.5/kubernetes"
"k8s.io/client-go/1.5/pkg/api"
unversionedapi "k8s.io/client-go/1.5/pkg/api/unversioned"
- "k8s.io/client-go/1.5/kubernetes"
+ "k8s.io/client-go/1.5/pkg/labels"
"k8s.io/client-go/1.5/rest"
"k8s.io/client-go/1.5/tools/clientcmd"
clientcmdapi "k8s.io/client-go/1.5/tools/clientcmd/api"
- "k8s.io/client-go/1.5/pkg/labels"
)
// Kubernetes implements a middleware that connects to a Kubernetes cluster.
@@ -50,6 +50,17 @@ func (k *Kubernetes) Services(state request.Request, exact bool, opt middleware.
return s, nil, e // Haven't implemented debug queries yet.
}
+// 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())
+ if ip == "" {
+ return nil, nil, nil
+ }
+
+ records := k.getServiceRecordForIP(ip, state.Name())
+ return records, nil, nil
+}
+
// Lookup implements the ServiceBackend interface.
func (k *Kubernetes) Lookup(state request.Request, name string, typ uint16) (*dns.Msg, error) {
return k.Proxy.Lookup(state, name, typ)
@@ -156,13 +167,6 @@ func (k *Kubernetes) getZoneForName(name string) (string, []string) {
// just this name. This is used when find matches when completing SRV lookups
// for instance.
func (k *Kubernetes) Records(name string, exact bool) ([]msg.Service, error) {
- // TODO: refactor this.
- // Right now NamespaceFromSegmentArray do not supports PRE queries
- ip := dnsutil.ExtractAddressFromReverse(name)
- if ip != "" {
- records := k.getServiceRecordForIP(ip, name)
- return records, nil
- }
var (
serviceName string
namespace string
@@ -223,7 +227,7 @@ func (k *Kubernetes) getRecordsForServiceItems(serviceItems []*api.Service, zone
key = strings.Replace(key, ".", "/", -1)
for i, p := range item.Spec.Ports {
- s := msg.Service{Key: msg.Path(strconv.Itoa(i) + "." + key, "coredns"), Host: clusterIP, Port: int(p.Port)}
+ s := msg.Service{Key: msg.Path(strconv.Itoa(i)+"."+key, "coredns"), Host: clusterIP, Port: int(p.Port)}
records = append(records, s)
}
}