@@ -36,7 +36,8 @@ import (
3636 "k8s.io/apiserver/pkg/authorization/authorizer"
3737 "k8s.io/apiserver/pkg/authorization/authorizerfactory"
3838 "k8s.io/apiserver/pkg/server/options"
39- "k8s.io/client-go/kubernetes"
39+ authenticationv1 "k8s.io/client-go/kubernetes/typed/authentication/v1"
40+ authorizationv1 "k8s.io/client-go/kubernetes/typed/authorization/v1"
4041 "k8s.io/client-go/rest"
4142 "k8s.io/client-go/tools/leaderelection"
4243 "k8s.io/client-go/tools/leaderelection/resourcelock"
@@ -92,15 +93,18 @@ type controllerManager struct {
9293 // metricsListener is used to serve prometheus metrics
9394 metricsListener net.Listener
9495
95- // metricsInsecureServing enables insecure metrics serving.
96- // This means metrics will be served via http and without authentication and authorization.
97- metricsInsecureServing bool
96+ // metricsSecureServing enables secure metrics serving.
97+ // This means metrics will be served via https and with authentication and authorization.
98+ metricsSecureServing bool
9899
99100 // metricsExtraHandlers contains extra handlers to register on http server that serves metrics.
100101 metricsExtraHandlers map [string ]http.Handler
101102
102- // metricsKubeClient is the client used to authenticate and authorize requests to the metrics endpoint.
103- metricsKubeClient * kubernetes.Clientset
103+ // metricsAuthenticationClient is the client used to authenticate requests to the metrics endpoint.
104+ metricsAuthenticationClient authenticationv1.AuthenticationV1Interface
105+
106+ // metricsAuthorizationClient is the client used to authorize requests to the metrics endpoint.
107+ metricsAuthorizationClient authorizationv1.AuthorizationV1Interface
104108
105109 // healthProbeListener is used to serve liveness probe
106110 healthProbeListener net.Listener
@@ -318,9 +322,9 @@ func (cm *controllerManager) addMetricsServer() error {
318322
319323 log := cm .logger .WithValues ("path" , defaultMetricsEndpoint )
320324
321- if ! cm .metricsInsecureServing {
325+ if cm .metricsSecureServing {
322326 var err error
323- handler , err = withAuthenticationAndAuthorization (log , cm .metricsKubeClient , handler )
327+ handler , err = withAuthenticationAndAuthorization (log , cm .metricsAuthenticationClient , cm . metricsAuthorizationClient , handler )
324328 if err != nil {
325329 return fmt .Errorf ("failed to add metrics server: %w" , err )
326330 }
@@ -340,11 +344,11 @@ func (cm *controllerManager) addMetricsServer() error {
340344 })
341345}
342346
343- func withAuthenticationAndAuthorization (log logr.Logger , metricsKubeClient * kubernetes. Clientset , handler http.Handler ) (http.Handler , error ) {
347+ func withAuthenticationAndAuthorization (log logr.Logger , authenticationClient authenticationv1. AuthenticationV1Interface , authorizationClient authorizationv1. AuthorizationV1Interface , handler http.Handler ) (http.Handler , error ) {
344348 authenticatorConfig := authenticatorfactory.DelegatingAuthenticatorConfig {
345349 Anonymous : false , // Require authentication.
346350 CacheTTL : 1 * time .Minute ,
347- TokenAccessReviewClient : metricsKubeClient . AuthenticationV1 () ,
351+ TokenAccessReviewClient : authenticationClient ,
348352 TokenAccessReviewTimeout : 10 * time .Second ,
349353 WebhookRetryBackoff : options .DefaultAuthWebhookRetryBackoff (),
350354 }
@@ -354,7 +358,7 @@ func withAuthenticationAndAuthorization(log logr.Logger, metricsKubeClient *kube
354358 }
355359
356360 authorizerConfig := authorizerfactory.DelegatingAuthorizerConfig {
357- SubjectAccessReviewClient : metricsKubeClient . AuthorizationV1 () ,
361+ SubjectAccessReviewClient : authorizationClient ,
358362 AllowCacheTTL : 5 * time .Minute ,
359363 DenyCacheTTL : 30 * time .Second ,
360364 WebhookRetryBackoff : options .DefaultAuthWebhookRetryBackoff (),
@@ -392,13 +396,13 @@ func withAuthenticationAndAuthorization(log logr.Logger, metricsKubeClient *kube
392396
393397 authorized , reason , err := delegatingAuthorizer .Authorize (ctx , attributes )
394398 if err != nil {
395- msg := fmt .Sprintf ("Authorization for user %s failed" , attributes .User )
399+ msg := fmt .Sprintf ("Authorization for user %s failed" , attributes .User . GetName () )
396400 log .Error (err , fmt .Sprintf ("%s: %s" , msg , err ))
397401 http .Error (w , msg , http .StatusInternalServerError )
398402 return
399403 }
400404 if authorized != authorizer .DecisionAllow {
401- msg := fmt .Sprintf ("Authorization denied for user %s" , attributes .User )
405+ msg := fmt .Sprintf ("Authorization denied for user %s" , attributes .User . GetName () )
402406 log .V (4 ).Info (fmt .Sprintf ("%s: %s" , msg , reason ))
403407 http .Error (w , msg , http .StatusForbidden )
404408 return
0 commit comments