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.