@@ -566,11 +566,27 @@ func getPeerCertName(etcdClusterName string) string {
566566 return peerCertName
567567}
568568
569- func createCMCertificateConfig (ec * ecv1alpha1.EtcdCluster ) * certInterface.Config {
569+ // parseValidityDuration parses a duration string and returns the parsed duration.
570+ // If the customizedDuration is empty, it returns the defaultDuration.
571+ // Returns an error if the duration string cannot be parsed.
572+ func parseValidityDuration (customizedDuration string , defaultDuration time.Duration ) (time.Duration , error ) {
573+ if customizedDuration == "" {
574+ return defaultDuration , nil
575+ }
576+ duration , err := time .ParseDuration (customizedDuration )
577+ if err != nil {
578+ return 0 , fmt .Errorf ("failed to parse ValidityDuration: %w" , err )
579+ }
580+ return duration , nil
581+ }
582+
583+ func createCMCertificateConfig (ec * ecv1alpha1.EtcdCluster ) (* certInterface.Config , error ) {
570584 cmConfig := ec .Spec .TLS .ProviderCfg .CertManagerCfg
571- duration , err := time .ParseDuration (cmConfig .ValidityDuration )
585+
586+ // Set default duration to 90 days for cert-manager if not provided
587+ duration , err := parseValidityDuration (cmConfig .ValidityDuration , certInterface .DefaultCertManagerValidity )
572588 if err != nil {
573- log . Printf ( "Failed to parse ValidityDuration: %s" , err )
589+ return nil , err
574590 }
575591
576592 var getAltNames certInterface.AltNames
@@ -580,7 +596,12 @@ func createCMCertificateConfig(ec *ecv1alpha1.EtcdCluster) *certInterface.Config
580596 IPs : make ([]net.IP , len (cmConfig .AltNames .DNSNames )),
581597 }
582598 } else {
583- defaultDNSNames := []string {fmt .Sprintf ("%s.svc.cluster.local" , cmConfig .CommonName )}
599+ // Use wildcard DNS for the cluster's headless service to cover all pods
600+ // This allows the certificate to work for pod-0, pod-1, etc.
601+ defaultDNSNames := []string {
602+ fmt .Sprintf ("*.%s.%s.svc.cluster.local" , ec .Name , ec .Namespace ),
603+ fmt .Sprintf ("%s.%s.svc.cluster.local" , ec .Name , ec .Namespace ),
604+ }
584605 getAltNames = certInterface.AltNames {
585606 DNSNames : defaultDNSNames ,
586607 }
@@ -596,14 +617,16 @@ func createCMCertificateConfig(ec *ecv1alpha1.EtcdCluster) *certInterface.Config
596617 "issuerKind" : cmConfig .IssuerKind ,
597618 },
598619 }
599- return config
620+ return config , nil
600621}
601622
602- func createAutoCertificateConfig (ec * ecv1alpha1.EtcdCluster ) * certInterface.Config {
623+ func createAutoCertificateConfig (ec * ecv1alpha1.EtcdCluster ) ( * certInterface.Config , error ) {
603624 autoConfig := ec .Spec .TLS .ProviderCfg .AutoCfg
604- duration , err := time .ParseDuration (autoConfig .ValidityDuration )
625+
626+ // Set default duration to 365 days for auto provider if not provided
627+ duration , err := parseValidityDuration (autoConfig .ValidityDuration , certInterface .DefaultAutoValidity )
605628 if err != nil {
606- log . Printf ( "Failed to parse ValidityDuration: %s" , err )
629+ return nil , err
607630 }
608631
609632 var altNames certInterface.AltNames
@@ -613,7 +636,12 @@ func createAutoCertificateConfig(ec *ecv1alpha1.EtcdCluster) *certInterface.Conf
613636 IPs : make ([]net.IP , len (autoConfig .AltNames .DNSNames )),
614637 }
615638 } else {
616- defaultDNSNames := []string {fmt .Sprintf ("%s.svc.cluster.local" , autoConfig .CommonName )}
639+ // Use wildcard DNS for the cluster's headless service to cover all pods
640+ // This allows the certificate to work for pod-0, pod-1, etc.
641+ defaultDNSNames := []string {
642+ fmt .Sprintf ("*.%s.%s.svc.cluster.local" , ec .Name , ec .Namespace ),
643+ fmt .Sprintf ("%s.%s.svc.cluster.local" , ec .Name , ec .Namespace ),
644+ }
617645 altNames = certInterface.AltNames {
618646 DNSNames : defaultDNSNames ,
619647 }
@@ -625,7 +653,7 @@ func createAutoCertificateConfig(ec *ecv1alpha1.EtcdCluster) *certInterface.Conf
625653 ValidityDuration : duration ,
626654 AltNames : altNames ,
627655 }
628- return config
656+ return config , nil
629657}
630658
631659func createCertificate (ec * ecv1alpha1.EtcdCluster , ctx context.Context , c client.Client , certName string ) error {
@@ -647,17 +675,23 @@ func createCertificate(ec *ecv1alpha1.EtcdCluster, ctx context.Context, c client
647675 secretKey := client.ObjectKey {Name : certName , Namespace : ec .Namespace }
648676 switch {
649677 case ec .Spec .TLS .ProviderCfg .AutoCfg != nil :
650- autoConfig := createAutoCertificateConfig (ec )
678+ autoConfig , err := createAutoCertificateConfig (ec )
679+ if err != nil {
680+ return fmt .Errorf ("error creating auto certificate config: %w" , err )
681+ }
651682 createCertErr := cert .EnsureCertificateSecret (ctx , secretKey , autoConfig )
652683 if createCertErr != nil {
653- log . Printf ( "Error creating certificate: %s " , createCertErr )
684+ return fmt . Errorf ( "error creating auto certificate: %w " , createCertErr )
654685 }
655686 return nil
656687 case ec .Spec .TLS .ProviderCfg .CertManagerCfg != nil :
657- cmConfig := createCMCertificateConfig (ec )
688+ cmConfig , err := createCMCertificateConfig (ec )
689+ if err != nil {
690+ return fmt .Errorf ("error creating cert-manager certificate config: %w" , err )
691+ }
658692 createCertErr := cert .EnsureCertificateSecret (ctx , secretKey , cmConfig )
659693 if createCertErr != nil {
660- log . Printf ( "Error creating certificate: %s " , createCertErr )
694+ return fmt . Errorf ( "error creating cert-manager certificate: %w " , createCertErr )
661695 }
662696 return nil
663697 default :
0 commit comments