plugin/kubernetes: check for bare zone query (#1692)

* check for bare zone query

* check for bare type query
This commit is contained in:
Chris O'Haver 2018-04-18 12:12:28 -04:00 committed by GitHub
parent 9a7e487a5a
commit 51e1442bd9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 49 additions and 1 deletions

View file

@ -231,6 +231,20 @@ var dnsTestCases = []test.Case{
test.AAAA("5678-abcd--1.hdls1.testns.svc.cluster.local. 5 IN AAAA 5678:abcd::1"),
},
},
{
Qname: "svc.cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeSuccess,
Ns: []dns.RR{
test.SOA("cluster.local. 303 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 60"),
},
},
{
Qname: "pod.cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeSuccess,
Ns: []dns.RR{
test.SOA("cluster.local. 303 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 60"),
},
},
}
func TestServeDNS(t *testing.T) {

View file

@ -273,6 +273,9 @@ func (k *Kubernetes) Records(state request.Request, exact bool) ([]msg.Service,
if e != nil {
return nil, e
}
if r.podOrSvc == "" {
return nil, nil
}
if dnsutil.IsReverse(state.Name()) > 0 {
return nil, errNoItems

View file

@ -35,6 +35,27 @@ var kubeApexCases = []test.Case{
test.A("ns.dns.cluster.local. 303 IN A 127.0.0.1"),
},
},
{
Qname: "cluster.local.", Qtype: dns.TypeA,
Rcode: dns.RcodeSuccess,
Ns: []dns.RR{
test.SOA("cluster.local. 303 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 60"),
},
},
{
Qname: "cluster.local.", Qtype: dns.TypeAAAA,
Rcode: dns.RcodeSuccess,
Ns: []dns.RR{
test.SOA("cluster.local. 303 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 60"),
},
},
{
Qname: "cluster.local.", Qtype: dns.TypeSRV,
Rcode: dns.RcodeSuccess,
Ns: []dns.RR{
test.SOA("cluster.local. 303 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 60"),
},
},
}
func TestServeDNSApex(t *testing.T) {

View file

@ -35,6 +35,10 @@ func parseRequest(state request.Request) (r recordRequest, err error) {
// Federations are handled in the federation plugin. And aren't parsed here.
base, _ := dnsutil.TrimZone(state.Name(), state.Zone)
// return NODATA for apex queries
if base == "" || base == Svc || base == Pod {
return r, nil
}
segs := dns.SplitDomainName(base)
r.port = "*"

View file

@ -19,6 +19,12 @@ func TestParseRequest(t *testing.T) {
{"*.any.*.any.svc.inter.webs.test.", "*.any..*.any.svc"},
// A request of endpoint
{"1-2-3-4.webs.mynamespace.svc.inter.webs.test.", "*.*.1-2-3-4.webs.mynamespace.svc"},
// bare zone
{"inter.webs.test.", "....."},
// bare svc type
{"svc.inter.webs.test.", "....."},
// bare pod type
{"pod.inter.webs.test.", "....."},
}
for i, tc := range tests {
m := new(dns.Msg)
@ -53,4 +59,4 @@ func TestParseInvalidRequest(t *testing.T) {
}
}
const zone = "intern.webs.tests."
const zone = "inter.webs.tests."