diff options
Diffstat (limited to 'plugin/kubernetes/kubernetes.go')
-rw-r--r-- | plugin/kubernetes/kubernetes.go | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/plugin/kubernetes/kubernetes.go b/plugin/kubernetes/kubernetes.go index 847857924..d07b99f0e 100644 --- a/plugin/kubernetes/kubernetes.go +++ b/plugin/kubernetes/kubernetes.go @@ -89,7 +89,6 @@ var ( // Services implements the ServiceBackend interface. func (k *Kubernetes) Services(state request.Request, exact bool, opt plugin.Options) (svcs []msg.Service, err error) { - // We're looking again at types, which we've already done in ServeDNS, but there are some types k8s just can't answer. switch state.QType() { @@ -240,7 +239,6 @@ func (k *Kubernetes) getClientConfig() (*rest.Config, error) { // InitKubeCache initializes a new Kubernetes cache. func (k *Kubernetes) InitKubeCache() (err error) { - config, err := k.getClientConfig() if err != nil { return err @@ -398,7 +396,6 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg. } for _, svc := range serviceList { - if !(match(r.namespace, svc.Namespace) && match(r.service, svc.Name)) { continue } @@ -409,6 +406,20 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg. continue } + if k.opts.ignoreEmptyService && svc.Spec.ClusterIP != api.ClusterIPNone { + // serve NXDOMAIN if no endpoint is able to answer + podsCount := 0 + for _, ep := range endpointsListFunc() { + for _, eps := range ep.Subsets { + podsCount = podsCount + len(eps.Addresses) + } + } + + if podsCount == 0 { + continue + } + } + // Endpoint query or headless service if svc.Spec.ClusterIP == api.ClusterIPNone || r.endpoint != "" { if endpointsList == nil { |