@@ -19,24 +19,20 @@ package main
19
19
import (
20
20
"flag"
21
21
"fmt"
22
- "net"
23
- "net/http"
24
22
"os"
25
- "strconv"
26
23
27
24
"github.com/go-logr/logr"
28
- "github.com/prometheus/client_golang/prometheus/promhttp"
29
25
uberzap "go.uber.org/zap"
30
26
"go.uber.org/zap/zapcore"
31
27
"google.golang.org/grpc"
32
28
healthPb "google.golang.org/grpc/health/grpc_health_v1"
33
29
"k8s.io/apimachinery/pkg/types"
34
- "k8s.io/client-go/rest"
35
- "k8s.io/component-base/metrics/legacyregistry"
36
30
ctrl "sigs.k8s.io/controller-runtime"
37
31
"sigs.k8s.io/controller-runtime/pkg/log/zap"
38
32
"sigs.k8s.io/controller-runtime/pkg/manager"
39
33
"sigs.k8s.io/controller-runtime/pkg/metrics/filters"
34
+ metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
35
+
40
36
"sigs.k8s.io/gateway-api-inference-extension/internal/runnable"
41
37
backendmetrics "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/backend/metrics"
42
38
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/datastore"
58
54
"grpcHealthPort" ,
59
55
9003 ,
60
56
"The port used for gRPC liveness and readiness probes" )
61
- metricsPort = flag .Int (
62
- "metricsPort" , 9090 , "The metrics port" )
57
+ metricsAddr = flag .String ("metrics-bind-address" , ":8080" , "The address the metric endpoint binds to." )
63
58
destinationEndpointHintKey = flag .String (
64
59
"destinationEndpointHintKey" ,
65
60
runserver .DefaultDestinationEndpointHintKey ,
@@ -145,7 +140,18 @@ func run() error {
145
140
Name : * poolName ,
146
141
Namespace : * poolNamespace ,
147
142
}
148
- mgr , err := runserver .NewDefaultManager (poolNamespacedName , cfg )
143
+ metrics .Register ()
144
+ // Register metrics handler.
145
+ // Metrics endpoint is enabled in 'config/default/kustomization.yaml'. The Metrics options configure the server.
146
+ // More info:
147
+ // - https://pkg.go.dev/sigs.k8s.io/[email protected] /pkg/metrics/server
148
+ // - https://book.kubebuilder.io/reference/metrics.html
149
+ metricsServerOptions := metricsserver.Options {
150
+ BindAddress : * metricsAddr ,
151
+ FilterProvider : filters .WithAuthenticationAndAuthorization ,
152
+ }
153
+
154
+ mgr , err := runserver .NewDefaultManager (poolNamespacedName , cfg , metricsServerOptions )
149
155
if err != nil {
150
156
setupLog .Error (err , "Failed to create controller manager" )
151
157
return err
@@ -195,11 +201,6 @@ func run() error {
195
201
return err
196
202
}
197
203
198
- // Register metrics handler.
199
- if err := registerMetricsHandler (mgr , * metricsPort , cfg ); err != nil {
200
- return err
201
- }
202
-
203
204
// Start the manager. This blocks until a signal is received.
204
205
setupLog .Info ("Controller manager starting" )
205
206
if err := mgr .Start (ctx ); err != nil {
@@ -243,59 +244,6 @@ func registerHealthServer(mgr manager.Manager, logger logr.Logger, ds datastore.
243
244
return nil
244
245
}
245
246
246
- // registerMetricsHandler adds the metrics HTTP handler as a Runnable to the given manager.
247
- func registerMetricsHandler (mgr manager.Manager , port int , cfg * rest.Config ) error {
248
- metrics .Register ()
249
-
250
- // Init HTTP server.
251
- h , err := metricsHandlerWithAuthenticationAndAuthorization (cfg )
252
- if err != nil {
253
- return err
254
- }
255
-
256
- mux := http .NewServeMux ()
257
- mux .Handle (defaultMetricsEndpoint , h )
258
-
259
- srv := & http.Server {
260
- Addr : net .JoinHostPort ("" , strconv .Itoa (port )),
261
- Handler : mux ,
262
- }
263
-
264
- if err := mgr .Add (& manager.Server {
265
- Name : "metrics" ,
266
- Server : srv ,
267
- }); err != nil {
268
- setupLog .Error (err , "Failed to register metrics HTTP handler" )
269
- return err
270
- }
271
- return nil
272
- }
273
-
274
- func metricsHandlerWithAuthenticationAndAuthorization (cfg * rest.Config ) (http.Handler , error ) {
275
- h := promhttp .HandlerFor (
276
- legacyregistry .DefaultGatherer ,
277
- promhttp.HandlerOpts {},
278
- )
279
- httpClient , err := rest .HTTPClientFor (cfg )
280
- if err != nil {
281
- setupLog .Error (err , "Failed to create http client for metrics auth" )
282
- return nil , err
283
- }
284
-
285
- filter , err := filters .WithAuthenticationAndAuthorization (cfg , httpClient )
286
- if err != nil {
287
- setupLog .Error (err , "Failed to create metrics filter for auth" )
288
- return nil , err
289
- }
290
- metricsLogger := ctrl .Log .WithName ("metrics" ).WithValues ("path" , defaultMetricsEndpoint )
291
- metricsAuthHandler , err := filter (metricsLogger , h )
292
- if err != nil {
293
- setupLog .Error (err , "Failed to create metrics auth handler" )
294
- return nil , err
295
- }
296
- return metricsAuthHandler , nil
297
- }
298
-
299
247
func validateFlags () error {
300
248
if * poolName == "" {
301
249
return fmt .Errorf ("required %q flag not set" , "poolName" )
0 commit comments