From e6ef320d13580548a1ff9a36c3b1365240577ac1 Mon Sep 17 00:00:00 2001 From: Chris O'Haver Date: Mon, 27 Aug 2018 14:41:04 -0400 Subject: handle blank name and namespaces (#2042) --- plugin/kubernetes/kubernetes.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'plugin/kubernetes/kubernetes.go') diff --git a/plugin/kubernetes/kubernetes.go b/plugin/kubernetes/kubernetes.go index eaadb142c..4bdcd4877 100644 --- a/plugin/kubernetes/kubernetes.go +++ b/plugin/kubernetes/kubernetes.go @@ -343,6 +343,16 @@ func (k *Kubernetes) findPods(r recordRequest, zone string) (pods []msg.Service, zonePath := msg.Path(zone, "coredns") ip := "" + // handle empty pod name + if podname == "" { + if k.namespace(namespace) || wildcard(namespace) { + // NODATA + return nil, nil + } + // NXDOMAIN + return nil, errNoItems + } + if strings.Count(podname, "-") == 3 && !strings.Contains(podname, "--") { ip = strings.Replace(podname, "-", ".", -1) } else { @@ -362,6 +372,7 @@ func (k *Kubernetes) findPods(r recordRequest, zone string) (pods []msg.Service, return []msg.Service{{Key: strings.Join([]string{zonePath, Pod, namespace, podname}, "/"), Host: ip, TTL: k.ttl}}, err } + // PodModeVerified err = errNoItems if wildcard(podname) && !wildcard(namespace) { // If namespace exist, err should be nil, so that we return nodata instead of NXDOMAIN @@ -370,7 +381,6 @@ func (k *Kubernetes) findPods(r recordRequest, zone string) (pods []msg.Service, } } - // PodModeVerified for _, p := range k.APIConn.PodIndex(ip) { // If namespace has a wildcard, filter results against Corefile namespace list. if wildcard(namespace) && !k.namespaceExposed(p.Namespace) { @@ -411,6 +421,16 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg. serviceList []*api.Service ) + // handle empty service name + if r.service == "" { + if k.namespace(r.namespace) || wildcard(r.namespace) { + // NODATA + return nil, nil + } + // NXDOMAIN + return nil, errNoItems + } + if wildcard(r.service) || wildcard(r.namespace) { serviceList = k.APIConn.ServiceList() endpointsListFunc = func() []*api.Endpoints { return k.APIConn.EndpointsList() } -- cgit v1.2.3