@@ -23,6 +23,7 @@ package cmd
23
23
24
24
import (
25
25
"context"
26
+ "crypto/tls"
26
27
"fmt"
27
28
"net/http"
28
29
"os"
@@ -34,6 +35,7 @@ import (
34
35
"github.com/estahn/k8s-image-swapper/pkg/registry"
35
36
"github.com/estahn/k8s-image-swapper/pkg/secrets"
36
37
"github.com/estahn/k8s-image-swapper/pkg/types"
38
+ "github.com/estahn/k8s-image-swapper/pkg/utils"
37
39
"github.com/estahn/k8s-image-swapper/pkg/webhook"
38
40
homedir "github.com/mitchellh/go-homedir"
39
41
"github.com/prometheus/client_golang/prometheus/promhttp"
@@ -151,7 +153,20 @@ A mutating webhook for Kubernetes, pointing the images to a new location.`,
151
153
log .Info ().Msgf ("Listening on %v" , cfg .ListenAddress )
152
154
//err = http.ListenAndServeTLS(":8080", cfg.certFile, cfg.keyFile, whHandler)
153
155
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 {
155
170
log .Err (err ).Msg ("error serving webhook" )
156
171
os .Exit (1 )
157
172
}
@@ -278,6 +293,16 @@ func initLogger() {
278
293
}
279
294
}
280
295
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
+
281
306
// setupImagePullSecretsProvider configures the provider handling secrets
282
307
func setupImagePullSecretsProvider () secrets.ImagePullSecretsProvider {
283
308
config , err := rest .InClusterConfig ()
0 commit comments