@@ -18,23 +18,19 @@ package main
18
18
19
19
import (
20
20
"flag"
21
- "net"
22
- "net/http"
23
21
"os"
24
- "strconv"
25
22
26
23
"github.com/go-logr/logr"
27
- "github.com/prometheus/client_golang/prometheus/promhttp"
28
24
uberzap "go.uber.org/zap"
29
25
"go.uber.org/zap/zapcore"
30
26
"google.golang.org/grpc"
31
27
healthPb "google.golang.org/grpc/health/grpc_health_v1"
32
- "k8s.io/client-go/rest"
33
- "k8s.io/component-base/metrics/legacyregistry"
34
28
ctrl "sigs.k8s.io/controller-runtime"
35
29
"sigs.k8s.io/controller-runtime/pkg/log/zap"
36
30
"sigs.k8s.io/controller-runtime/pkg/manager"
37
31
"sigs.k8s.io/controller-runtime/pkg/metrics/filters"
32
+ metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
33
+
38
34
"sigs.k8s.io/gateway-api-inference-extension/internal/runnable"
39
35
runserver "sigs.k8s.io/gateway-api-inference-extension/pkg/bbr/server"
40
36
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/metrics"
50
46
"grpcHealthPort" ,
51
47
9005 ,
52
48
"The port used for gRPC liveness and readiness probes" )
53
- metricsPort = flag .Int (
54
- "metricsPort" , 9090 , "The metrics port" )
55
- streaming = flag .Bool (
49
+ metricsAddr = flag .String ("metrics-bind-address" , ":9090" , "The address the metric endpoint binds to." )
50
+ streaming = flag .Bool (
56
51
"streaming" , false , "Enables streaming support for Envoy full-duplex streaming mode" )
57
52
logVerbosity = flag .Int ("v" , logging .DEFAULT , "number for the log level verbosity" )
58
53
@@ -85,7 +80,18 @@ func run() error {
85
80
return err
86
81
}
87
82
88
- mgr , err := ctrl .NewManager (cfg , ctrl.Options {})
83
+ metrics .Register ()
84
+
85
+ // Register metrics handler.
86
+ // Metrics endpoint is enabled in 'config/default/kustomization.yaml'. The Metrics options configure the server.
87
+ // More info:
88
+ // - https://pkg.go.dev/sigs.k8s.io/[email protected] /pkg/metrics/server
89
+ // - https://book.kubebuilder.io/reference/metrics.html
90
+ metricsServerOptions := metricsserver.Options {
91
+ BindAddress : * metricsAddr ,
92
+ FilterProvider : filters .WithAuthenticationAndAuthorization ,
93
+ }
94
+ mgr , err := ctrl .NewManager (cfg , ctrl.Options {Metrics : metricsServerOptions })
89
95
if err != nil {
90
96
setupLog .Error (err , "Failed to create manager" , "config" , cfg )
91
97
return err
@@ -107,11 +113,6 @@ func run() error {
107
113
return err
108
114
}
109
115
110
- // Register metrics handler.
111
- if err := registerMetricsHandler (mgr , * metricsPort , cfg ); err != nil {
112
- return err
113
- }
114
-
115
116
// Start the manager. This blocks until a signal is received.
116
117
setupLog .Info ("Manager starting" )
117
118
if err := mgr .Start (ctx ); err != nil {
@@ -152,58 +153,3 @@ func initLogging(opts *zap.Options) {
152
153
logger := zap .New (zap .UseFlagOptions (opts ), zap .RawZapOpts (uberzap .AddCaller ()))
153
154
ctrl .SetLogger (logger )
154
155
}
155
-
156
- const metricsEndpoint = "/metrics"
157
-
158
- // registerMetricsHandler adds the metrics HTTP handler as a Runnable to the given manager.
159
- func registerMetricsHandler (mgr manager.Manager , port int , cfg * rest.Config ) error {
160
- metrics .Register ()
161
-
162
- // Init HTTP server.
163
- h , err := metricsHandlerWithAuthenticationAndAuthorization (cfg )
164
- if err != nil {
165
- return err
166
- }
167
-
168
- mux := http .NewServeMux ()
169
- mux .Handle (metricsEndpoint , h )
170
-
171
- srv := & http.Server {
172
- Addr : net .JoinHostPort ("" , strconv .Itoa (port )),
173
- Handler : mux ,
174
- }
175
-
176
- if err := mgr .Add (& manager.Server {
177
- Name : "metrics" ,
178
- Server : srv ,
179
- }); err != nil {
180
- setupLog .Error (err , "Failed to register metrics HTTP handler" )
181
- return err
182
- }
183
- return nil
184
- }
185
-
186
- func metricsHandlerWithAuthenticationAndAuthorization (cfg * rest.Config ) (http.Handler , error ) {
187
- h := promhttp .HandlerFor (
188
- legacyregistry .DefaultGatherer ,
189
- promhttp.HandlerOpts {},
190
- )
191
- httpClient , err := rest .HTTPClientFor (cfg )
192
- if err != nil {
193
- setupLog .Error (err , "Failed to create http client for metrics auth" )
194
- return nil , err
195
- }
196
-
197
- filter , err := filters .WithAuthenticationAndAuthorization (cfg , httpClient )
198
- if err != nil {
199
- setupLog .Error (err , "Failed to create metrics filter for auth" )
200
- return nil , err
201
- }
202
- metricsLogger := ctrl .Log .WithName ("metrics" ).WithValues ("path" , metricsEndpoint )
203
- metricsAuthHandler , err := filter (metricsLogger , h )
204
- if err != nil {
205
- setupLog .Error (err , "Failed to create metrics auth handler" )
206
- return nil , err
207
- }
208
- return metricsAuthHandler , nil
209
- }
0 commit comments