2022-05-17 16:40:51 +02:00
|
|
|
package dclient
|
2019-05-15 07:30:22 -07:00
|
|
|
|
|
|
|
import (
|
2019-06-11 14:35:26 -07:00
|
|
|
"strings"
|
|
|
|
|
2023-03-09 15:52:44 +01:00
|
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
2021-01-29 17:38:23 -08:00
|
|
|
"k8s.io/client-go/discovery"
|
2019-05-15 07:30:22 -07:00
|
|
|
)
|
|
|
|
|
2022-12-09 22:15:23 +05:30
|
|
|
func logDiscoveryErrors(err error) {
|
2022-05-03 07:30:04 +02:00
|
|
|
discoveryError := err.(*discovery.ErrGroupDiscoveryFailed)
|
|
|
|
for gv, e := range discoveryError.Groups {
|
|
|
|
if gv.Group == "custom.metrics.k8s.io" || gv.Group == "metrics.k8s.io" || gv.Group == "external.metrics.k8s.io" {
|
|
|
|
// These errors occur when Prometheus is installed as an external metrics server
|
|
|
|
// See: https://github.com/kyverno/kyverno/issues/1490
|
2022-05-03 10:24:30 +02:00
|
|
|
logger.V(3).Info("failed to retrieve metrics API group", "gv", gv)
|
2022-05-03 07:30:04 +02:00
|
|
|
continue
|
2019-06-11 14:35:26 -07:00
|
|
|
}
|
2022-05-03 10:24:30 +02:00
|
|
|
logger.Error(e, "failed to retrieve API group", "gv", gv)
|
2019-06-14 16:02:28 -07:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-03-10 14:24:55 +01:00
|
|
|
// isServerCurrentlyUnableToHandleRequest returns true if the error is related to the discovery not able to handle the request
|
|
|
|
// this can happen with aggregated services when the api server can't get a `TokenReview` and is not able to send requests to
|
|
|
|
// the underlying service, this is typically due to kyverno blocking `TokenReview` admission requests.
|
|
|
|
func isServerCurrentlyUnableToHandleRequest(err error) bool {
|
|
|
|
return err != nil && strings.Contains(err.Error(), "the server is currently unable to handle the request")
|
|
|
|
}
|
|
|
|
|
2023-03-09 15:52:44 +01:00
|
|
|
func isMetricsServerUnavailable(gv schema.GroupVersion, err error) bool {
|
2022-05-03 07:30:04 +02:00
|
|
|
// error message is defined at:
|
|
|
|
// https://github.com/kubernetes/apimachinery/blob/2456ebdaba229616fab2161a615148884b46644b/pkg/api/errors/errors.go#L432
|
2023-03-09 15:52:44 +01:00
|
|
|
return (gv.Group == "metrics.k8s.io" || gv.Group == "custom.metrics.k8s.io" || gv.Group == "external.metrics.k8s.io") &&
|
2023-03-10 14:24:55 +01:00
|
|
|
isServerCurrentlyUnableToHandleRequest(err)
|
2019-06-14 16:02:28 -07:00
|
|
|
}
|