aboutsummaryrefslogtreecommitdiff
path: root/plugin/kubernetes/kubernetes.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/kubernetes/kubernetes.go')
-rw-r--r--plugin/kubernetes/kubernetes.go23
1 files changed, 19 insertions, 4 deletions
diff --git a/plugin/kubernetes/kubernetes.go b/plugin/kubernetes/kubernetes.go
index d8173769c..f51ee8e3b 100644
--- a/plugin/kubernetes/kubernetes.go
+++ b/plugin/kubernetes/kubernetes.go
@@ -331,8 +331,18 @@ func (k *Kubernetes) findPods(r recordRequest, zone string) (pods []msg.Service,
func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.Service, err error) {
zonePath := msg.Path(zone, "coredns")
err = errNoItems // Set to errNoItems to signal really nothing found, gets reset when name is matched.
-
- for _, svc := range k.APIConn.ServiceList() {
+ var (
+ endpointsList []*api.Endpoints
+ serviceList []*api.Service
+ idx string
+ )
+ if wildcard(r.service) || wildcard(r.namespace) {
+ serviceList = k.APIConn.ServiceList()
+ } else {
+ idx = r.service + "." + r.namespace
+ serviceList = k.APIConn.SvcIndex(idx)
+ }
+ for _, svc := range serviceList {
if !(match(r.namespace, svc.Namespace) && match(r.service, svc.Name)) {
continue
@@ -346,8 +356,13 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.
// Endpoint query or headless service
if svc.Spec.ClusterIP == api.ClusterIPNone || r.endpoint != "" {
-
- for _, ep := range k.APIConn.EndpointsList() {
+ if wildcard(r.service) || wildcard(r.namespace) {
+ endpointsList = k.APIConn.EndpointsList()
+ } else {
+ idx = r.service + "." + r.namespace
+ endpointsList = k.APIConn.EpIndex(idx)
+ }
+ for _, ep := range endpointsList {
if ep.ObjectMeta.Name != svc.Name || ep.ObjectMeta.Namespace != svc.Namespace {
continue
}