aboutsummaryrefslogtreecommitdiff
path: root/middleware/kubernetes/reverse.go
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/kubernetes/reverse.go')
-rw-r--r--middleware/kubernetes/reverse.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/middleware/kubernetes/reverse.go b/middleware/kubernetes/reverse.go
new file mode 100644
index 000000000..3edb026f8
--- /dev/null
+++ b/middleware/kubernetes/reverse.go
@@ -0,0 +1,32 @@
+package kubernetes
+
+import (
+ "net"
+
+ "github.com/coredns/coredns/middleware"
+ "github.com/coredns/coredns/middleware/etcd/msg"
+ "github.com/coredns/coredns/middleware/pkg/dnsutil"
+ "github.com/coredns/coredns/request"
+)
+
+// 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
+}
+
+func (k *Kubernetes) isRequestInReverseRange(name string) bool {
+ ip := dnsutil.ExtractAddressFromReverse(name)
+ for _, c := range k.ReverseCidrs {
+ if c.Contains(net.ParseIP(ip)) {
+ return true
+ }
+ }
+ return false
+}