aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Chris O'Haver <cohaver@infoblox.com> 2019-05-07 20:31:50 -0400
committerGravatar John Belamaric <jbelamaric@google.com> 2019-05-07 17:31:50 -0700
commitc147e203736b16751cc70d694deb326447d6571e (patch)
treec74691448cf2618a1aeb9c0e6e963b18a6bec85b
parent6e1c57acfa7db3d8ac61f7628c8ce979dcf21bbf (diff)
downloadcoredns-c147e203736b16751cc70d694deb326447d6571e.tar.gz
coredns-c147e203736b16751cc70d694deb326447d6571e.tar.zst
coredns-c147e203736b16751cc70d694deb326447d6571e.zip
make ignore empty work with ext svc types (#2823)
-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() {