@@ -23,6 +23,7 @@ package cmd
2323
2424import (
2525 "context"
26+ "crypto/tls"
2627 "fmt"
2728 "net/http"
2829 "os"
@@ -34,6 +35,7 @@ import (
3435 "github.com/estahn/k8s-image-swapper/pkg/registry"
3536 "github.com/estahn/k8s-image-swapper/pkg/secrets"
3637 "github.com/estahn/k8s-image-swapper/pkg/types"
38+ "github.com/estahn/k8s-image-swapper/pkg/utils"
3739 "github.com/estahn/k8s-image-swapper/pkg/webhook"
3840 homedir "github.com/mitchellh/go-homedir"
3941 "github.com/prometheus/client_golang/prometheus/promhttp"
@@ -151,7 +153,20 @@ A mutating webhook for Kubernetes, pointing the images to a new location.`,
151153 log .Info ().Msgf ("Listening on %v" , cfg .ListenAddress )
152154 //err = http.ListenAndServeTLS(":8080", cfg.certFile, cfg.keyFile, whHandler)
153155 if cfg .TLSCertFile != "" && cfg .TLSKeyFile != "" {
154- if err := srv .ListenAndServeTLS (cfg .TLSCertFile , cfg .TLSKeyFile ); err != nil {
156+ kpr , err := utils .NewKeypairReloader (cfg .TLSCertFile , cfg .TLSKeyFile )
157+ if err != nil {
158+ log .Err (err ).Msg ("Failed to load key pair" )
159+ os .Exit (1 )
160+ }
161+
162+ // this will check if there are new certs before every tls handshake
163+ t := & tls.Config {GetCertificate : kpr .GetCertificateFunc ()}
164+ srv .TLSConfig = t
165+
166+ srv .TLSConfig = & tls.Config {
167+ GetCertificate : getCertificate ,
168+ }
169+ if err := srv .ListenAndServeTLS ("" , "" ); err != nil {
155170 log .Err (err ).Msg ("error serving webhook" )
156171 os .Exit (1 )
157172 }
@@ -278,6 +293,16 @@ func initLogger() {
278293 }
279294}
280295
296+ func getCertificate (info * tls.ClientHelloInfo ) (* tls.Certificate , error ) {
297+ //log.Info().Msg("Loading TLS")
298+ caFiles , err := tls .LoadX509KeyPair (cfg .TLSCertFile , cfg .TLSKeyFile )
299+ if err != nil {
300+ return nil , err
301+ }
302+
303+ return & caFiles , nil
304+ }
305+
281306// setupImagePullSecretsProvider configures the provider handling secrets
282307func setupImagePullSecretsProvider () secrets.ImagePullSecretsProvider {
283308 config , err := rest .InClusterConfig ()
0 commit comments