diff options
Diffstat (limited to 'plugin/kubernetes/kubernetes.go')
-rw-r--r-- | plugin/kubernetes/kubernetes.go | 19 |
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 } |