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.go34
1 files changed, 30 insertions, 4 deletions
diff --git a/middleware/kubernetes/kubernetes.go b/middleware/kubernetes/kubernetes.go
index be0a57778..9141cd40a 100644
--- a/middleware/kubernetes/kubernetes.go
+++ b/middleware/kubernetes/kubernetes.go
@@ -44,8 +44,9 @@ type Kubernetes struct {
}
const (
- PodModeDisabled = "disabled" // default. pod requests are ignored
- PodModeInsecure = "insecure" // ALL pod requests are answered without verfying they exist
+ PodModeDisabled = "disabled" // default. pod requests are ignored
+ PodModeInsecure = "insecure" // ALL pod requests are answered without verfying they exist
+ DnsSchemaVersion = "1.0.0" // https://github.com/kubernetes/dns/blob/master/docs/specification.md
)
type endpoint struct {
@@ -82,8 +83,28 @@ func (k *Kubernetes) Services(state request.Request, exact bool, opt middleware.
if e != nil {
return nil, nil, e
}
- s, e := k.Records(r)
- return s, nil, e // Haven't implemented debug queries yet.
+
+ switch state.Type() {
+ case "A", "SRV":
+ s, e := k.Records(r)
+ return s, nil, e // Haven't implemented debug queries yet.
+ case "TXT":
+ s, e := k.recordsForTXT(r)
+ return s, nil, e
+ }
+ return nil, nil, nil
+}
+
+func (k *Kubernetes) recordsForTXT(r recordRequest) ([]msg.Service, error) {
+ switch r.typeName {
+ case "dns-version":
+ s := msg.Service{
+ Text: DnsSchemaVersion,
+ TTL: 28800,
+ Key: msg.Path(r.typeName+"."+r.zone, "coredns")}
+ return []msg.Service{s}, nil
+ }
+ return nil, nil
}
// PrimaryZone will return the first non-reverse zone being handled by this middleware
@@ -253,6 +274,11 @@ func (k *Kubernetes) parseRequest(lowerCasedName, qtype string) (r recordRequest
return r, nil
}
+ if len(segs) == 1 && qtype == "TXT" {
+ r.typeName = segs[0]
+ return r, nil
+ }
+
return r, errors.New("invalid request")
}