From c147e203736b16751cc70d694deb326447d6571e Mon Sep 17 00:00:00 2001 From: Chris O'Haver Date: Tue, 7 May 2019 20:31:50 -0400 Subject: [PATCH] make ignore empty work with ext svc types (#2823) --- plugin/kubernetes/handler_ignore_emptyservice_test.go | 8 ++++++++ plugin/kubernetes/kubernetes.go | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) 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() {