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.go19
1 files changed, 18 insertions, 1 deletions
diff --git a/plugin/kubernetes/kubernetes.go b/plugin/kubernetes/kubernetes.go
index 83b4b02d1..991323e76 100644
--- a/plugin/kubernetes/kubernetes.go
+++ b/plugin/kubernetes/kubernetes.go
@@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"net"
+ "strconv"
"strings"
"github.com/coredns/coredns/plugin"
@@ -18,6 +19,7 @@ import (
"github.com/miekg/dns"
api "k8s.io/api/core/v1"
+ discovery "k8s.io/api/discovery/v1beta1"
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/client-go/kubernetes"
@@ -244,6 +246,20 @@ func (k *Kubernetes) InitKubeCache(ctx context.Context) (err error) {
k.opts.zones = k.Zones
k.opts.endpointNameMode = k.endpointNameMode
+ // Enable use of endpoint slices if the API supports the discovery v1 beta1 api
+ if _, err := kubeClient.Discovery().ServerResourcesForGroupVersion(discovery.SchemeGroupVersion.String()); err == nil {
+ k.opts.useEndpointSlices = true
+ }
+ // Disable use of endpoint slices for k8s versions 1.18 and earlier. Endpoint slices were
+ // introduced in 1.17 but EndpointSliceMirroring was not added until 1.19.
+ sv, _ := kubeClient.ServerVersion()
+ major, _ := strconv.Atoi(sv.Major)
+ minor, _ := strconv.Atoi(sv.Minor)
+ if k.opts.useEndpointSlices && major <= 1 && minor <= 18 {
+ log.Info("watching Endpoints instead of EndpointSlices in k8s versions < 1.19")
+ k.opts.useEndpointSlices = false
+ }
+
k.APIConn = newdnsController(ctx, kubeClient, k.opts)
return err
@@ -433,8 +449,9 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.
if endpointsList == nil {
endpointsList = endpointsListFunc()
}
+
for _, ep := range endpointsList {
- if ep.Name != svc.Name || ep.Namespace != svc.Namespace {
+ if object.EndpointsKey(svc.Name, svc.Namespace) != ep.Index {
continue
}