@@ -51,7 +51,7 @@ func tenantUpdateCertificates(ctx context.Context, operatorClient OperatorClient
51
51
if tenant .ExternalCert () && body .Minio != nil {
52
52
minioCertSecretName := fmt .Sprintf ("%s-instance-external-certificates" , secretName )
53
53
// update certificates
54
- if _ , err := createOrReplaceExternalCertSecret (ctx , clientSet , namespace , body .Minio , minioCertSecretName , tenantName ); err != nil {
54
+ if _ , err := createOrReplaceExternalCertSecrets (ctx , clientSet , namespace , body .Minio , minioCertSecretName , tenantName ); err != nil {
55
55
return err
56
56
}
57
57
// restart MinIO pods
@@ -66,7 +66,8 @@ func tenantUpdateCertificates(ctx context.Context, operatorClient OperatorClient
66
66
if tenant .ConsoleExternalCert () && tenant .HasConsoleEnabled () && body .Console != nil {
67
67
consoleCertSecretName := fmt .Sprintf ("%s-console-external-certificates" , secretName )
68
68
// update certificates
69
- if _ , err := createOrReplaceExternalCertSecret (ctx , clientSet , namespace , body .Console , consoleCertSecretName , tenantName ); err != nil {
69
+ certificates := []* models.KeyPairConfiguration {body .Console }
70
+ if _ , err := createOrReplaceExternalCertSecrets (ctx , clientSet , namespace , certificates , consoleCertSecretName , tenantName ); err != nil {
70
71
return err
71
72
}
72
73
// restart Console pods
@@ -119,15 +120,17 @@ func tenantUpdateEncryption(ctx context.Context, operatorClient OperatorClientI,
119
120
if tenant .KESExternalCert () && body .Server != nil {
120
121
kesExternalCertSecretName := fmt .Sprintf ("%s-kes-external-cert" , secretName )
121
122
// update certificates
122
- if _ , err := createOrReplaceExternalCertSecret (ctx , clientSet , namespace , body .Server , kesExternalCertSecretName , tenantName ); err != nil {
123
+ certificates := []* models.KeyPairConfiguration {body .Server }
124
+ if _ , err := createOrReplaceExternalCertSecrets (ctx , clientSet , namespace , certificates , kesExternalCertSecretName , tenantName ); err != nil {
123
125
return err
124
126
}
125
127
}
126
128
// check if Tenant is deployed with external client certificates and user provided new client keypaiir
127
129
if tenant .ExternalClientCert () && body .Client != nil {
128
130
tenantExternalClientCertSecretName := fmt .Sprintf ("%s-tenant-external-client-cert" , secretName )
129
131
// Update certificates
130
- if _ , err := createOrReplaceExternalCertSecret (ctx , clientSet , namespace , body .Client , tenantExternalClientCertSecretName , tenantName ); err != nil {
132
+ certificates := []* models.KeyPairConfiguration {body .Client }
133
+ if _ , err := createOrReplaceExternalCertSecrets (ctx , clientSet , namespace , certificates , tenantExternalClientCertSecretName , tenantName ); err != nil {
131
134
return err
132
135
}
133
136
// Restart MinIO pods to mount the new client secrets
@@ -202,12 +205,15 @@ func getKESConfiguration(ctx context.Context, clientSet K8sClientI, ns string, e
202
205
}
203
206
// Generate server certificates for KES only if autoCert is disabled
204
207
if ! autoCert {
205
- kesExternalCertSecret , err := createOrReplaceExternalCertSecret (ctx , clientSet , ns , encryptionCfg .Server , kesExternalCertSecretName , tenantName )
208
+ certificates := []* models.KeyPairConfiguration {encryptionCfg .Server }
209
+ certificateSecrets , err := createOrReplaceExternalCertSecrets (ctx , clientSet , ns , certificates , kesExternalCertSecretName , tenantName )
206
210
if err != nil {
207
211
return nil , err
208
212
}
209
- // External TLS certificates used by KES
210
- kesConfiguration .ExternalCertSecret = kesExternalCertSecret
213
+ if len (certificateSecrets ) > 0 {
214
+ // External TLS certificates used by KES
215
+ kesConfiguration .ExternalCertSecret = certificateSecrets [0 ]
216
+ }
211
217
}
212
218
// Prepare kesConfiguration for KES
213
219
serverConfigSecret , clientCertSecret , err := createOrReplaceKesConfigurationSecrets (ctx , clientSet , ns , encryptionCfg , kesConfigurationSecretName , kesClientCertSecretName , tenantName )
@@ -221,50 +227,54 @@ func getKESConfiguration(ctx context.Context, clientSet K8sClientI, ns string, e
221
227
return kesConfiguration , nil
222
228
}
223
229
224
- // createOrReplaceExternalCertSecret receives a keypair, public and private key, encoded in base64, decode it and generate a new kubernetes secret
225
- // to be used by the operator for TLS encryption
226
- func createOrReplaceExternalCertSecret (ctx context.Context , clientSet K8sClientI , ns string , keyPair * models.KeyPairConfiguration , secretName , tenantName string ) (* operator.LocalCertificateReference , error ) {
227
- if keyPair == nil || keyPair .Crt == nil || keyPair .Key == nil || * keyPair .Crt == "" || * keyPair .Key == "" {
228
- return nil , errors .New ("certificate files must not be empty" )
229
- }
230
- // delete secret with same name if exists
231
- err := clientSet .deleteSecret (ctx , ns , secretName , metav1.DeleteOptions {})
232
- if err != nil {
233
- // log the error if any and continue
234
- log .Println (err )
235
- }
236
- imm := true
237
- tlsCrt , err := base64 .StdEncoding .DecodeString (* keyPair .Crt )
238
- if err != nil {
239
- return nil , err
240
- }
241
- tlsKey , err := base64 .StdEncoding .DecodeString (* keyPair .Key )
242
- if err != nil {
243
- return nil , err
244
- }
245
- externalTLSCertificateSecret := & corev1.Secret {
246
- ObjectMeta : metav1.ObjectMeta {
247
- Name : secretName ,
248
- Labels : map [string ]string {
249
- operator .TenantLabel : tenantName ,
230
+ // createOrReplaceExternalCertSecrets receives an array of KeyPairs (public and private key), encoded in base64, decode it and generate an equivalent number of kubernetes
231
+ // secrets to be used by the operator for TLS encryption
232
+ func createOrReplaceExternalCertSecrets (ctx context.Context , clientSet K8sClientI , ns string , keyPairs []* models.KeyPairConfiguration , secretName , tenantName string ) ([]* operator.LocalCertificateReference , error ) {
233
+ var keyPairSecrets []* operator.LocalCertificateReference
234
+ for _ , keyPair := range keyPairs {
235
+ if keyPair == nil || keyPair .Crt == nil || keyPair .Key == nil || * keyPair .Crt == "" || * keyPair .Key == "" {
236
+ return nil , errors .New ("certificate files must not be empty" )
237
+ }
238
+ // delete secret with same name if exists
239
+ err := clientSet .deleteSecret (ctx , ns , secretName , metav1.DeleteOptions {})
240
+ if err != nil {
241
+ // log the error if any and continue
242
+ log .Println (err )
243
+ }
244
+ imm := true
245
+ tlsCrt , err := base64 .StdEncoding .DecodeString (* keyPair .Crt )
246
+ if err != nil {
247
+ return nil , err
248
+ }
249
+ tlsKey , err := base64 .StdEncoding .DecodeString (* keyPair .Key )
250
+ if err != nil {
251
+ return nil , err
252
+ }
253
+ externalTLSCertificateSecret := & corev1.Secret {
254
+ ObjectMeta : metav1.ObjectMeta {
255
+ Name : secretName ,
256
+ Labels : map [string ]string {
257
+ operator .TenantLabel : tenantName ,
258
+ },
250
259
},
251
- },
252
- Type : corev1 .SecretTypeTLS ,
253
- Immutable : & imm ,
254
- Data : map [string ][]byte {
255
- "tls.crt" : tlsCrt ,
256
- "tls.key" : tlsKey ,
257
- },
258
- }
259
- _ , err = clientSet .createSecret (ctx , ns , externalTLSCertificateSecret , metav1.CreateOptions {})
260
- if err != nil {
261
- return nil , err
260
+ Type : corev1 .SecretTypeTLS ,
261
+ Immutable : & imm ,
262
+ Data : map [string ][]byte {
263
+ "tls.crt" : tlsCrt ,
264
+ "tls.key" : tlsKey ,
265
+ },
266
+ }
267
+ _ , err = clientSet .createSecret (ctx , ns , externalTLSCertificateSecret , metav1.CreateOptions {})
268
+ if err != nil {
269
+ return nil , err
270
+ }
271
+ // Certificates used by the minio instance
272
+ keyPairSecrets = append (keyPairSecrets , & operator.LocalCertificateReference {
273
+ Name : secretName ,
274
+ Type : "kubernetes.io/tls" ,
275
+ })
262
276
}
263
- // Certificates used by the minio instance
264
- return & operator.LocalCertificateReference {
265
- Name : secretName ,
266
- Type : "kubernetes.io/tls" ,
267
- }, nil
277
+ return keyPairSecrets , nil
268
278
}
269
279
270
280
func createOrReplaceKesConfigurationSecrets (ctx context.Context , clientSet K8sClientI , ns string , encryptionCfg * models.EncryptionConfiguration , kesConfigurationSecretName , kesClientCertSecretName , tenantName string ) (* corev1.LocalObjectReference , * operator.LocalCertificateReference , error ) {
0 commit comments