@@ -419,7 +419,7 @@ func serveHealthz(ctx context.Context, hz *healthcheck.ProxierHealthServer, errC
419
419
}
420
420
421
421
fn := func () {
422
- err := hz .Run ()
422
+ err := hz .Run (ctx )
423
423
if err != nil {
424
424
logger .Error (err , "Healthz server failed" )
425
425
if errCh != nil {
@@ -435,7 +435,7 @@ func serveHealthz(ctx context.Context, hz *healthcheck.ProxierHealthServer, errC
435
435
go wait .Until (fn , 5 * time .Second , ctx .Done ())
436
436
}
437
437
438
- func serveMetrics (bindAddress string , proxyMode kubeproxyconfig.ProxyMode , enableProfiling bool , errCh chan error ) {
438
+ func serveMetrics (ctx context. Context , bindAddress string , proxyMode kubeproxyconfig.ProxyMode , enableProfiling bool , errCh chan error ) {
439
439
if len (bindAddress ) == 0 {
440
440
return
441
441
}
@@ -460,17 +460,31 @@ func serveMetrics(bindAddress string, proxyMode kubeproxyconfig.ProxyMode, enabl
460
460
configz .InstallHandler (proxyMux )
461
461
462
462
fn := func () {
463
- err := http .ListenAndServe (bindAddress , proxyMux )
464
- if err != nil {
465
- err = fmt .Errorf ("starting metrics server failed: %w" , err )
466
- utilruntime .HandleError (err )
467
- if errCh != nil {
468
- errCh <- err
469
- // if in hardfail mode, never retry again
470
- blockCh := make (chan error )
471
- <- blockCh
463
+ var err error
464
+ defer func () {
465
+ if err != nil {
466
+ err = fmt .Errorf ("starting metrics server failed: %w" , err )
467
+ utilruntime .HandleError (err )
468
+ if errCh != nil {
469
+ errCh <- err
470
+ // if in hardfail mode, never retry again
471
+ blockCh := make (chan error )
472
+ <- blockCh
473
+ }
472
474
}
475
+ }()
476
+
477
+ listener , err := netutils .MultiListen (ctx , "tcp" , bindAddress )
478
+ if err != nil {
479
+ return
480
+ }
481
+
482
+ server := & http.Server {Handler : proxyMux }
483
+ err = server .Serve (listener )
484
+ if err != nil {
485
+ return
473
486
}
487
+
474
488
}
475
489
go wait .Until (fn , 5 * time .Second , wait .NeverStop )
476
490
}
@@ -512,7 +526,7 @@ func (s *ProxyServer) Run(ctx context.Context) error {
512
526
serveHealthz (ctx , s .HealthzServer , healthzErrCh )
513
527
514
528
// Start up a metrics server if requested
515
- serveMetrics (s .Config .MetricsBindAddress , s .Config .Mode , s .Config .EnableProfiling , metricsErrCh )
529
+ serveMetrics (ctx , s .Config .MetricsBindAddress , s .Config .Mode , s .Config .EnableProfiling , metricsErrCh )
516
530
517
531
noProxyName , err := labels .NewRequirement (apis .LabelServiceProxyName , selection .DoesNotExist , nil )
518
532
if err != nil {
0 commit comments