Utilizzo di certificati SSL gestiti da Google


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) forniti da Google, rinnova e gestisce i tuoi nomi di dominio. Questi certificati non dimostrano la tua identità individuale o organizzativa.

Questa pagina è rivolta agli specialisti di networking e alla sicurezza che intendono pianificare e implementare la sicurezza della rete e sviluppare e gestire le policy di sicurezza. A scopri di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento per i contenuti di Google Cloud, consulta Ruoli e attività utente comuni di GKE Enterprise.

Per scoprire come creare certificati gestiti da Google con Google Cloud, consulta Certificati gestiti da Google.

I certificati SSL gestiti da Google di GKE supportano i cluster pubblici e privati.

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'annotazione networking.gke.io/managed-certificates all'Ingress. Questo L'annotazione è un elenco di oggetti ManagedCertificate 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 supportare 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 con l'autorità di certificazione, Google non esegue la rotazione automatica del certificato. Devi eliminare il valore ManagedCertificate e crearne uno nuovo.

Prerequisiti

  • Il nome del dominio deve essere di tua proprietà. Il nome di dominio non deve essere più lungo di 63 caratteri. Puoi utilizzare Google Domains o un altro registrar.
  • Se utilizzi un cluster GKE Standard, il plug-inHttpLoadBalancing deve essere attivato.
  • Il tuo ingressClassName deve essere "gce".
  • Devi applicare le risorse Ingress e ManagedCertificate 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, che richiedono la riconfigurazione dei record DNS del 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'account riservato Indirizzo IP 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:

    1. Vai alla pagina Indirizzi IP esterni nella console Google Cloud.

      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 è indicato nella colonna Indirizzo esterno.

    Config Connector

    Nota: questo passaggio richiede Connettore di configurazione. Segui le istruzioni per l'installazione per installare Config Connector sul tuo 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 esegui:

    kubectl apply -f compute-address.yaml
    

Configurazione di un certificato gestito da Google

  1. Crea un oggetto ManagedCertificate. Questa risorsa specifica domini per il certificato SSL. I domini con caratteri jolly non sono supportati.

    Il seguente manifest descrive un oggetto ManagedCertificate. Salva manifest come managed-cert.yaml.

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

    Sostituisci quanto segue:

    • FQDN_1 e FQDN_2: Nomi di dominio completi di tua proprietà. Ad esempio, example.com e www.example.com.
  2. Applica il manifest al cluster:

    kubectl apply -f managed-cert.yaml
    
  3. Crea un servizio di tipo NodePort per esporre l'applicazione a internet.

    Il seguente manifest descrive un servizio di tipo NodePort. Salva 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 cluster:

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

    Il seguente manifest descrive un Ingress che utilizza il 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"  # 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 di ports.port nel manifest del servizio.
  6. Applica il manifest al cluster:

    kubectl apply -f managed-cert-ingress.yaml
    
  7. 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.

  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 Gestire i record per maggiori dettagli.

  9. Attendi che il certificato gestito da Google completi il provisioning. L'operazione potrebbe richiedere fino a 60 minuti. Puoi verificare 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. Se Status.CertificateStatus non è Active, il provisioning del certificato non è ancora stato eseguito.

  10. Puoi controllare gli eventi su una risorsa Ingress utilizzando il seguente comando:

    kubectl describe ingress INGRESS_NAME
    

    Sostituisci INGRESS_NAME con il nome del tuo Ingress.

  11. Verifica il funzionamento del protocollo SSL visitando i tuoi domini utilizzando https:// . Il browser indica che la connessione è sicura e puoi visualizzare i dettagli del certificato.

Migrazione a 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 dell'attivazione dei certificati SSL gestiti da Google. Dopo che è stato gestito da Google Provisioning dei certificati SSL riuscito: diventano automaticamente attivi. Quando i certificati SSL gestiti da Google sono attivi, puoi eliminare i certificati SSL con gestione indipendente.

Utilizza queste istruzioni per eseguire la migrazione da SSL autogestito a quello gestito da Google certificati.

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

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

Rimozione di un certificato gestito da Google

Per rimuovere un certificato gestito da Google dal cluster, devi eliminare il certificato ManagedCertificate e rimuovi l'annotazione Ingress che fa riferimento li annotino.

  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, 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'IP .

    Console

    Per rilasciare l'indirizzo IP riservato, svolgi i seguenti passaggi:

    1. Vai alla pagina Indirizzi IP esterni nella console Google Cloud.

      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
    

Risoluzione dei problemi

Questa sezione fornisce informazioni su come risolvere i problemi relativi all'account Google certificati.

Controllare gli eventi nelle risorse ManagedCertificate e Ingress

Se superi il numero di certificati consentiti, un evento con un TooManyCertificates motivo aggiunto a ManagedCertificate. 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 del tuo Ingress.

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

Quando il dominio si risolve in indirizzi IP di più bilanciatori del carico (più oggetti Ingress), devi creare un singolo oggetto ManagedCertificate e a tutti gli oggetti Ingress. Se invece crei molti ManagedCertificate oggetti e collega ciascuno di essi a un oggetto Ingress separato, 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. Per la verifica avere successo, il certificato deve essere visibile su tutti gli indirizzi IP in cui viene risolto il 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 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.
  • Archivia uno snapshot di Ingress, quindi eliminalo e ripristinalo dal senza dover creare uno snapshot. Nel frattempo, una risorsa SslCertificate elencata nella L'annotazione ingress.gcp.kubernetes.io/pre-shared-cert potrebbe essere stata eliminata. Il traffico in entrata non funziona se mancano tutti i certificati allegati.

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 per consentire la riconciliazione del sistema. 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 data ManagedCertificate viene creato. Se la convalida ha esito negativo, l'oggetto ManagedCertificate viene 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 campo. 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 caratteri jolly nella 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. Supporto dei certificati gestiti da Google nomi di dominio composti da 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:

  1. Crea un ManagedCertificate per il nuovo dominio.
  2. Aggiungi il nome dell'evento ManagedCertificate al networking.gke.io/managed-certificates sulla risorsa Ingress utilizzando un elenco separato da virgole. Non rimuovere il nome del vecchio certificato.
  3. Attendi fino a quando ManagedCertificate non diventa 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 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