@@ -36,7 +36,8 @@ import (
36
36
"k8s.io/apiserver/pkg/authorization/authorizer"
37
37
"k8s.io/apiserver/pkg/authorization/authorizerfactory"
38
38
"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"
40
41
"k8s.io/client-go/rest"
41
42
"k8s.io/client-go/tools/leaderelection"
42
43
"k8s.io/client-go/tools/leaderelection/resourcelock"
@@ -92,15 +93,18 @@ type controllerManager struct {
92
93
// metricsListener is used to serve prometheus metrics
93
94
metricsListener net.Listener
94
95
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
98
99
99
100
// metricsExtraHandlers contains extra handlers to register on http server that serves metrics.
100
101
metricsExtraHandlers map [string ]http.Handler
101
102
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
104
108
105
109
// healthProbeListener is used to serve liveness probe
106
110
healthProbeListener net.Listener
@@ -318,9 +322,9 @@ func (cm *controllerManager) addMetricsServer() error {
318
322
319
323
log := cm .logger .WithValues ("path" , defaultMetricsEndpoint )
320
324
321
- if ! cm .metricsInsecureServing {
325
+ if cm .metricsSecureServing {
322
326
var err error
323
- handler , err = withAuthenticationAndAuthorization (log , cm .metricsKubeClient , handler )
327
+ handler , err = withAuthenticationAndAuthorization (log , cm .metricsAuthenticationClient , cm . metricsAuthorizationClient , handler )
324
328
if err != nil {
325
329
return fmt .Errorf ("failed to add metrics server: %w" , err )
326
330
}
@@ -340,11 +344,11 @@ func (cm *controllerManager) addMetricsServer() error {
340
344
})
341
345
}
342
346
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 ) {
344
348
authenticatorConfig := authenticatorfactory.DelegatingAuthenticatorConfig {
345
349
Anonymous : false , // Require authentication.
346
350
CacheTTL : 1 * time .Minute ,
347
- TokenAccessReviewClient : metricsKubeClient . AuthenticationV1 () ,
351
+ TokenAccessReviewClient : authenticationClient ,
348
352
TokenAccessReviewTimeout : 10 * time .Second ,
349
353
WebhookRetryBackoff : options .DefaultAuthWebhookRetryBackoff (),
350
354
}
@@ -354,7 +358,7 @@ func withAuthenticationAndAuthorization(log logr.Logger, metricsKubeClient *kube
354
358
}
355
359
356
360
authorizerConfig := authorizerfactory.DelegatingAuthorizerConfig {
357
- SubjectAccessReviewClient : metricsKubeClient . AuthorizationV1 () ,
361
+ SubjectAccessReviewClient : authorizationClient ,
358
362
AllowCacheTTL : 5 * time .Minute ,
359
363
DenyCacheTTL : 30 * time .Second ,
360
364
WebhookRetryBackoff : options .DefaultAuthWebhookRetryBackoff (),
@@ -392,13 +396,13 @@ func withAuthenticationAndAuthorization(log logr.Logger, metricsKubeClient *kube
392
396
393
397
authorized , reason , err := delegatingAuthorizer .Authorize (ctx , attributes )
394
398
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 () )
396
400
log .Error (err , fmt .Sprintf ("%s: %s" , msg , err ))
397
401
http .Error (w , msg , http .StatusInternalServerError )
398
402
return
399
403
}
400
404
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 () )
402
406
log .V (4 ).Info (fmt .Sprintf ("%s: %s" , msg , reason ))
403
407
http .Error (w , msg , http .StatusForbidden )
404
408
return
0 commit comments