diff options
Diffstat (limited to 'plugin/kubernetes/kubernetes.go')
-rw-r--r-- | plugin/kubernetes/kubernetes.go | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/plugin/kubernetes/kubernetes.go b/plugin/kubernetes/kubernetes.go index ec0d5a4b1..9e4633ca8 100644 --- a/plugin/kubernetes/kubernetes.go +++ b/plugin/kubernetes/kubernetes.go @@ -100,15 +100,23 @@ func (k *Kubernetes) Services(ctx context.Context, state request.Request, exact // 1 label + zone, label must be "dns-version". t, _ := dnsutil.TrimZone(state.Name(), state.Zone) + // Hard code the only valid TXT - "dns-version.<zone>" segs := dns.SplitDomainName(t) - if len(segs) != 1 { - return nil, nil + if len(segs) == 1 && segs[0] == "dns-version" { + svc := msg.Service{Text: DNSSchemaVersion, TTL: 28800, Key: msg.Path(state.QName(), coredns)} + return []msg.Service{svc}, nil } - if segs[0] != "dns-version" { + + // Check if we have an existing record for this query of another type + services, _ := k.Records(ctx, state, false) + + if len(services) > 0 { + // If so we return an empty NOERROR return nil, nil } - svc := msg.Service{Text: DNSSchemaVersion, TTL: 28800, Key: msg.Path(state.QName(), coredns)} - return []msg.Service{svc}, nil + + // Return NXDOMAIN for no match + return nil, errNoItems case dns.TypeNS: // We can only get here if the qname equals the zone, see ServeDNS in handler.go. |