L’installazione di un certificato SSL ACME in Kubernetes è ora un processo standardizzato e flessibile grazie a strumenti maturi come cert-manager e all’ampio supporto delle CA commerciali. Se stai eseguendo carichi di lavoro di produzione dietro NGINX Ingress, Traefik o un altro gateway, puoi automatizzare l’HTTPS sicuro con il massimo controllo.

Questa guida ti mostrerà come installare un certificato SSL ACME in Kubernetes utilizzando cert-manager. Ci occuperemo dell’installazione, dell’impostazione di un emittente con External Account Binding (EAB) e dell’emissione di certificati per proteggere i tuoi servizi di ingresso.
Cosa ti serve
Prima di tuffarti, assicurati che:
- Disponi di un cluster Kubernetes funzionante (si consiglia la versione 1.23+)
kubectlè configurato e funzionante- Hai accesso al tuo controller di ingress (ad esempio, NGINX, Traefik)
- Il tuo dominio punta all’IP pubblico del controller di ingresso
- Hai le credenziali EAB della tua CA compatibile con ACME:
- URL della directory ACME (es. https://acme.example.com/v2/DV)
- Identificatore chiave EAB (KID)
- Chiave EAB HMAC
Nota: https://acme.example.com/v2/DV è utilizzato in questa guida come URL segnaposto della directory ACME. Sostituiscilo con l’endpoint reale della tua autorità di certificazione.
Passo 1 – Installare cert-manager
cert-manager è il client ACME nativo di Kubernetes più diffuso. Funziona come un controller che gestisce l’emissione e il rinnovo dei certificati.
Installa tramite Helm (preferibile per la produzione):
kubectl create namespace cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v1.14.4 \
--set installCRDs=true
Attendi qualche secondo e conferma che tutti i pod sono in funzione:
kubectl get pods -n cert-manager
Dovresti vedere tre pod: cert-manager, cert-manager-webhook e cert-manager-cainjector.
Passo 2 – Creare un segreto Kubernetes per le credenziali EAB
Crea un segreto Kubernetes per memorizzare la chiave EAB in modo sicuro:
kubectl create secret generic acme-eab-secret \
--namespace cert-manager \
--from-literal=eab-kid="YOUR_EAB_KID" \
--from-literal=eab-hmac-key="YOUR_EAB_HMAC_KEY"
Sostituisci con le tue credenziali reali. Evita gli spazi bianchi del copia-incolla.
Passo 3 – Definire un ClusterIssuer o Issuer
Ora, crea una risorsa ClusterIssuer (per tutti i namespace) o Issuer (singolo namespace) che connetta cert-manager alla tua ACME CA utilizzando le credenziali EAB.
Ecco un esempio di ClusterIssuer YAML:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: acme-issuer
spec:
acme:
server: https://your.acme-server.com/v2/DV
email: [email protected]
privateKeySecretRef:
name: acme-private-key
externalAccountBinding:
keyID: YOUR_EAB_KID
keySecretRef:
name: acme-eab-secret
key: eab-hmac-key
solvers:
- http01:
ingress:
class: nginx
Applicalo:
kubectl apply -f clusterissuer.yaml
Sostituisci ingress.class: nginx con traefik, nginx-internal o qualunque sia la tua classe ingress. Puoi trovarla nella documentazione del tuo controller ingress.
Passo 4 – Creare una risorsa di certificato
Una volta che il tuo ClusterIssuer è pronto, crea una risorsa Certificato che indichi a cert-manager quale dominio proteggere. Ecco un esempio:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: my-ssl-cert
namespace: default
spec:
secretName: my-ssl-cert-tls
issuerRef:
name: acme-issuer
kind: ClusterIssuer
commonName: yourdomain.com
dnsNames:
- yourdomain.com
- www.yourdomain.com
Applicalo:
kubectl apply -f certificate.yaml
cert-manager utilizzerà l’emittente, risolverà la sfida via ingress e memorizzerà il certificato rilasciato come segreto TLS di Kubernetes.
Passo 5 – Fare riferimento al certificato nel tuo Ingress
Aggiorna la regola di ingresso per utilizzare il certificato generato:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: default
annotations:
cert-manager.io/cluster-issuer: acme-issuer
spec:
tls:
- hosts:
- yourdomain.com
- www.yourdomain.com
secretName: my-ssl-cert-tls
rules:
- host: yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: your-service
port:
number: 80
Applicalo:
kubectl apply -f ingress.yaml
Una volta che cert-manager rileva l’annotazione, inizierà a risolvere la sfida ACME e rilascerà il tuo certificato.
Passo 6 – Verifica del certificato e del rinnovo automatico
Per verificare che tutto funzioni:
kubectl descrivere il certificato my-ssl-cert
Cerca il certificato rilasciato con successo.
Per verificare la configurazione del rinnovo, esegui:
kubectl get certificaterequests
cert-manager gestisce il rinnovo automaticamente circa 30 giorni prima della scadenza. Puoi simulare un rinnovo in questo modo:
kubectl cert-manager renew my-ssl-cert
Domande comuni
L’impostazione di ACME SSL in Kubernetes può sembrare un po’ astratta, soprattutto quando ci si trova a dover gestire controllori di ingresso, segreti e record DNS. Di seguito, rispondiamo ad alcune domande comuni che gli sviluppatori si trovano ad affrontare quando installano i certificati ACME in un ambiente Kubernetes, sia che tu stia usando cert-manager o una configurazione alternativa.
Posso usare DNS-01 invece di HTTP-01?
Sì, cert-manager supporta la validazione DNS con provider come Cloudflare, AWS e Google Cloud DNS. Utilizzalo se non esponi la porta 80.
Cert-manager è pronto per la produzione?
Assolutamente sì. È in grado di alimentare l’SSL per i cluster Kubernetes di grandi dimensioni nelle aziende e nei cloud pubblici.
Posso usare un certificato wildcard con ACME in Kubernetes?
Sì, ma i certificati wildcard richiedono la convalida DNS-01, che comporta l’aggiornamento dei record DNS invece di utilizzare le sfide HTTP. Verifica che il tuo provider DNS supporti l’automazione (tramite API) e configura il risolutore dns01 di conseguenza nella configurazione del cert-manager.
Parole finali
Ora sai come installare un certificato SSL ACME in Kubernetes utilizzando cert-manager e un’autorità di certificazione compatibile con ACME. Questa configurazione è completamente automatizzata e scalabile per i moderni ambienti Kubernetes. Otterrai un HTTPS sicuro, il rinnovo automatico e una perfetta integrazione con Ingress, il tutto senza lasciare il tuo cluster.
Risparmia il 10% sui certificati SSL ordinando oggi stesso da SSL Dragon!
Emissione rapida, crittografia avanzata, affidabilità del browser al 99,99%, assistenza dedicata e garanzia di rimborso entro 25 giorni. Codice coupon: SAVE10

