aboutsummaryrefslogtreecommitdiff
path: root/plugin
diff options
context:
space:
mode:
Diffstat (limited to 'plugin')
-rw-r--r--plugin/kubernetes/handler_ignore_emptyservice_test.go8
-rw-r--r--plugin/kubernetes/kubernetes.go4
2 files changed, 11 insertions, 1 deletions
diff --git a/plugin/kubernetes/handler_ignore_emptyservice_test.go b/plugin/kubernetes/handler_ignore_emptyservice_test.go
index 49cf6af96..ee5a4e88c 100644
--- a/plugin/kubernetes/handler_ignore_emptyservice_test.go
+++ b/plugin/kubernetes/handler_ignore_emptyservice_test.go
@@ -19,6 +19,14 @@ var dnsEmptyServiceTestCases = []test.Case{
test.SOA("cluster.local. 5 IN SOA ns.dns.cluster.local. hostmaster.cluster.local. 1499347823 7200 1800 86400 5"),
},
},
+ // CNAME to external
+ {
+ Qname: "external.testns.svc.cluster.local.", Qtype: dns.TypeCNAME,
+ Rcode: dns.RcodeSuccess,
+ Answer: []dns.RR{
+ test.CNAME("external.testns.svc.cluster.local. 5 IN CNAME ext.interwebs.test."),
+ },
+ },
}
func TestServeDNSEmptyService(t *testing.T) {
diff --git a/plugin/kubernetes/kubernetes.go b/plugin/kubernetes/kubernetes.go
index 4e214e6bc..1b8214415 100644
--- a/plugin/kubernetes/kubernetes.go
+++ b/plugin/kubernetes/kubernetes.go
@@ -439,7 +439,9 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.
continue
}
- if k.opts.ignoreEmptyService && svc.ClusterIP != api.ClusterIPNone {
+ // If "ignore empty_service" option is set and no endpoints exist, return NXDOMAIN unless
+ // it's a headless or externalName service (covered below).
+ if k.opts.ignoreEmptyService && svc.ClusterIP != api.ClusterIPNone && svc.Type != api.ServiceTypeExternalName {
// serve NXDOMAIN if no endpoint is able to answer
podsCount := 0
for _, ep := range endpointsListFunc() {