aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Chris OHaver <cohaver@infoblox.com> 2017-01-15 14:37:18 +0000
committerGravatar Chris OHaver <cohaver@infoblox.com> 2017-01-15 14:37:18 +0000
commit2d0b8293a416771ebc2ba01861bdce4f78915c04 (patch)
treefa13b684d88e47ffb3013ab10f51cd814c367740
parent52e01264e8a5901209f83335aa96e091c93ced7e (diff)
downloadcoredns-2d0b8293a416771ebc2ba01861bdce4f78915c04.tar.gz
coredns-2d0b8293a416771ebc2ba01861bdce4f78915c04.tar.zst
coredns-2d0b8293a416771ebc2ba01861bdce4f78915c04.zip
Add txt response per k8s spec
-rw-r--r--middleware/kubernetes/kubernetes.go34
-rw-r--r--test/kubernetes_test.go7
2 files changed, 37 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")
}
diff --git a/test/kubernetes_test.go b/test/kubernetes_test.go
index e93bea973..69bd6502c 100644
--- a/test/kubernetes_test.go
+++ b/test/kubernetes_test.go
@@ -218,6 +218,13 @@ var dnsTestCases = []test.Case{
test.PTR("115.0.0.10.in-addr.arpa. 303 IN PTR svc-c.test-1.svc.cluster.local."),
},
},
+ {
+ Qname: "dns-version.cluster.local.", Qtype: dns.TypeTXT,
+ Rcode: dns.RcodeSuccess,
+ Answer: []dns.RR{
+ test.TXT("dns-version.cluster.local. 28800 IN TXT \"1.0.0\""),
+ },
+ },
}
var dnsTestCasesPodsInsecure = []test.Case{