Questa pagina mostra come utilizzare gli oggetti Ingress per creare bilanciatori del carico esterni con certificati SSL gestiti da Google. Questi certificati sono certificati di convalida del dominio (DV) che Google fornisce, rinnova e gestisce per i tuoi nomi di dominio. Questi certificati non attestano la tua identità individuale o organizzativa.
Per informazioni su come creare certificati gestiti da Google con Google Cloud, consulta Certificati gestiti da Google.
I certificati SSL gestiti da Google GKE supportano i cluster pubblici e privati.
Versioni API
Puoi configurare i certificati SSL gestiti da Google utilizzando una risorsa personalizzata ManagedCertificate
, disponibile in diverse versioni dell'API, a seconda della versione del tuo cluster Google Kubernetes Engine (GKE):
- L'API
v1beta2
ManagedCertificate
è disponibile nelle versioni GKE 1.15 e successive. - L'API
v1
ManagedCertificate
è disponibile nelle versioni GKE 1.17.9-gke.6300 e successive.
Anche se i cluster GKE attualmente supportano l'API ManagedCertificate
v1beta1
, questa versione API verrà deprecata e verrà rimossa nelle versioni future di
GKE. Ti consigliamo di utilizzare una versione più recente dell'API.
Migrazione tra versioni API
Gli oggetti ManagedCertificate
vengono promossi automaticamente in una versione più recente dell'API quando vengono aggiornati in un cluster che supporta questa versione. Le risorse vengono aggiornate periodicamente, quindi non è necessario eseguire alcuna azione per eseguirne la migrazione.
Creazione di una risorsa Ingress con un certificato gestito da Google
Per configurare un certificato SSL gestito da Google e associarlo a una risorsa Ingress, devi:
- Crea un oggetto
ManagedCertificate
nello stesso spazio dei nomi della risorsa Ingress. - Associa l'oggetto
ManagedCertificate
a una risorsa Ingress aggiungendo l'annotazionenetworking.gke.io/managed-certificates
a Ingress. Questa annotazione è un elenco di oggettiManagedCertificate
separati da virgole.
Limitazioni
I certificati gestiti da Google sono meno flessibili dei certificati che ottieni e gestisci autonomamente. I certificati gestiti da Google supportano fino a 100 domini senza caratteri jolly. A differenza dei certificati autogestiti, i certificati gestiti da Google non supportano i domini con caratteri jolly.
Se hai bisogno di certificati autogestiti o se possiedi già certificati SSL che vuoi configurare su Ingress, consulta la sezione Configurare HTTPS (TLS) tra client e bilanciatore del carico.
Il numero e il tipo di certificati supportati da una risorsa Ingress sono definiti dai limiti dei certificati SSL gestiti da Google.
Gli aggiornamenti sui certificati gestiti da Google non sono supportati. Per ulteriori informazioni, consulta la pagina Aggiornare manualmente un certificato gestito da Google.
Prerequisiti
- Il nome del dominio deve essere di tua proprietà. Il nome di dominio non deve contenere più di 63 caratteri. Puoi utilizzare Google Domains o un altro registrar.
- Nel cluster deve essere abilitato il componente aggiuntivo
HttpLoadBalancing
. - Il valore di
"kubernetes.io/ingress.class"
deve essere"gce"
. - Devi applicare le risorse
Ingress
eManagedCertificate
nello stesso progetto e spazio dei nomi. Crea un indirizzo IP esterno prenotato (statico). La prenotazione di un indirizzo IP statico garantisce che rimanga tale, anche se elimini l'Ingress. Se non prenoti un indirizzo IP, potrebbe cambiare e potresti dover riconfigurare i record DNS del tuo dominio. Utilizza l'interfaccia a riga di comando di Google Cloud o Cloud Console per creare un indirizzo IP riservato.
gcloud
Per creare un indirizzo IP riservato, esegui il comando seguente:
gcloud compute addresses create ADDRESS_NAME --global
Sostituisci
ADDRESS_NAME
con il nome dell'indirizzo IP riservato che stai creando.Per trovare l'indirizzo IP statico che hai creato, esegui questo comando:
gcloud compute addresses describe ADDRESS_NAME --global
L'output è simile al seguente:
address: 203.0.113.32 ...
Console
Per creare un indirizzo IP prenotato, segui questi passaggi:
Vai alla pagina Indirizzi IP esterni in Cloud Console.
Specifica un nome per l'indirizzo IP (ad esempio
example-ip-address
).Specifica se vuoi un indirizzo IPv4 o IPv6.
Seleziona l'opzione Globale per Tipo.
Fai clic su Prenota. L'indirizzo IP è indicato nella colonna External Address (Indirizzo esterno).
Config Connector
Nota: questo passaggio richiede Config Connector. Segui le istruzioni di installazione per installare Config Connector nel cluster.
Per eseguire il deployment di questo manifest, scaricalo sul tuo computer comecompute-address.yaml
ed esegui questo comando:kubectl apply -f compute-address.yaml
Configurazione di un certificato gestito da Google
Crea un oggetto
ManagedCertificate
. Questa risorsa specifica i domini per il certificato SSL. I domini con caratteri jolly non sono supportati.Il file manifest seguente descrive un oggetto
ManagedCertificate
. Salva il file manifest comemanaged-cert.yaml
.apiVersion: networking.gke.io/v1 kind: ManagedCertificate metadata: name: managed-cert spec: domains: - DOMAIN_NAME1 - DOMAIN_NAME2
Sostituisci quanto segue:
DOMAIN_NAME1
eDOMAIN_NAME2
: nomi di dominio di tua proprietà. Ad esempio,example.com
ewww.example.com
.
Applica il manifest al tuo cluster:
kubectl apply -f managed-cert.yaml
Crea un Service di tipo
NodePort
per esporre la tua applicazione a Internet.Il file manifest seguente descrive un servizio di tipo
NodePort
. Salva il file manifest comemc-service.yaml
.apiVersion: v1 kind: Service metadata: name: mc-service spec: selector: app: mc-service type: NodePort ports: - protocol: TCP port: 80 targetPort: 8080
Applica il manifest al tuo cluster:
kubectl apply -f mc-service.yaml
Creare una risorsa Ingress.
Il file manifest seguente descrive una risorsa Ingress che utilizza l'elemento
ManagedCertificate
che hai creato. Salva il manifest comemanaged-cert-ingress.yaml
.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: managed-cert-ingress annotations: kubernetes.io/ingress.global-static-ip-name: ADDRESS_NAME networking.gke.io/managed-certificates: managed-cert kubernetes.io/ingress.class: "gce" spec: defaultBackend: service: name: mc-service port: number: SERVICE_PORT
Sostituisci quanto segue:
ADDRESS_NAME
: il nome dell'indirizzo IP prenotato.SERVICE_PORT
: il valore della variabileports.port
nel manifest del servizio.
Applica il manifest al tuo cluster:
kubectl apply -f managed-cert-ingress.yaml
Recupera l'indirizzo IP del bilanciatore del carico:
kubectl get ingress
L'output è simile al seguente:
NAME HOSTS ADDRESS PORTS AGE example-ingress * 203.0.113.32 80 54s
L'indirizzo IP del bilanciatore del carico è indicato nella colonna
ADDRESS
. Se utilizzi un indirizzo IP statico riservato che sarà l'indirizzo del bilanciatore del carico.Se l'indirizzo non è presente nell'elenco, attendi che la configurazione della risorsa Ingress venga completata.
Configura i record DNS per i tuoi domini in modo che rimandino all'indirizzo IP del bilanciatore del carico. Se utilizzi Cloud DNS, consulta la sezione Gestione dei record per i dettagli.
Attendi il completamento del provisioning del certificato gestito da Google. L'operazione potrebbe richiedere fino a 60 minuti. Puoi controllare lo stato del certificato utilizzando il seguente comando:
kubectl describe managedcertificate managed-cert
L'output è simile al seguente:
Name: managed-cert Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: ManagedCertificate (...) Spec: Domains: DOMAIN_NAME1 DOMAIN_NAME2 Status: CertificateStatus: Active (...)
Il valore del campo
Status.CertificateStatus
indica che è stato eseguito il provisioning del certificato. SeStatus.CertificateStatus
non èActive
, il provisioning del certificato non è ancora stato eseguito.Per verificare che SSL funzioni, visita i tuoi domini utilizzando il prefisso
https://
. Il tuo browser indica che la connessione è sicura e puoi visualizzare i dettagli del certificato.
Migrazione ai certificati gestiti da Google dai certificati autogestiti
Quando esegui la migrazione di una risorsa Ingress dall'utilizzo di certificati SSL autogestiti a certificati SSL gestiti da Google, non eliminare i certificati SSL autogestiti prima che i certificati SSL gestiti da Google siano attivi. Dopo aver eseguito correttamente il provisioning dei certificati SSL gestiti da Google, questi diventano automaticamente attivi. Quando i certificati SSL gestiti da Google sono attivi, puoi eliminare i certificati SSL autogestiti.
Segui queste istruzioni per la migrazione dai certificati SSL autogestiti a Google.
- Aggiungi un nuovo certificato gestito da Google alla risorsa Ingress, come descritto nella sezione Configurazione di un certificato gestito da Google.
Attendi che lo stato della risorsa del certificato gestito da Google sia Attivo. Controlla lo stato del certificato con il comando seguente:
kubectl describe managedcertificate managed-cert
Quando lo stato è
Active
, aggiorna la risorsa Ingress per rimuovere i riferimenti al certificato autogestito.
Rimuovere un certificato gestito da Google
Per rimuovere un certificato gestito da Google dal cluster, devi eliminare l'oggetto ManagedCertificate
e rimuovere l'annotazione Ingress che vi fa riferimento.
Elimina l'oggetto
ManagedCertificate
:kubectl delete -f managed-cert.yaml
L'output è simile al seguente:
managedcertificate.networking.gke.io "managed-cert" deleted
Rimuovi l'annotazione da Ingress:
kubectl annotate ingress managed-cert-ingress networking.gke.io/managed-certificates-
Vedrai il segno meno,
-
, alla fine del comando.Rilascia l'indirizzo IP statico prenotato per il bilanciatore del carico.
Puoi utilizzare l'interfaccia a riga di comando di Google Cloud, Cloud Console o Config Connector per rilasciare un indirizzo IP riservato.
gcloud
Utilizza il seguente comando per rilasciare l'indirizzo IP riservato:
gcloud compute addresses delete ADDRESS_NAME --global
Sostituisci
ADDRESS_NAME
con il nome dell'indirizzo IP.Console
Per rilasciare l'indirizzo IP prenotato:
Vai alla pagina Indirizzi IP esterni in Cloud Console.
Seleziona la casella di controllo accanto all'indirizzo IP che vuoi rilasciare.
Fai clic su Rilascia indirizzo IP.
Config Connector
Nota: questo passaggio richiede Config Connector. Segui le istruzioni di installazione per installare Config Connector nel cluster.
Per eseguire il deployment di questo manifest, scaricalo sul tuo computer come
compute-address.yaml
ed esegui questo comando:kubectl delete -f compute-address.yaml
Risolvere i problemi
Questa sezione fornisce informazioni su come risolvere i problemi con i certificati gestiti da Google.
Controlla gli eventi nelle risorse ManagedCertificate
e Ingress
Se superi il numero di certificati consentiti, a ManagedCertificate
viene aggiunto un evento con un motivo TooManyCertificates
. Puoi
controllare gli eventi su un oggetto ManagedCertificate
utilizzando il seguente comando:
kubectl describe managedcertificate CERTIFICATE_NAME
Sostituisci CERTIFICATE_NAME
con il nome della tua
ManagedCertificate
.
Se alleghi una risorsa ManagedCertificate
v1 inesistente a una risorsa Ingress, alla risorsa Ingress viene aggiunto un evento
con un motivo MissingCertificate
. Puoi controllare gli eventi su una risorsa Ingress utilizzando il seguente comando:
kubectl describe ingress INGRESS_NAME
Sostituisci INGRESS_NAME
con il nome della risorsa Ingress.
Certificato gestito di cui non è stato eseguito il provisioning quando il dominio viene risolto negli indirizzi IP di più bilanciatori del carico
Quando il tuo dominio si risolve negli indirizzi IP di più bilanciatori del carico (più oggetti Ingress), devi creare un singolo oggetto ManagedCertificate
e
collegarlo a tutti gli oggetti Ingress. Se invece crei molti oggetti ManagedCertificate
e li colleghi a una risorsa Ingress separata, l'autorità di certificazione potrebbe non essere in grado di verificare la proprietà del dominio e potrebbe non essere stato eseguito il provisioning di alcuni certificati. Affinché la verifica vada a buon fine, il certificato deve essere visibile sotto tutti gli indirizzi IP a cui il dominio risolve.
In particolare, quando il dominio si risolve in un indirizzo IPv4 e un indirizzo IPv6
configurati con oggetti Ingress diversi, devi creare un singolo oggetto
ManagedCertificate
e collegarlo a entrambi gli oggetti Ingress.
Interruzione della comunicazione tra certificati gestiti da Google e Ingress
I certificati gestiti comunicano con Ingress utilizzando l'annotazione
kubernetes.io/pre-shared-cert
. Puoi interrompere questa comunicazione
se, ad esempio:
- Esegui un processo automatizzato che cancelli l'annotazione
kubernetes.io/pre-shared-cert
. - Archivia uno snapshot di Ingress, quindi elimina e ripristina la risorsa Ingress dall'istantanea. Nel frattempo, una risorsa
SslCertificate
elencata nell'annotazione pre-condivisa del certificato potrebbe essere stata eliminata. La risorsa Ingress non funziona se non sono presenti certificati collegati.
Se la comunicazione tra certificati gestiti da Google e Ingress viene interrotta, elimina i contenuti dell'annotazione kubernetes.io/pre-shared-cert
e attendi che il sistema venga riconciliato. Per evitare che la ricorrenza si verifichi, assicurati che l'annotazione non venga modificata o eliminata inavvertitamente.
Errori di convalida durante la creazione di un certificato gestito da Google
Le definizioni di ManagedCertificate
vengono convalidate prima della creazione dell'oggetto ManagedCertificate
. Se la convalida non va a buon fine, l'oggetto ManagedCertificate
non viene creato e viene stampato un messaggio di errore. I motivi e i messaggi di errore sono spiegati di seguito:
spec.domains in body should have at most 100 items
Il file manifest ManagedCertificate
elenca più di 100 domini nel campo
spec.domains
. I certificati gestiti da Google supportano solo fino a 100 domini.
spec.domains in body should match '^(([a-zA-Z0-9]+|[a-zA-Z0-9][-a-zA-Z0-9]*[a-zA-Z0-9])\.)+[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]\.?$'
Hai specificato un nome di dominio non valido o un nome di dominio con caratteri jolly nel campo
spec.domains
. L'oggetto ManagedCertificate
non supporta i
domini con caratteri jolly (ad esempio, *.example.com
).
spec.domains in body should be at most 63 chars long
Hai specificato un nome di dominio troppo lungo. I certificati gestiti da Google supportano i nomi di dominio con un massimo di 63 caratteri.
Aggiornare manualmente un certificato gestito da Google
Per aggiornare manualmente il certificato in modo che il certificato per il dominio precedente continui a funzionare fino al provisioning del certificato per il nuovo dominio, segui questi passaggi:
- Crea un
ManagedCertificate
per il nuovo dominio. - Aggiungi il nome di
ManagedCertificate
all'annotazionenetworking.gke.io/managed-certificates
su Ingress utilizzando un elenco separato da virgole. Non rimuovere il vecchio nome del certificato. - Attendi che
ManagedCertificate
diventi attivo. - Scollega il vecchio certificato da Ingress ed eliminalo.
Quando crei un ManagedCertificate
, Google Cloud crea un certificato SSL gestito da Google. Non puoi aggiornare questo certificato. Se
aggiorna l'oggetto ManagedCertificate
, Google Cloud elimina e ricrea il
certificato SSL gestito da Google.
Passaggi successivi
- Scopri di più sui certificati gestiti da Google.
- Scopri come configurare il bilanciamento del carico HTTP(S) con Ingress.
- Scopri come utilizzare più certificati SSL nel bilanciamento del carico HTTP(S) con Ingress.