diff --git a/pkg/services/apiserver/aggregator/availableController.go b/pkg/services/apiserver/aggregator/availableController.go index e1935469c97..045e45a6d2e 100644 --- a/pkg/services/apiserver/aggregator/availableController.go +++ b/pkg/services/apiserver/aggregator/availableController.go @@ -127,7 +127,10 @@ func NewAvailableConditionController( func (c *AvailableConditionController) sync(key string) error { originalAPIService, err := c.apiServiceLister.Get(key) if apierrors.IsNotFound(err) { - c.metrics.ForgetAPIService(key) + if originalAPIService.Spec.Service != nil { + // Only reset state, if the service was a remote service + c.metrics.ForgetAPIService(key) + } return nil } if err != nil { @@ -292,7 +295,10 @@ func (c *AvailableConditionController) sync(key string) error { // apiservices. Doing that means we don't want to quickly issue no-op updates. func (c *AvailableConditionController) updateAPIServiceStatus(originalAPIService, newAPIService *apiregistrationv1.APIService) (*apiregistrationv1.APIService, error) { // update this metric on every sync operation to reflect the actual state - c.metrics.SetUnavailableGauge(newAPIService) + if newAPIService.Spec.Service != nil { + // Only expose the metric for remote services, trusts the type on the new object + c.metrics.SetUnavailableGauge(newAPIService) + } if equality.Semantic.DeepEqual(originalAPIService.Status, newAPIService.Status) { return newAPIService, nil @@ -319,7 +325,10 @@ func (c *AvailableConditionController) updateAPIServiceStatus(originalAPIService return nil, err } - c.metrics.SetUnavailableCounter(originalAPIService, newAPIService) + if newAPIService.Spec.Service != nil { + // Only expose the metric for remote services, trusts the type on the new object + c.metrics.SetUnavailableCounter(originalAPIService, newAPIService) + } return newAPIService, nil }