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 esegue il provisioning, rinnova e gestisce per i tuoi nomi di dominio. Questi certificati non dimostrano la tua identità individuale o aziendale.
Questa pagina è rivolta a esperti di networking e sicurezza che pianificano e implementano la sicurezza di rete e sviluppano e gestiscono i criteri di sicurezza. Per approfondire i ruoli comuni e le attività di esempio a cui facciamo riferimento nei contenuti di Google Cloud, consulta Ruoli e attività comuni degli utenti di GKE Enterprise.
Per scoprire come creare certificati gestiti da Google con Google Cloud, consulta Certificati gestiti da Google.
Creazione di un Ingress con un certificato gestito da Google
Per configurare un certificato SSL gestito da Google e associarlo a un Ingress, devi:
- Crea un oggetto
ManagedCertificate
nello stesso spazio dei nomi dell'Ingress. - Associa l'oggetto
ManagedCertificate
a un Ingress aggiungendo l'annotazionenetworking.gke.io/managed-certificates
all'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 non jolly. A differenza dei certificati autogestiti, i certificati gestiti da Google non supportano i domini con caratteri jolly.
Se hai bisogno di certificati con gestione indipendente o se possiedi già certificati SSL che vuoi configurare su Ingress, consulta Configurare HTTPS (TLS) tra client e bilanciatore del carico.
Il numero e il tipo di certificati supportati da un Ingress sono definiti dai limiti dei certificati SSL gestiti da Google.
Gli aggiornamenti dei certificati gestiti da Google non sono supportati. Per ulteriori informazioni, consulta Aggiornare manualmente un certificato gestito da Google.
Se il certificato viene revocato direttamente presso l'autorità di certificazione, Google non lo ruota automaticamente. Devi eliminare il valore ManagedCertificate e crearne uno nuovo.
Prerequisiti
- Devi possedere il nome di dominio. Il nome di dominio non deve superare i 63 caratteri. Puoi utilizzare Google Domains o un altro registrar.
- Se utilizzi un cluster GKE Standard, il plug-in
HttpLoadBalancing
deve essere attivato. - Il tuo
ingressClassName
deve essere"gce"
. - Devi applicare le risorse
Ingress
eManagedCertificate
nello stesso progetto e nello stesso spazio dei nomi. Crea un indirizzo IP esterno riservato (statico). La prenotazione di un indirizzo IP statico ti garantisce che rimarrà di tua proprietà anche se elimini l'Ingress. Se non prenoti un indirizzo IP, questo potrebbe cambiare, quindi dovrai riconfigurare i record DNS del tuo dominio. Utilizza Google Cloud CLI o la console Google Cloud per creare un indirizzo IP riservato.
gcloud
Per creare un indirizzo IP riservato, esegui il seguente comando:
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 il seguente comando:
gcloud compute addresses describe ADDRESS_NAME --global
L'output è simile al seguente:
address: 203.0.113.32 ...
Console
Per creare un indirizzo IP riservato:
Vai alla pagina Indirizzi IP esterni nella console Google Cloud.
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 è elencato nella colonna 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 sulla tua macchina comecompute-address.yaml
esegui: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 seguente manifest descrive un oggetto
ManagedCertificate
. Salva il manifest comemanaged-cert.yaml
.apiVersion: networking.gke.io/v1 kind: ManagedCertificate metadata: name: managed-cert spec: domains: - FQDN_1 - FQDN_2
Sostituisci quanto segue:
FQDN_1
,FQDN_2
: nomi di dominio completamente qualificati di tua proprietà. Ad esempio,example.com
ewww.example.com
.
Applica il manifest al cluster:
kubectl apply -f managed-cert.yaml
Crea un servizio di tipo
NodePort
per esporre l'applicazione a internet.Il seguente manifest descrive un servizio di tipo
NodePort
. Salva il 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 cluster:
kubectl apply -f mc-service.yaml
Crea un Ingress.
Il seguente manifest descrive un Ingress che utilizza il
ManagedCertificate
che hai creato. Salva il file 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" # Updated annotation spec: defaultBackend: service: name: mc-service port: number: SERVICE_PORT
Sostituisci quanto segue:
ADDRESS_NAME
: il nome dell'indirizzo IP riservato.SERVICE_PORT
: il valore diports.port
nel file manifest del servizio.
Applica il manifest al cluster:
kubectl apply -f managed-cert-ingress.yaml
Ottieni l'indirizzo IP del bilanciatore del carico:
kubectl get ingress
L'output è simile al seguente:
NAME HOSTS ADDRESS PORTS AGE managed-cert-ingress * 203.0.113.32 80 54s
L'indirizzo IP del bilanciatore del carico è elencato nella colonna
ADDRESS
. Se utilizzi un indirizzo IP statico riservato, questo sarà l'indirizzo del bilanciatore del carico.Se l'indirizzo non è presente nell'elenco, attendi il termine della configurazione di Ingress.
Configura i record DNS per i tuoi domini in modo che rimandino all'indirizzo IP del bilanciatore del carico. Se utilizzi Cloud DNS, consulta Gestire i record per maggiori 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: FQDN_1 FQDN_2 Status: CertificateStatus: Active (...)
Il valore del campo
Status.CertificateStatus
indica che il provisioning del certificato è stato eseguito. SeStatus.CertificateStatus
non èActive
, il provisioning del certificato non è ancora stato eseguito.Puoi controllare gli eventi su un Ingress utilizzando il seguente comando:
kubectl describe ingress INGRESS_NAME
Sostituisci
INGRESS_NAME
con il nome dell'Ingress.Verifica che il protocollo SSL funzioni visitando i tuoi domini utilizzando il prefisso
https://
. Il 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 un Ingress dall'utilizzo di certificati SSL autogestiti ai certificati SSL gestiti da Google, non eliminare i certificati SSL autogestiti prima che quelli gestiti da Google siano attivi. Una volta eseguito correttamente il provisioning dei certificati SSL gestiti da Google, questi vengono attivati automaticamente. Quando i certificati SSL gestiti da Google sono attivi, puoi eliminare i certificati SSL con gestione indipendente.
Segui queste istruzioni per eseguire la migrazione dai certificati SSL autogestiti a quelli gestiti da Google.
- Aggiungi un nuovo certificato gestito da Google a Ingress, come descritto nella sezione Configurare un certificato gestito da Google.
Attendi che lo stato della risorsa del certificato gestita da Google sia Attivo. Controlla lo stato del certificato con il seguente comando:
kubectl describe managedcertificate managed-cert
Quando lo stato è
Active
, aggiorna Ingress per rimuovere i riferimenti al certificato autogestito.
Rimuovere un certificato gestito da Google
Per rimuovere un certificato gestito da Google dal tuo cluster, devi eliminare l'oggetto ManagedCertificate
e rimuovere l'annotazione Ingress che fa riferimento al certificato.
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 dall'Ingress:
kubectl annotate ingress managed-cert-ingress networking.gke.io/managed-certificates-
Nota il segno meno,
-
, alla fine del comando.Rilascia l'indirizzo IP statico che hai prenotato per il bilanciatore del carico.
Puoi utilizzare Google Cloud CLI, la console Google Cloud 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 riservato, svolgi i seguenti passaggi:
Vai alla pagina Indirizzi IP esterni nella console Google Cloud.
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 sulla tua macchina come
compute-address.yaml
esegui:kubectl delete -f compute-address.yaml
Risoluzione dei problemi
Questa sezione fornisce informazioni su come risolvere i problemi relativi ai certificati gestiti da Google.
Controllare 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 del tuo
ManagedCertificate
.
Se colleghi un ManagedCertificate
inesistente a un Ingress, a quest'ultimo viene aggiunto un evento con un motivo MissingCertificate
. Puoi controllare gli eventi su un Ingress utilizzando il seguente comando:
kubectl describe ingress INGRESS_NAME
Sostituisci INGRESS_NAME
con il nome dell'Ingress.
Il provisioning del certificato gestito non viene eseguito quando il dominio risolve in indirizzi IP di più bilanciatori del carico
Quando il tuo dominio risolve in indirizzi IP di più bilanciatori del carico (più oggetti Ingress), devi creare un singolo oggetto ManagedCertificate
e agganciarlo a tutti gli oggetti Ingress. Se invece crei molti oggetti ManagedCertificate
e li colleghi ciascuno a un Ingress separato, la CA potrebbe non essere in grado di verificare la proprietà del tuo dominio e il provisioning di alcuni dei tuoi certificati potrebbe non essere stato eseguito. Affinché la verifica vada a buon fine, il certificato deve essere visibile in tutti gli indirizzi IP a cui si risolve il tuo dominio.
In particolare, quando il tuo dominio 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 ingressi.
Comunicazione interrotta tra i certificati gestiti da Google e Ingress
I certificati gestiti comunicano con Ingress utilizzando l'annotazione ingress.gcp.kubernetes.io/pre-shared-cert
. Puoi interrompere questa comunicazione
se, ad esempio:
- Esegui un processo automatizzato che cancella l'annotazione
ingress.gcp.kubernetes.io/pre-shared-cert
. - Memorizza uno snapshot di Ingress, quindi elimina e ripristina Ingress dallo snapshot. Nel frattempo, una risorsa
SslCertificate
elencata nell'annotazioneingress.gcp.kubernetes.io/pre-shared-cert
potrebbe essere stata eliminata. Ingress non funziona se mancano i certificati collegati.
Se la comunicazione tra i certificati gestiti da Google e Ingress viene interrotta, elimina i contenuti dell'annotazione ingress.gcp.kubernetes.io/pre-shared-cert
e attendi che il sistema esegua la riconciliazione. Per evitare che si ripeta, 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 diversi messaggi di errore e i relativi motivi sono spiegati di seguito:
spec.domains in body should have at most 100 items
Il manifest ManagedCertificate
elenca più di 100 domini nel
spec.domains
. I certificati gestiti da Google supportano 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 carattere jolly nel
spec.domains
campo. 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 nomi di dominio con un massimo di 63 caratteri.
Aggiornamento manuale di un certificato gestito da Google
Per aggiornare manualmente il certificato in modo che 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 del
ManagedCertificate
all'annotazionenetworking.gke.io/managed-certificates
nell'Ingress utilizzando un elenco separato da virgole. Non rimuovere il nome del vecchio 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 aggiorni ManagedCertificate
, Google Cloud elimina e ricrea il certificato SSL gestito da Google.
Per fornire un Ingress criptato HTTPS sicuro per i tuoi cluster GKE, consulta l'esempio Ingress sicuro.
Passaggi successivi
- Scopri di più sui certificati gestiti da Google.
- Scopri come configurare un bilanciatore del carico delle applicazioni esterno con Ingress.
- Scopri come utilizzare più certificati SSL con bilanciatori del carico delle applicazioni esterni con Ingress.
- Implementa un Ingress sicuro.