Utilizzo di certificati SSL gestiti da Google

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questa pagina mostra come utilizzare gli oggetti In entrata 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 dimostrano la tua identità individuale o organizzativa.

Per informazioni su come creare certificati gestiti da Google con Google Cloud, vedi Certificati gestiti da Google.

I certificati SSL gestiti da Google 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 cluster Google Kubernetes Engine (GKE):

  • L'API ManagedCertificate v1beta2 è disponibile nelle versioni 1.15 e successive di GKE.
  • L'API ManagedCertificate v1 è disponibile nelle versioni GKE 1.17.9-gke.6300 e successive.

Sebbene i cluster GKE attualmente supportino l'API ManagedCertificate v1beta1, questa versione dell'API è deprecata e verrà rimossa nelle versioni future di GKE. Ti consigliamo di utilizzare una versione più recente dell'API.

Eseguire la migrazione tra versioni dell'API

Gli oggetti ManagedCertificate vengono promossi automaticamente in una versione più recente dell'API quando vengono aggiornati in un cluster che supporta la versione più recente dell'API. Le risorse vengono aggiornate periodicamente, quindi non devi 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 Ingress aggiungendo l'annotazione networking.gke.io/managed-certificates alla risorsa Ingress. Questa annotazione è un elenco separato da virgole di oggetti ManagedCertificate.

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 jolly.

Se hai bisogno di certificati autogestiti o se hai già certificati SSL che vuoi configurare su Ingress, consulta la pagina 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 l'articolo Aggiornare manualmente un certificato gestito da Google.

Prerequisiti

  • Il nome del dominio deve essere di tua proprietà. Il nome del dominio non deve contenere più di 63 caratteri. Puoi utilizzare Google Domains o un altro registrar.
  • Per il cluster deve essere abilitato il componente aggiuntivo HttpLoadBalancing.
  • Il valore di "kubernetes.io/ingress.class" deve essere "gce".
  • Devi applicare risorse Ingress e ManagedCertificate nello stesso progetto e spazio dei nomi.
  • Crea un indirizzo IP esterno prenotato (statico). La prenotazione di un indirizzo IP statico garantisce che rimanga tuo, anche se elimini il traffico in entrata. Se non prenoti un indirizzo IP, questo potrebbe cambiare e richiedere di riconfigurare i record DNS del tuo dominio. Utilizza Google Cloud CLI o Google Cloud Console per creare un indirizzo IP riservato.

    gcloud

    Per creare un indirizzo IP riservato, esegui questo comando:

    gcloud compute addresses create ADDRESS_NAME --global
    

    Sostituisci ADDRESS_NAME con il nome dell'indirizzo IP prenotato 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 riservato:

    1. Vai alla pagina Indirizzi IP esterni in Google Cloud Console.

      Vai a Indirizzi IP esterni

    2. Specifica un nome per l'indirizzo IP (ad esempio example-ip-address).

    3. Specifica se vuoi un indirizzo IPv4 o IPv6.

    4. Seleziona l'opzione Globale per Tipo.

    5. Fai clic su Prenota. L'indirizzo IP è riportato nella colonna Indirizzo esterno.

    Config Connector

    Nota: questo passaggio richiede Config Connector. Segui le istruzioni di installazione per installare Config Connector nel cluster.

    apiVersion: compute.cnrm.cloud.google.com/v1beta1
    kind: ComputeAddress
    metadata:
      name: example-ip-address
    spec:
      location: global
    Per eseguire il deployment di questo manifest, scaricalo sulla tua macchina come compute-address.yaml ed esegui:

    kubectl apply -f compute-address.yaml
    

Configurazione di un certificato gestito da Google

  1. 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 manifest come managed-cert.yaml.

    apiVersion: networking.gke.io/v1
    kind: ManagedCertificate
    metadata:
      name: managed-cert
    spec:
      domains:
        - DOMAIN_NAME1
        - DOMAIN_NAME2
    

    Sostituisci quanto segue:

    • DOMAIN_NAME1 e DOMAIN_NAME2: nomi di dominio di tua proprietà. Ad esempio, example.com e www.example.com.
  2. Applica il manifest al tuo cluster:

    kubectl apply -f managed-cert.yaml
    
  3. Crea un servizio di tipo NodePort per esporre la tua applicazione su Internet.

    Il seguente manifest descrive un servizio di tipo NodePort. Salva il manifest come mc-service.yaml.

    apiVersion: v1
    kind: Service
    metadata:
      name: mc-service
    spec:
      selector:
        app: mc-service
      type: NodePort
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
    
  4. Applica il manifest al tuo cluster:

    kubectl apply -f mc-service.yaml
    
  5. Creare una risorsa Ingress.

    Il manifest seguente descrive una risorsa Ingress che utilizza ManagedCertificate che hai creato. Salva il manifest come managed-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 di ports.port nel manifest del servizio.
  6. Applica il manifest al tuo cluster:

    kubectl apply -f managed-cert-ingress.yaml
    
  7. 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 il termine della configurazione della risorsa Ingress.

  8. Configura i record DNS per i tuoi domini in modo che rimandino all'indirizzo IP del bilanciatore del carico. Se utilizzi Cloud DNS, consulta Gestione dei record per i dettagli.

  9. 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. Se Status.CertificateStatus non è Active, il provisioning del certificato non è ancora stato eseguito.

  10. Per verificare che SSL funzioni, visita i tuoi domini utilizzando il prefisso https://. Il browser indica che la connessione è sicura e puoi visualizzare i dettagli del certificato.

Eseguire la migrazione ai certificati gestiti da Google da 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 il provisioning corretto 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 eseguire la migrazione dai certificati SSL autogestiti a Google gestiti.

  1. Aggiungi un nuovo certificato gestito da Google a Ingress, come descritto nella sezione Configurare un certificato gestito da Google.
  2. Attendi finché lo stato della risorsa del certificato gestito da Google è Attivo. Controlla lo stato del certificato con il seguente comando:

    kubectl describe managedcertificate managed-cert
    
  3. Se lo stato è Active, aggiorna la risorsa Ingress per rimuovere i riferimenti al certificato autogestito.

Rimozione di 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.

  1. Elimina l'oggetto ManagedCertificate:

    kubectl delete -f managed-cert.yaml
    

    L'output è simile al seguente:

    managedcertificate.networking.gke.io "managed-cert" deleted
    
  2. Rimuovi l'annotazione dalla risorsa Ingress:

    kubectl annotate ingress managed-cert-ingress networking.gke.io/managed-certificates-
    

    Osserva il segno meno - alla fine del comando.

  3. Rilascia l'indirizzo IP statico che hai prenotato per il bilanciatore del carico.

    Puoi utilizzare Google Cloud CLI, Google Cloud Console o Config Connector per rilasciare un indirizzo IP riservato.

    gcloud

    Utilizza il comando seguente per rilasciare l'indirizzo IP prenotato:

    gcloud compute addresses delete ADDRESS_NAME --global
    

    Sostituisci ADDRESS_NAME con il nome dell'indirizzo IP.

    Console

    Per rilasciare l'indirizzo IP prenotato:

    1. Vai alla pagina Indirizzi IP esterni in Google Cloud Console.

      Vai a Indirizzi IP esterni

    2. Seleziona la casella di controllo accanto all'indirizzo IP che vuoi rilasciare.

    3. 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.

    apiVersion: compute.cnrm.cloud.google.com/v1beta1
    kind: ComputeAddress
    metadata:
      name: example-ip-address
    spec:
      location: global

    Per eseguire il deployment di questo manifest, scaricalo sulla tua macchina come compute-address.yaml ed esegui:

    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 Ingress e ManagedCertificate

Se superi il numero di certificati consentiti, viene aggiunto a ManagedCertificate un evento con un motivo TooManyCertificates. Puoi controllare gli eventi in un oggetto ManagedCertificate utilizzando il seguente comando:

kubectl describe managedcertificate CERTIFICATE_NAME

Sostituisci CERTIFICATE_NAME con il nome di ManagedCertificate.

Se colleghi un elemento ManagedCertificate v1 inesistente a una risorsa Ingress, viene aggiunto un evento con un motivo MissingCertificate alla risorsa Ingress. 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.

Il provisioning del certificato gestito non viene eseguito quando il dominio si risolve in indirizzi IP di più bilanciatori del carico

Quando il tuo dominio si risolve in 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 tuo dominio e potrebbe non essere stato eseguito il provisioning di alcuni certificati. Affinché la verifica abbia esito positivo, il certificato deve essere visibile in tutti gli indirizzi IP a cui si risolve il dominio.

In particolare, quando il tuo dominio si risolve in un indirizzo IPv4 e un indirizzo IPv6 che sono configurati con diversi oggetti Ingress, devi creare un singolo oggetto ManagedCertificate e collegarlo a entrambi gli oggetti Ingress.

Comunicazione interrotta tra i certificati gestiti da Google e la risorsa Ingress

I certificati gestiti comunicano con Ingress utilizzando l'annotazione ingress.gcp.kubernetes.io/pre-shared-cert. Puoi interrompere questa comunicazione se:

  • Esegui un processo automatizzato che cancelli l'annotazione ingress.gcp.kubernetes.io/pre-shared-cert.
  • Archivia uno snapshot di Ingress, quindi elimina e ripristina la risorsa Ingress dalla istantanea. Nel frattempo, una risorsa SslCertificate elencata nell'annotazione ingress.gcp.kubernetes.io/pre-shared-cert potrebbe essere stata eliminata. La risorsa Ingress non funziona se mancano certificati associati.

Se la comunicazione tra certificati gestiti da Google e Ingress viene interrotta, elimina il contenuto dell'annotazione ingress.gcp.kubernetes.io/pre-shared-cert e attendi che il sistema venga riconciliato. Per impedire la ricorrenza, 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 motivi sono spiegati di seguito:

spec.domains in body should have at most 100 items

Il 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 carattere jolly nel campo spec.domains. L'oggetto ManagedCertificate non supporta i domini 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 del vecchio dominio continui a funzionare fino al provisioning del certificato per il nuovo dominio, segui questi passaggi:

  1. Crea un ManagedCertificate per il nuovo dominio.
  2. Aggiungi il nome di ManagedCertificate all'annotazione networking.gke.io/managed-certificates sulla risorsa Ingress utilizzando un elenco separato da virgole. Non rimuovere il vecchio nome del certificato.
  3. Attendi che ManagedCertificate diventi attivo.
  4. 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 il ManagedCertificate, Google Cloud elimina e ricrea il certificato SSL gestito da Google.

Passaggi successivi