@@ -25,6 +25,7 @@ import (
2525 "fmt"
2626 "math/big"
2727 "os"
28+ "path"
2829 "time"
2930
3031 adminssionregistrationv1 "k8s.io/api/admissionregistration/v1"
@@ -42,6 +43,8 @@ import (
4243 "github.com/liqotech/liqo/pkg/consts"
4344)
4445
46+ const servingCertsDir = "/tmp/k8s-webhook-server/serving-certs/"
47+
4548// NewSecretReconciler returns a new SecretReconciler.
4649func NewSecretReconciler (cl client.Client , s * runtime.Scheme , recorder record.EventRecorder ) * SecretReconciler {
4750 return & SecretReconciler {
@@ -106,45 +109,55 @@ func (r *SecretReconciler) SetupWithManager(mgr ctrl.Manager) error {
106109 return fmt .Errorf ("unable to create label selector predicate: %w" , err )
107110 }
108111
109- return ctrl .NewControllerManagedBy (mgr ).Named (consts .CtrlIdentity ).
112+ return ctrl .NewControllerManagedBy (mgr ).Named (consts .CtrlSecretWebhook ).
110113 For (& corev1.Secret {}, builder .WithPredicates (p )).
111114 Complete (r )
112115}
113116
114117// HandleSecret handles the given Secret for webhooks.
115- func HandleSecret (ctx context.Context , cl client.Client , secret * corev1.Secret ) error {
116- serviceName := secret .Annotations [consts .WebhookServiceNameAnnotationKey ]
118+ func HandleSecret (ctx context.Context , cl client.Client , secret * corev1.Secret ) (err error ) {
119+ if secret .Annotations == nil {
120+ return fmt .Errorf ("no annotations found in Secret %s/%s" , secret .Namespace , secret .Name )
121+ }
122+ serviceName , serviceNameOk := secret .Annotations [consts .WebhookServiceNameAnnotationKey ]
123+ if ! serviceNameOk {
124+ return fmt .Errorf ("no service name found fot Secret %s/%s. Please, set the annotation %s" ,
125+ secret .Namespace , secret .Name , consts .WebhookServiceNameAnnotationKey )
126+ }
117127
128+ if secret .Data == nil {
129+ secret .Data = make (map [string ][]byte )
130+ }
118131 ca , caOk := secret .Data ["ca" ]
119132 tlsKey , tlsKeyOk := secret .Data ["tls.key" ]
120133 tlsCrt , tlsCrtOk := secret .Data ["tls.crt" ]
121134
122135 if ! caOk || ! tlsKeyOk || ! tlsCrtOk ||
123136 len (ca ) == 0 || len (tlsKey ) == 0 || len (tlsCrt ) == 0 {
124- caB , crtB , keyB , err : = createCA (serviceName , secret .Namespace )
137+ ca , tlsCrt , tlsKey , err = createCA (serviceName , secret .Namespace )
125138 if err != nil {
126139 return fmt .Errorf ("unable to create CA: %w" , err )
127140 }
128141
129142 if secret .Data == nil {
130143 secret .Data = make (map [string ][]byte )
131144 }
132- secret .Data ["ca" ] = caB
133- secret .Data ["tls.crt" ] = crtB
134- secret .Data ["tls.key" ] = keyB
135- } else {
136- err := os . MkdirAll ( "/tmp/k8s-webhook-server/serving-certs/" , 0o700 )
137- if err != nil {
138- return fmt . Errorf ( "unable to create directory: %w" , err )
139- }
140- err = writeFile ( "/tmp/k8s-webhook-server/serving-certs/tls.crt" , bytes . NewBuffer ( tlsCrt ))
141- if err != nil {
142- return fmt . Errorf ( "unable to write file: %w" , err )
143- }
144- err = writeFile ( "/tmp/k8s-webhook-server/serving-certs/tls.key" , bytes . NewBuffer ( tlsKey ))
145- if err != nil {
146- return fmt . Errorf ( "unable to write file: %w" , err )
147- }
145+ secret .Data ["ca" ] = ca
146+ secret .Data ["tls.crt" ] = tlsCrt
147+ secret .Data ["tls.key" ] = tlsKey
148+ }
149+
150+ err = os . MkdirAll ( servingCertsDir , 0o700 )
151+ if err != nil {
152+ return fmt . Errorf ( "unable to create directory: %w" , err )
153+ }
154+ err = writeFile ( path . Join ( servingCertsDir , "tls.crt" ), bytes . NewBuffer ( tlsCrt ))
155+ if err != nil {
156+ return fmt . Errorf ( "unable to write file: %w" , err )
157+ }
158+ err = writeFile ( path . Join ( servingCertsDir , "tls.key" ), bytes . NewBuffer ( tlsKey ))
159+ if err != nil {
160+ return fmt . Errorf ( "unable to write file: %w" , err )
148161 }
149162
150163 // patch webhook configurations
@@ -196,7 +209,7 @@ func createCA(serviceName, namespace string) (caB, crtB, keyB []byte, err error)
196209 ca := & x509.Certificate {
197210 SerialNumber : big .NewInt (1 ),
198211 Subject : pkix.Name {
199- Organization : []string {"Liqo " },
212+ Organization : []string {"liqo.io " },
200213 },
201214 NotBefore : time .Now (),
202215 NotAfter : time .Now ().Add (10 * 365 * 24 * time .Hour ),
@@ -224,7 +237,7 @@ func createCA(serviceName, namespace string) (caB, crtB, keyB []byte, err error)
224237 SerialNumber : big .NewInt (1658 ),
225238 Subject : pkix.Name {
226239 CommonName : commonName ,
227- Organization : []string {"Liqo " },
240+ Organization : []string {"liqo.io " },
228241 },
229242 NotBefore : time .Now (),
230243 NotAfter : time .Now ().AddDate (1 , 0 , 0 ),
@@ -264,20 +277,6 @@ func createCA(serviceName, namespace string) (caB, crtB, keyB []byte, err error)
264277 return nil , nil , nil , fmt .Errorf ("failed to encode server private key: %w" , err )
265278 }
266279
267- // save the server cert and key to disk in the path expected by the webhook server.
268- err = os .MkdirAll ("/tmp/k8s-webhook-server/serving-certs/" , 0o700 )
269- if err != nil {
270- return nil , nil , nil , fmt .Errorf ("unable to create directory: %w" , err )
271- }
272- err = writeFile ("/tmp/k8s-webhook-server/serving-certs/tls.crt" , serverCertPEM )
273- if err != nil {
274- return nil , nil , nil , fmt .Errorf ("unable to write file: %w" , err )
275- }
276- err = writeFile ("/tmp/k8s-webhook-server/serving-certs/tls.key" , serverPrivKeyPEM )
277- if err != nil {
278- return nil , nil , nil , fmt .Errorf ("unable to write file: %w" , err )
279- }
280-
281280 return certPEM , serverCertPEM .Bytes (), serverPrivKeyPEM .Bytes (), nil
282281}
283282
0 commit comments