@@ -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"
@@ -45,10 +41,6 @@ import (
45
41
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/logging"
46
42
)
47
43
48
- const (
49
- defaultMetricsEndpoint = "/metrics"
50
- )
51
-
52
44
var (
53
45
grpcPort = flag .Int (
54
46
"grpcPort" ,
58
50
"grpcHealthPort" ,
59
51
9003 ,
60
52
"The port used for gRPC liveness and readiness probes" )
61
- metricsPort = flag .Int (
62
- "metricsPort" , 9090 , "The metrics port" )
53
+ metricsAddr = flag .String ("metrics-bind-address" , ":8080" , "The address the metric endpoint binds to." )
63
54
destinationEndpointHintKey = flag .String (
64
55
"destinationEndpointHintKey" ,
65
56
runserver .DefaultDestinationEndpointHintKey ,
@@ -145,7 +136,18 @@ func run() error {
145
136
Name : * poolName ,
146
137
Namespace : * poolNamespace ,
147
138
}
148
- mgr , err := runserver .NewDefaultManager (poolNamespacedName , cfg )
139
+ metrics .Register ()
140
+ // Register metrics handler.
141
+ // Metrics endpoint is enabled in 'config/default/kustomization.yaml'. The Metrics options configure the server.
142
+ // More info:
143
+ // - https://pkg.go.dev/sigs.k8s.io/[email protected] /pkg/metrics/server
144
+ // - https://book.kubebuilder.io/reference/metrics.html
145
+ metricsServerOptions := metricsserver.Options {
146
+ BindAddress : * metricsAddr ,
147
+ FilterProvider : filters .WithAuthenticationAndAuthorization ,
148
+ }
149
+
150
+ mgr , err := runserver .NewDefaultManager (poolNamespacedName , cfg , metricsServerOptions )
149
151
if err != nil {
150
152
setupLog .Error (err , "Failed to create controller manager" )
151
153
return err
@@ -195,11 +197,6 @@ func run() error {
195
197
return err
196
198
}
197
199
198
- // Register metrics handler.
199
- if err := registerMetricsHandler (mgr , * metricsPort , cfg ); err != nil {
200
- return err
201
- }
202
-
203
200
// Start the manager. This blocks until a signal is received.
204
201
setupLog .Info ("Controller manager starting" )
205
202
if err := mgr .Start (ctx ); err != nil {
@@ -243,59 +240,6 @@ func registerHealthServer(mgr manager.Manager, logger logr.Logger, ds datastore.
243
240
return nil
244
241
}
245
242
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
243
func validateFlags () error {
300
244
if * poolName == "" {
301
245
return fmt .Errorf ("required %q flag not set" , "poolName" )
0 commit comments