@@ -56,10 +56,10 @@ func AdminClient(dot *helmette.Dot, dialer DialContextFunc) (*rpadmin.AdminAPI,
56
56
var tlsConfig * tls.Config
57
57
var err error
58
58
59
- if redpanda . TLSEnabled ( dot ) {
59
+ if values . Listeners . Admin . TLS . IsEnabled ( & values . TLS ) {
60
60
prefix = "https://"
61
61
62
- tlsConfig , err = tlsConfigFromDot (dot , values .Listeners .Admin .TLS . Cert )
62
+ tlsConfig , err = tlsConfigFromDot (dot , values .Listeners .Admin .TLS )
63
63
if err != nil {
64
64
return nil , err
65
65
}
@@ -113,10 +113,10 @@ func SchemaRegistryClient(dot *helmette.Dot, dialer DialContextFunc, opts ...sr.
113
113
}).DialContext
114
114
}
115
115
116
- if redpanda . TLSEnabled ( dot ) {
116
+ if values . Listeners . SchemaRegistry . TLS . IsEnabled ( & values . TLS ) {
117
117
prefix = "https://"
118
118
119
- tlsConfig , err := tlsConfigFromDot (dot , values .Listeners .SchemaRegistry .TLS . Cert )
119
+ tlsConfig , err := tlsConfigFromDot (dot , values .Listeners .SchemaRegistry .TLS )
120
120
if err != nil {
121
121
return nil , err
122
122
}
@@ -156,8 +156,8 @@ func KafkaClient(dot *helmette.Dot, dialer DialContextFunc, opts ...kgo.Opt) (*k
156
156
157
157
opts = append (opts , kgo .SeedBrokers (brokers ... ))
158
158
159
- if redpanda . TLSEnabled ( dot ) {
160
- tlsConfig , err := tlsConfigFromDot (dot , values .Listeners .Kafka .TLS . Cert )
159
+ if values . Listeners . Kafka . TLS . IsEnabled ( & values . TLS ) {
160
+ tlsConfig , err := tlsConfigFromDot (dot , values .Listeners .Kafka .TLS )
161
161
if err != nil {
162
162
return nil , err
163
163
}
@@ -237,14 +237,44 @@ func authFromDot(dot *helmette.Dot) (username string, password string, mechanism
237
237
return
238
238
}
239
239
240
- func tlsConfigFromDot (dot * helmette.Dot , cert string ) (* tls.Config , error ) {
240
+ func certificatesFor (dot * helmette.Dot , cert string ) (certSecret , certKey , clientSecret string ) {
241
+ values := helmette.Unwrap [redpanda.Values ](dot .Values )
242
+
241
243
name := redpanda .Fullname (dot )
244
+
245
+ // default to cert manager issued names and tls.crt which is
246
+ // where cert-manager outputs the root CA
247
+ certKey = corev1 .TLSCertKey
248
+ certSecret = fmt .Sprintf ("%s-%s-root-certificate" , name , cert )
249
+ clientSecret = fmt .Sprintf ("%s-client" , name )
250
+
251
+ if certificate , ok := values .TLS .Certs [cert ]; ok {
252
+ // if this references a non-enabled certificate, just return
253
+ // the default cert-manager issued names
254
+ if certificate .Enabled != nil && ! * certificate .Enabled {
255
+ return certSecret , certKey , clientSecret
256
+ }
257
+
258
+ if certificate .ClientSecretRef != nil {
259
+ clientSecret = certificate .ClientSecretRef .Name
260
+ }
261
+ if certificate .SecretRef != nil {
262
+ certSecret = certificate .SecretRef .Name
263
+ if certificate .CAEnabled {
264
+ certKey = "ca.crt"
265
+ }
266
+ }
267
+ }
268
+ return certSecret , certKey , clientSecret
269
+ }
270
+
271
+ func tlsConfigFromDot (dot * helmette.Dot , listener redpanda.InternalTLS ) (* tls.Config , error ) {
242
272
namespace := dot .Release .Namespace
243
273
serviceName := redpanda .ServiceName (dot )
244
- clientCertName := fmt .Sprintf ("%s-client" , name )
245
- rootCertName := fmt .Sprintf ("%s-%s-root-certificate" , name , cert )
246
274
serverName := fmt .Sprintf ("%s.%s.svc" , serviceName , namespace )
247
275
276
+ rootCertName , rootCertKey , clientCertName := certificatesFor (dot , listener .Cert )
277
+
248
278
serverTLSError := func (err error ) error {
249
279
return fmt .Errorf ("error fetching server root CA %s/%s: %w" , namespace , rootCertName , err )
250
280
}
@@ -263,7 +293,7 @@ func tlsConfigFromDot(dot *helmette.Dot, cert string) (*tls.Config, error) {
263
293
return nil , serverTLSError (ErrServerCertificateNotFound )
264
294
}
265
295
266
- serverPublicKey , found := serverCert .Data [corev1 . TLSCertKey ]
296
+ serverPublicKey , found := serverCert .Data [rootCertKey ]
267
297
if ! found {
268
298
return nil , serverTLSError (ErrServerCertificatePublicKeyNotFound )
269
299
}
@@ -278,7 +308,7 @@ func tlsConfigFromDot(dot *helmette.Dot, cert string) (*tls.Config, error) {
278
308
279
309
tlsConfig .RootCAs = pool
280
310
281
- if redpanda . ClientAuthRequired ( dot ) {
311
+ if listener . RequireClientAuth {
282
312
clientCert , found , lookupErr := helmette .SafeLookup [corev1.Secret ](dot , namespace , clientCertName )
283
313
if lookupErr != nil {
284
314
return nil , clientTLSError (lookupErr )
@@ -288,6 +318,7 @@ func tlsConfigFromDot(dot *helmette.Dot, cert string) (*tls.Config, error) {
288
318
return nil , clientTLSError (ErrServerCertificateNotFound )
289
319
}
290
320
321
+ // we always use tls.crt for client certs
291
322
clientPublicKey , found := clientCert .Data [corev1 .TLSCertKey ]
292
323
if ! found {
293
324
return nil , clientTLSError (ErrClientCertificatePublicKeyNotFound )
0 commit comments