diff options
Diffstat (limited to 'middleware/kubernetes/kubernetes.go')
-rw-r--r-- | middleware/kubernetes/kubernetes.go | 34 |
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") } |