Utilizzo di certificati SSL gestiti da Google

Questa pagina mostra come utilizzare i certificati SSL gestiti da Google per Ingress sicuro su GKE. Scopri come utilizzare il servizio di gestione automatica dei certificati di Google per semplificare la crittografia HTTPS per le tue applicazioni.

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à personale o organizzativa.

Questa pagina è destinata a specialisti di networking e sicurezza che pianificano e implementano la sicurezza di rete e che sviluppano e gestiscono le policy di sicurezza. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti diGoogle Cloud , consulta Ruoli e attività comuni degli utenti GKE.

Prima di leggere questa pagina, assicurati di avere una conoscenza pratica di GKE e una buona comprensione del networking e della sicurezza di rete.

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

Creazione di una risorsa 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 di Ingress.
  • Associa l'oggetto ManagedCertificate a un Ingress aggiungendo l'annotazione networking.gke.io/managed-certificates all'Ingress. Questa annotazione è un elenco separato da virgole di oggetti ManagedCertificate.

Limitazioni

I certificati gestiti da Google sono meno flessibili di quelli che ottieni e gestisci autonomamente. I certificati gestiti da Google supportano fino a 100 domini non con 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 sul tuo Ingress, consulta Configurazione di HTTPS (TLS) tra il client e il 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 saperne di più, consulta Aggiornamento manuale di un certificato gestito da Google.

Se il certificato viene revocato direttamente dall'autorità di certificazione, Google non lo ruota automaticamente. Devi eliminare ManagedCertificate e crearne uno nuovo.

Prerequisiti

  • Devi essere il proprietario del nome di dominio. Il nome di dominio non deve contenere più di 63 caratteri. Puoi utilizzare qualsiasi registrar di nomi di dominio per ottenere un nome di dominio.

  • Se utilizzi un cluster GKE Standard, deve essere abilitato il componente aggiuntivo HttpLoadBalancing.

  • Il manifest Ingress deve includere l'annotazione kubernetes.io/ingress.class: "gce". Il campo ingressClassName non è supportato.

  • Devi applicare le risorse Ingress e ManagedCertificate nello stesso progetto e nello stesso spazio dei nomi.

  • Crea un indirizzo IP esterno statico riservato. La prenotazione di un indirizzo IP statico garantisce che rimanga tuo, anche se elimini l'ingresso. Se non riservi un indirizzo IP, questo potrebbe cambiare, il che ti costringerà a riconfigurare i 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 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 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 è elencato nella colonna Indirizzo esterno.

    Config Connector

    Nota: questo passaggio richiede Config Connector. Segui le istruzioni di installazione per installare Config Connector sul 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 sul tuo computer 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 seguente manifest descrive un oggetto ManagedCertificate. Salva il 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, 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 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 cluster:

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

    Il seguente manifest descrive un 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 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 che sarà l'indirizzo del bilanciatore del carico.

    Se l'indirizzo non è elencato, attendi il completamento della configurazione di Ingress.

  8. Configura i record DNS per i tuoi domini in modo che puntino all'indirizzo IP del bilanciatore del carico. Se utilizzi Cloud DNS, consulta Gestione dei record per maggiori 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:
       FQDN_1
       FQDN_2
    Status:
     CertificateStatus: Active
    (...)
    

    Il valore del campo Status.CertificateStatus indica che il certificato è stato eseguito il provisioning. Se Status.CertificateStatus non è Active, il certificato non è ancora stato sottoposto a provisioning.

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

  11. Verifica che 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 a certificati SSL gestiti da Google, non eliminare i certificati SSL autogestiti prima che i certificati SSL 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 tuoi certificati SSL autogestiti.

Segui queste istruzioni per eseguire la migrazione dai certificati SSL autogestiti a quelli gestiti da Google.

  1. Aggiungi un nuovo certificato gestito da Google all'ingresso, come descritto nella sezione Configurazione di un certificato gestito da Google.
  2. Attendi che lo stato della risorsa certificato gestito da Google sia Active. Controlla lo stato del certificato con il seguente comando:

    kubectl describe managedcertificate managed-cert
    
  3. Quando lo stato è Active, aggiorna l'ingresso 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 l'oggetto ManagedCertificate e rimuovere l'annotazione Ingress che lo 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 da Ingress:

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

    Nota 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 prenotato:

    gcloud compute addresses delete ADDRESS_NAME --global
    

    Sostituisci ADDRESS_NAME con il nome dell'indirizzo IP.

    Console

    Per rilasciare l'indirizzo IP prenotato, segui questi 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 sul 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 sul tuo computer come compute-address.yaml ed esegui:

    kubectl delete -f compute-address.yaml
    

Passaggi successivi