@@ -19,6 +19,8 @@ package certificate
19
19
import (
20
20
"bytes"
21
21
"context"
22
+ "crypto/x509"
23
+ "crypto/x509/pkix"
22
24
"fmt"
23
25
"net"
24
26
"os"
@@ -28,8 +30,12 @@ import (
28
30
"time"
29
31
30
32
v1 "k8s.io/api/core/v1"
33
+ "k8s.io/apimachinery/pkg/types"
31
34
"k8s.io/apimachinery/pkg/util/wait"
35
+ utilfeature "k8s.io/apiserver/pkg/util/feature"
32
36
"k8s.io/client-go/util/cert"
37
+ featuregatetesting "k8s.io/component-base/featuregate/testing"
38
+ "k8s.io/kubernetes/pkg/features"
33
39
netutils "k8s.io/utils/net"
34
40
)
35
41
@@ -261,3 +267,142 @@ func TestKubeletServerCertificateFromFiles(t *testing.T) {
261
267
})
262
268
}
263
269
}
270
+
271
+ func TestNewCertificateManagerConfigGetTemplate (t * testing.T ) {
272
+ nodeName := "fake-node"
273
+ nodeIP := netutils .ParseIPSloppy ("192.168.1.1" )
274
+ tests := []struct {
275
+ name string
276
+ nodeAddresses []v1.NodeAddress
277
+ want * x509.CertificateRequest
278
+ featuregate bool
279
+ }{
280
+ {
281
+ name : "node addresses or hostnames and gate enabled" ,
282
+ featuregate : true ,
283
+ },
284
+ {
285
+ name : "node addresses or hostnames and gate disabled" ,
286
+ featuregate : false ,
287
+ },
288
+ {
289
+ name : "only hostnames and gate enabled" ,
290
+ nodeAddresses : []v1.NodeAddress {
291
+ {
292
+ Type : v1 .NodeHostName ,
293
+ Address : nodeName ,
294
+ },
295
+ },
296
+ want : & x509.CertificateRequest {
297
+ Subject : pkix.Name {
298
+ CommonName : fmt .Sprintf ("system:node:%s" , nodeName ),
299
+ Organization : []string {"system:nodes" },
300
+ },
301
+ DNSNames : []string {nodeName },
302
+ },
303
+ featuregate : true ,
304
+ },
305
+ {
306
+ name : "only hostnames and gate disabled" ,
307
+ nodeAddresses : []v1.NodeAddress {
308
+ {
309
+ Type : v1 .NodeHostName ,
310
+ Address : nodeName ,
311
+ },
312
+ },
313
+ featuregate : false ,
314
+ },
315
+ {
316
+ name : "only IP addresses and gate enabled" ,
317
+ nodeAddresses : []v1.NodeAddress {
318
+ {
319
+ Type : v1 .NodeInternalIP ,
320
+ Address : nodeIP .String (),
321
+ },
322
+ },
323
+ want : & x509.CertificateRequest {
324
+ Subject : pkix.Name {
325
+ CommonName : fmt .Sprintf ("system:node:%s" , nodeName ),
326
+ Organization : []string {"system:nodes" },
327
+ },
328
+ IPAddresses : []net.IP {nodeIP },
329
+ },
330
+ featuregate : true ,
331
+ },
332
+ {
333
+ name : "only IP addresses and gate disabled" ,
334
+ nodeAddresses : []v1.NodeAddress {
335
+ {
336
+ Type : v1 .NodeInternalIP ,
337
+ Address : nodeIP .String (),
338
+ },
339
+ },
340
+ want : & x509.CertificateRequest {
341
+ Subject : pkix.Name {
342
+ CommonName : fmt .Sprintf ("system:node:%s" , nodeName ),
343
+ Organization : []string {"system:nodes" },
344
+ },
345
+ IPAddresses : []net.IP {nodeIP },
346
+ },
347
+ featuregate : false ,
348
+ },
349
+ {
350
+ name : "IP addresses and hostnames and gate enabled" ,
351
+ nodeAddresses : []v1.NodeAddress {
352
+ {
353
+ Type : v1 .NodeHostName ,
354
+ Address : nodeName ,
355
+ },
356
+ {
357
+ Type : v1 .NodeInternalIP ,
358
+ Address : nodeIP .String (),
359
+ },
360
+ },
361
+ want : & x509.CertificateRequest {
362
+ Subject : pkix.Name {
363
+ CommonName : fmt .Sprintf ("system:node:%s" , nodeName ),
364
+ Organization : []string {"system:nodes" },
365
+ },
366
+ DNSNames : []string {nodeName },
367
+ IPAddresses : []net.IP {nodeIP },
368
+ },
369
+ featuregate : true ,
370
+ },
371
+ {
372
+ name : "IP addresses and hostnames and gate disabled" ,
373
+ nodeAddresses : []v1.NodeAddress {
374
+ {
375
+ Type : v1 .NodeHostName ,
376
+ Address : nodeName ,
377
+ },
378
+ {
379
+ Type : v1 .NodeInternalIP ,
380
+ Address : nodeIP .String (),
381
+ },
382
+ },
383
+ want : & x509.CertificateRequest {
384
+ Subject : pkix.Name {
385
+ CommonName : fmt .Sprintf ("system:node:%s" , nodeName ),
386
+ Organization : []string {"system:nodes" },
387
+ },
388
+ DNSNames : []string {nodeName },
389
+ IPAddresses : []net.IP {nodeIP },
390
+ },
391
+ featuregate : false ,
392
+ },
393
+ }
394
+ for _ , tt := range tests {
395
+ t .Run (tt .name , func (t * testing.T ) {
396
+ featuregatetesting .SetFeatureGateDuringTest (t , utilfeature .DefaultFeatureGate , features .AllowDNSOnlyNodeCSR , tt .featuregate )
397
+ getAddresses := func () []v1.NodeAddress {
398
+ return tt .nodeAddresses
399
+ }
400
+ getTemplate := newGetTemplateFn (types .NodeName (nodeName ), getAddresses )
401
+ got := getTemplate ()
402
+ if ! reflect .DeepEqual (got , tt .want ) {
403
+ t .Errorf ("Wrong certificate, got %v expected %v" , got , tt .want )
404
+ return
405
+ }
406
+ })
407
+ }
408
+ }
0 commit comments