TLS/SSL Certificates

Optional but Recommended: This guide replaces the default self-signed certificate with a valid Let’s Encrypt certificate, eliminating browser security warnings for deployments.

After completing this guide, all deployments receiving Akash Provider hostnames within *.ingress.<yourdomain> will automatically have a valid Let’s Encrypt certificate.

Time: 20-30 minutes


STEP 1 - Install Cert-Manager

Add Jetstack Helm Repository

Terminal window
helm repo add jetstack https://charts.jetstack.io
helm repo update

Install Cert-Manager

Terminal window
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.19.1 \
--set crds.enabled=true

Verify Installation

Terminal window
kubectl -n cert-manager get pods

Expected output:

NAME READY STATUS RESTARTS AGE
cert-manager-xxx 1/1 Running 0 2m
cert-manager-cainjector-xxx 1/1 Running 0 2m
cert-manager-webhook-xxx 1/1 Running 0 2m

STEP 2 - Configure DNS Provider

Choose your DNS provider:


STEP 3 - Request Wildcard Certificate

Create a wildcard certificate for your ingress domain:

Terminal window
cat > wildcard-cert.yaml << 'EOF'
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: wildcard-yourdomain-com
namespace: ingress-nginx
spec:
secretName: wildcard-yourdomain-com-tls
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
commonName: '*.yourdomain.com'
dnsNames:
- '*.yourdomain.com'
- '*.ingress.yourdomain.com'
EOF
kubectl apply -f wildcard-cert.yaml

Important: Replace yourdomain.com with your actual domain. Keep the *.ingress. prefix as-is (wildcards don’t work for sub-sub domains per RFC 2818).

Verify Certificate

Terminal window
kubectl -n ingress-nginx get certificate
kubectl -n ingress-nginx describe certificate wildcard-yourdomain-com

Wait for the certificate to show Ready: True (may take 1-2 minutes).


STEP 4 - Configure Ingress Controller

Update your ingress-nginx configuration to use the wildcard certificate:

Update Configuration

Edit your existing ingress-nginx-custom.yaml:

Terminal window
nano /root/ingress-nginx-custom.yaml

Add the extraArgs section:

controller:
extraArgs:
enable-ssl-passthrough: true
default-ssl-certificate: "ingress-nginx/wildcard-yourdomain-com-tls" # Add this line
service:
type: ClusterIP
# ... rest of your existing config

Upgrade Ingress Controller

Terminal window
helm upgrade ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
-f /root/ingress-nginx-custom.yaml

STEP 5 - Verify SSL Certificates

Test Wildcard Certificate

Terminal window
echo "" | openssl s_client -connect test.ingress.yourdomain.com:443 -showcerts 2>&1 | \
openssl x509 -issuer -subject -dates -noout -text | \
grep -E '(Issuer:|Subject:|Not Before:|Not After :|DNS:)'

Expected output:

Issuer: C = US, O = Let's Encrypt, CN = R3
Not Before: Nov 28 10:40:06 2025 GMT
Not After : Feb 26 10:40:05 2026 GMT
Subject: CN = *.yourdomain.com
DNS:*.ingress.yourdomain.com, DNS:*.yourdomain.com

If you see “Kubernetes Ingress Controller Fake Certificate”, the cert hasn’t been issued yet or ingress-nginx didn’t pick it up.

Check All Certificates

Terminal window
kubectl get certificates,certificaterequests,orders,challenges -A

Troubleshooting

Certificate Not Issuing

Check cert-manager logs:

Terminal window
kubectl -n cert-manager logs -l app=cert-manager

Check certificate status:

Terminal window
kubectl -n ingress-nginx describe certificate wildcard-yourdomain-com
kubectl -n ingress-nginx get certificaterequest

DNS-01 Challenge Failing

Still Seeing Fake Certificate

Wait 2-3 minutes for cert-manager to issue the certificate, then restart ingress-nginx:

Terminal window
kubectl -n ingress-nginx rollout restart deployment ingress-nginx-controller

Next Steps

Your provider now has automatic SSL certificates for all deployments!

Resources:

footer-logo-dark

© Akash Network 2025 The Akash Network Authors Documentation Distributed under CC BY 4.0

Open-source Apache 2.0 Licensed.

GitHub v0.38.2

Privacy