@@ -3,14 +3,39 @@ package metrics
3
3
import (
4
4
"context"
5
5
"fmt"
6
+ "net/http"
6
7
8
+ "github.com/go-logr/logr"
7
9
"k8s.io/client-go/rest"
8
10
"k8s.io/klog/v2"
9
11
ctrl "sigs.k8s.io/controller-runtime"
10
12
"sigs.k8s.io/controller-runtime/pkg/metrics/filters"
11
13
"sigs.k8s.io/controller-runtime/pkg/metrics/server"
14
+
15
+ "github.com/kubeovn/kube-ovn/pkg/util"
12
16
)
13
17
18
+ func filterProvider (c * rest.Config , httpClient * http.Client ) (server.Filter , error ) {
19
+ return func (log logr.Logger , handler http.Handler ) (http.Handler , error ) {
20
+ filter , err := filters .WithAuthenticationAndAuthorization (c , httpClient )
21
+ if err != nil {
22
+ return nil , fmt .Errorf ("failed to create filter: %w" , err )
23
+ }
24
+ h , err := filter (log , handler )
25
+ if err != nil {
26
+ return nil , fmt .Errorf ("failed to create handler: %w" , err )
27
+ }
28
+ return http .HandlerFunc (func (w http.ResponseWriter , req * http.Request ) {
29
+ switch req .URL .Path {
30
+ case "/healthz" , "/livez" , "/readyz" :
31
+ handler .ServeHTTP (w , req )
32
+ default :
33
+ h .ServeHTTP (w , req )
34
+ }
35
+ }), nil
36
+ }, nil
37
+ }
38
+
14
39
func Run (ctx context.Context , config * rest.Config , addr string , secureServing bool ) error {
15
40
if config == nil {
16
41
config = ctrl .GetConfigOrDie ()
@@ -26,7 +51,12 @@ func Run(ctx context.Context, config *rest.Config, addr string, secureServing bo
26
51
BindAddress : addr ,
27
52
}
28
53
if secureServing {
29
- options .FilterProvider = filters .WithAuthenticationAndAuthorization
54
+ options .FilterProvider = filterProvider
55
+ }
56
+ options .ExtraHandlers = map [string ]http.Handler {
57
+ "/healthz" : http .HandlerFunc (util .DefaultHealthCheckHandler ),
58
+ "/livez" : http .HandlerFunc (util .DefaultHealthCheckHandler ),
59
+ "/readyz" : http .HandlerFunc (util .DefaultHealthCheckHandler ),
30
60
}
31
61
svr , err := server .NewServer (options , config , client )
32
62
if err != nil {
0 commit comments