diff --git a/discovery/kubernetes/endpoints.go b/discovery/kubernetes/endpoints.go index 97729b1170..b700399ffc 100644 --- a/discovery/kubernetes/endpoints.go +++ b/discovery/kubernetes/endpoints.go @@ -185,10 +185,6 @@ const ( ) func (e *Endpoints) buildEndpoints(eps *apiv1.Endpoints) *targetgroup.Group { - if len(eps.Subsets) == 0 { - return nil - } - tg := &targetgroup.Group{ Source: endpointsSource(eps), } diff --git a/discovery/kubernetes/endpoints_test.go b/discovery/kubernetes/endpoints_test.go index 41f95b73e3..f7fe99f9d6 100644 --- a/discovery/kubernetes/endpoints_test.go +++ b/discovery/kubernetes/endpoints_test.go @@ -339,3 +339,32 @@ func TestEndpointsDiscoveryUpdate(t *testing.T) { }, }.Run(t) } + +func TestEndpointsDiscoveryEmptySubsets(t *testing.T) { + n, _, eps, _ := makeTestEndpointsDiscovery() + eps.GetStore().Add(makeEndpoints()) + + k8sDiscoveryTest{ + discovery: n, + afterStart: func() { + go func() { + eps.Update(&v1.Endpoints{ + ObjectMeta: metav1.ObjectMeta{ + Name: "testendpoints", + Namespace: "default", + }, + Subsets: []v1.EndpointSubset{}, + }) + }() + }, + expectedRes: []*targetgroup.Group{ + { + Labels: model.LabelSet{ + "__meta_kubernetes_namespace": "default", + "__meta_kubernetes_endpoints_name": "testendpoints", + }, + Source: "endpoints/default/testendpoints", + }, + }, + }.Run(t) +} diff --git a/discovery/kubernetes/node.go b/discovery/kubernetes/node.go index 253146e6cb..f6d16aefca 100644 --- a/discovery/kubernetes/node.go +++ b/discovery/kubernetes/node.go @@ -60,6 +60,9 @@ func (n *Node) Run(ctx context.Context, ch chan<- []*targetgroup.Group) { // Send target groups for service updates. send := func(tg *targetgroup.Group) { + if tg == nil { + return + } select { case <-ctx.Done(): case ch <- []*targetgroup.Group{tg}: diff --git a/discovery/kubernetes/pod.go b/discovery/kubernetes/pod.go index 95e9f25b92..d868b1156a 100644 --- a/discovery/kubernetes/pod.go +++ b/discovery/kubernetes/pod.go @@ -68,6 +68,9 @@ func (p *Pod) Run(ctx context.Context, ch chan<- []*targetgroup.Group) { // Send target groups for pod updates. send := func(tg *targetgroup.Group) { + if tg == nil { + return + } level.Debug(p.logger).Log("msg", "pod update", "tg", fmt.Sprintf("%#v", tg)) select { case <-ctx.Done():