Skip to content
This repository was archived by the owner on Aug 7, 2023. It is now read-only.

Commit 334050b

Browse files
committed
feature: renewal process implemented
1 parent 6dd6bd9 commit 334050b

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

cmd/root.go

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ import (
4141

4242
var (
4343
kubeconfig, namespace, secret, service string
44+
days int
45+
forceRenewal bool
4446
csrNameTemplate0 = "${service}"
4547
csrNameTemplate1 = "${service}.${namespace}"
4648
csrNameTemplate2 = "${service}.${namespace}.svc"
@@ -128,12 +130,45 @@ Usage:
128130
},
129131
}
130132

131-
log.Println("Certificate signing request, status: Deleting")
132-
err = certificateSigningRequestsClient.Delete(context.TODO(), csrNameWithServiceAndNamespace, metav1.DeleteOptions{})
133+
log.Println("Certificate signing request, status: Retrieving")
134+
csExistInCluster, err := certificateSigningRequestsClient.Get(context.TODO(), csrNameWithServiceAndNamespace, metav1.GetOptions{})
133135
if err != nil {
134-
log.Printf("Delete CertificateSigningRequest - error occurred, detail: %v, but ignored", err)
136+
log.Printf("Get CertificateSigningRequest - error occurred, detail: %v, but ignored", err)
135137
}
136138

139+
if csExistInCluster.Status.Certificate != nil {
140+
log.Println("Certificate signing request, status: Retrieved")
141+
certificateAlreadyCreated := csExistInCluster.Status.Certificate
142+
block, _ := pem.Decode(certificateAlreadyCreated)
143+
cert, err := x509.ParseCertificate(block.Bytes)
144+
if err != nil {
145+
log.Fatalf("x509.ParseCertificate - error occurred, detail: %v", err)
146+
}
147+
log.Println("Certificate signing request, status: Checking NotAfter date")
148+
149+
validForDays := int(cert.NotAfter.Sub(time.Now()).Hours() / 24)
150+
log.Printf("Certificate signing request - status: This certificate valid for %d days", validForDays)
151+
152+
expired := validForDays <= days
153+
log.Printf("Certificate signing request - status: Renewal necessary %t", expired || forceRenewal)
154+
155+
log.Printf("Certificate signing request, status: Expired %t", expired)
156+
log.Printf("Certificate signing request, status: Force renewal %t", forceRenewal)
157+
if expired || forceRenewal {
158+
log.Println("Certificate signing request, status: Renewal process started")
159+
log.Println("Certificate signing request, status: Deleting")
160+
err = certificateSigningRequestsClient.Delete(context.TODO(), csrNameWithServiceAndNamespace, metav1.DeleteOptions{})
161+
if err != nil {
162+
log.Fatalf("Delete CertificateSigningRequest - error occurred, detail: %v, but ignored", err)
163+
}
164+
log.Println("Certificate signing request, status: Deleted")
165+
} else {
166+
log.Println("Certificate signing request, status: Renewal process is not necessary, skipped")
167+
os.Exit(0)
168+
}
169+
}
170+
log.Println("Certificate signing request, status: Not Retrieved")
171+
137172
log.Println("Certificate signing request, status: Creating")
138173
csr, err := certificateSigningRequestsClient.Create(context.TODO(), certificateSigningRequest, metav1.CreateOptions{})
139174
if err != nil {
@@ -213,7 +248,7 @@ Usage:
213248
} else {
214249
log.Println("Secret, status: Updated")
215250
}
216-
251+
217252
log.Printf("Done in %d milliseconds", time.Since(start).Milliseconds())
218253
},
219254
}
@@ -243,6 +278,8 @@ func init() {
243278
rootCmd.Flags().StringVarP(&service, "service", "s", "", "Service name of webhook.")
244279
rootCmd.Flags().StringVarP(&secret, "secret", "t", "tls-secret", "Secret name for CA certificate and server certificate/key pair.")
245280
rootCmd.Flags().StringVarP(&kubeconfig, "kubeconfig", "k", "", "kubeconfig path")
281+
rootCmd.Flags().IntVarP(&days, "days", "d", 1, "the number of days remaining for certificate renewal")
282+
rootCmd.Flags().BoolVarP(&forceRenewal, "force", "f", false, "enable force renewal before expiration time")
246283

247284
_ = rootCmd.MarkFlagRequired("service")
248285
}

k8s-webhook-certificator

36.7 MB
Binary file not shown.

0 commit comments

Comments
 (0)