How to fix ACME challenge failed in Kubernetes
The ACME challenge failed error occurs when cert-manager cannot validate domain ownership with Let's Encrypt during TLS certificate provisioning. This typically blocks certificate issuance and renewal, preventing HTTPS traffic. Common causes include DNS propagation issues, HTTP endpoint accessibility problems, and rate limiting violations.
Quick fix
Fixes ACME challenge failed
kubectl describe challenge
kubectl describe order- Debug the challenge failure
- Verify Let's Encrypt can reach your endpoints
- Fix HTTP-01 challenge issues
- Fix DNS-01 challenge issues
kubectl describe challengekubectl describe orderACME challenge failed
What this error means
This error indicates that your Kubernetes cluster, using cert-manager with Let's Encrypt, failed to complete the ACME challenge process. ACME (Automated Certificate Management Environment) requires domain ownership validation before issuing TLS certificates. The failure prevents certificate creation or renewal, which means your applications cannot serve HTTPS traffic. The error can occur at different stages: DNS validation (DNS-01), HTTP validation (HTTP-01), or self-verification checks.
Typical symptoms
- Certificate remains in Pending state for hours or days
- ACME Order creation fails with 429 or 401 errors
- Challenge self-check failures visible in kubectl describe challenge output
- DNS records appear correct externally but fail from within the cluster
- HTTP challenge endpoints unreachable from the public internet
- Logs show "Waiting for DNS-01 challenge propagation" or similar messages
Common causes
- DNS propagation issues where _acme-challenge TXT records are not visible from cluster DNS servers
- Cloud provider DNS overrides preventing TXT record resolution
- HTTP-01 challenge failures due to ingress LoadBalancer with externalTrafficPolicy set to Local
- Firewall or network policy blocking Let's Encrypt servers from accessing challenge URLs
- Rate limiting (429 errors) from exceeding 5 failures per account/hostname/hour threshold
- TLS handshake failures on challenge endpoints requiring temporary self-signed certificates
- Self-check timeouts from DNS timeouts or connection refused errors
How to fix "ACME challenge failed"
First, inspect the challenge and order objects to understand why validation failed:
kubectl describe challenge
kubectl describe orderLook for error messages indicating DNS or HTTP validation failures. The output will show the specific challenge type (dns01 or http01) and any error messages from the validation attempt.
For HTTP-01 challenges, verify that Let's Encrypt servers can reach your challenge URL:
curl -I http://yourdomain.com/.well-known/acme-challenge/test-tokenFor DNS-01 challenges, verify TXT records are visible externally:
dig _acme-challenge.yourdomain.com TXT @8.8.8.8If using HTTP-01, check your ingress LoadBalancer configuration:
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
spec:
externalTrafficPolicy: ClusterAlso verify no client certificate authentication blocks the ACME validation endpoints.
For DNS-01 challenges, configure cert-manager to use a specific DNS server for self-checks:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
solvers:
- dns01:
cloudflare:
apiTokenSecretRef:
name: cloudflare-api
key: tokenVerify DNS provider credentials are correct and API access is enabled.
If you see 429 errors, you've hit Let's Encrypt rate limits. Use the staging issuer first:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
spec:
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directoryWait 1 hour before retrying with the production issuer.
For TLS handshake failures, enable temporary certificate generation:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: example-com
spec:
dnsNames:
- example.com
issuerRef:
name: letsencrypt-prod
issueTemporaryCertificate: trueThis allows the ingress to start with a temporary cert while the ACME challenge completes.
For multiple resources on the same hostname, use:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
acme.cert-manager.io/http01-edit-in-place: "true"This allows cert-manager to modify your existing ingress for the challenge rather than creating a new one.
Advanced notes
Platform-specific considerations: EKS, AKS, and GKE often override cluster DNS servers, causing DNS-01 failures; explicitly configure DNS servers in cert-manager solver specs. Cloudflare and Route53 require valid API credentials and rate limit monitoring on the DNS provider side. For production deployments, test with the Let's Encrypt staging issuer first to avoid hitting rate limits and causing extended outages.
Frequently asked questions
- What does "ACME challenge failed" mean?
- This error indicates that your Kubernetes cluster, using cert-manager with Let's Encrypt, failed to complete the ACME challenge process. ACME (Automated Certificate Management Environment) requires domain ownership validation before issuing TLS certificates. The failure prevents certificate creation or renewal, which means your applications cannot serve HTTPS traffic.
- How do I fix "ACME challenge failed"?
- The ACME challenge failed error occurs when cert-manager cannot validate domain ownership with Let's Encrypt during TLS certificate provisioning. This typically blocks certificate issuance and renewal, preventing HTTPS traffic. Common causes include DNS propagation issues, HTTP endpoint accessibility problems, and rate limiting violations.
- What causes "ACME challenge failed"?
- DNS propagation issues where _acme-challenge TXT records are not visible from cluster DNS servers Cloud provider DNS overrides preventing TXT record resolution HTTP-01 challenge failures due to ingress LoadBalancer with externalTrafficPolicy set to Local
- Is the "ACME challenge failed" error serious?
- Yes. This is a high-severity error that usually blocks work until it is fixed, but the steps above resolve it.
Official resources & further reading
- ๐Kubernetes Official Documentation
- ๐
- ๐
- ๐ฌStack Overflow: acme challenge failed for domain(Stack Overflow)
- ๐