bg-tutorials

Come installare un certificato SSL ACME in Kubernetes

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.

Installare ACME SSL su Kubernetes

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

Un'immagine dettagliata di un drago in volo
Scritto da

Scrittore di contenuti con esperienza, specializzato in certificati SSL. Trasforma intricati argomenti di cybersicurezza in contenuti chiari e coinvolgenti. Contribuisci a migliorare la sicurezza digitale attraverso narrazioni d'impatto.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.