Duplicate Certificates and too many certificates issued

Please fill out the fields below so we can help you better. Note: you must provide your domain name to get help. Domain names for issued certificates are all made public in Certificate Transparency logs (e.g. https://crt.sh/?q=example.com), so withholding your domain name here does not increase secrecy, but only makes it harder for us to provide help.

My domain is: iconverse-k8s.taiger.io

I ran this command:
I spin up a single-node k8s cluster with ingress and AWS Route53. The https works in the beginning but after several rounds of CI/CD/system reboots, it stops to work and try to dig around for the root cause of the problem. Here are my configurations:

It produced this output:

E0325 08:56:20.831639       1 controller.go:186] orders controller: Re-queuing item "default/iconverse-k8s.tls-1171866450" due to error processing: error creating new order: acme: urn:ietf:params:acme:error:rateLimited: Error creating new order :: too many certificates already issued for exact set of domains: iconverse-k8s.taiger.io: see https://letsencrypt.org/docs/rate-limits/

My web server is (include version): tomcat 9.0.16

The operating system my web server runs on is (include version): Ubuntu 18.04

My hosting provider, if applicable, is: AWS EKS

I can login to a root shell on my machine (yes or no, or I don’t know): yes

I’m using a control panel to manage my site (no, or provide the name and version of the control panel): no

The version of my client is (e.g. output of certbot --version or certbot-auto --version if you’re using Certbot):

Hi @khteh

you have created 5 identical certificates ( https://check-your-website.server-daten.de/?q=iconverse-k8s.taiger.io ):

Last Certificates - Certificate Transparency Log Check (BETA)

CRT-Id Issuer not before not after Domain names LE-Duplicate next LE
1306752734 CN=Let's Encrypt Authority X3, O=Let's Encrypt, C=US 2019-03-22 01:44:33 2019-06-20 00:44:33 iconverse-k8s.taiger.io duplicate nr. 5 next Letsencrypt certificate: 2019-03-27 23:51:25
1303664845 CN=Let's Encrypt Authority X3, O=Let's Encrypt, C=US 2019-03-21 01:28:35 2019-06-19 00:28:35 iconverse-k8s.taiger.io duplicate nr. 4
1303593501 CN=Let's Encrypt Authority X3, O=Let's Encrypt, C=US 2019-03-21 00:56:13 2019-06-18 23:56:13 iconverse-k8s.taiger.io duplicate nr. 3
1309663776 CN=Let's Encrypt Authority X3, O=Let's Encrypt, C=US 2019-03-21 00:44:09 2019-06-18 23:44:09 iconverse-k8s.taiger.io duplicate nr. 2
1303980699 CN=Let's Encrypt Authority X3, O=Let's Encrypt, C=US 2019-03-20 23:51:25 2019-06-18 22:51:25 iconverse-k8s.taiger.io duplicate nr. 1

So you can't create a new certificate. You can create max. 5 certificates in 7 days.

Where are these? Deleted? If yes, your setup is wrong. You should save certificates outside, so you can create a certificate, then use it 60 - 85 days, then create the next.

But not recreating with every reboot.

I am deploying it to a single-node kubernetes cluster. The whole idea of using the certificate manager is for it to self-manage. It doesn’t make sense to manually run the certificate manager to get the ssl cert, tear it down and then hopefully not forgetting to run it to refresh the certificate again every now and then before the certificate expires. What do I miss?

Nobody says "manual". Save your certificates outside, not in your cluster. So the certificate manager can find these. And should renew the certificates, if they are max. 30 or 15 days valid.

You miss the rate limit. Think about a server with 1000 domains. 1000 new certificates after a reboot? Creating certificates requires ressources, it's not free.

And it's possible to do that, so only every 60 - 85 days a new certificate is created.

How to automate the saving of the issued certificate, check the presence of it (If present, use it, not present resubmit request)? This is what I do:

kubectl create namespace cert-manager
kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.7/deploy/manifests/00-crds.yaml
kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.7/deploy/manifests/cert-manager.yaml
kubectl apply -f ssl-issuer.yml 

I don't use kubectl, but there must be a standard solution.

Saving the certificates outside of the container, so they are permanent, not deleted when rebooting. The renew should work automatic.

Hi @khteh - have you tried asking this question in the Slack channel that Jetstack moderates for cert-manager users to get help? See GitHub - jetstack/cert-manager: Automatically provision and manage TLS certificates in Kubernetes

You're of course welcome to continue to find support here but in general I'd say the Let's Encrypt community forum's expertise with cert-manager and Kubernetes is lower than in their Slack channel.

  1. How to use that saved cert external to the container?

  2. How to manage the 2 sources of cert here between the saved and the cert manager daemon?

  3. How would the cert manager know the presence of an externally saved cert and stop requesting for a new one unless that cert has expired?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.