Utiliser des certificats SSL gérés par Google

Cette page explique comment utiliser des certificats SSL gérés par Google pour sécuriser Ingress sur GKE. Vous apprendrez à utiliser le service de gestion automatisée des certificats de Google pour simplifier le chiffrement HTTPS de vos applications.

Ces certificats sont des certificats de validation de domaine (DV) que Google provisionne, renouvelle et gère pour vos noms de domaine. Ces certificats ne représentent pas votre identité personnelle ou celle de votre organisation.

Cette page s'adresse aux spécialistes de la mise en réseau et de la sécurité qui planifient et mettent en œuvre la sécurité du réseau, et qui développent et gèrent des règles de sécurité. Pour en savoir plus sur les rôles courants et les exemples de tâches que nous citons dans le contenuGoogle Cloud , consultez Rôles utilisateur et tâches courantes de GKE.

Avant de lire cette page, assurez-vous de maîtriser GKE et de bien comprendre la mise en réseau et la sécurité réseau.

Pour savoir comment créer des certificats gérés par Google avec Google Cloud, consultez Certificats gérés par Google.

Créer un objet Ingress avec un certificat géré par Google

Pour configurer un certificat SSL géré par Google et l'associer à un objet Ingress, procédez comme suit :

  • Créez un objet ManagedCertificate dans le même espace de noms que l'objet Ingress.
  • Associez l'objet ManagedCertificate à un Ingress en ajoutant l'annotation networking.gke.io/managed-certificates à l'Ingress. Cette annotation est une liste d'objets ManagedCertificate séparés par une virgule.

Limites

Les certificats gérés par Google sont moins flexibles que ceux que vous obtenez et gérez vous-même. Les certificats gérés par Google acceptent jusqu'à 100 domaines ne comportant pas de caractères génériques. Contrairement aux certificats autogérés, les certificats gérés par Google ne sont pas compatibles avec les domaines comprenant des caractères génériques.

Si vous avez besoin de certificats autogérés ou si vous possédez déjà des certificats SSL que vous souhaitez configurer sur votre Ingress, consultez Configurer HTTPS (TLS) entre le client et l'équilibreur de charge.

Le nombre et le type des certificats compatibles avec un objet Ingress sont définis par les limites des certificats SSL gérés par Google.

Les mises à jour des certificats gérés par Google ne sont pas acceptées. Pour en savoir plus, consultez la page Mettre à jour manuellement un certificat géré par Google.

Si le certificat est révoqué directement auprès de l'autorité de certification, Google n'effectue pas sa rotation automatique. Vous devez supprimer le certificat géré et en créer un autre.

Prérequis

  • Vous devez détenir le nom de domaine. Celui-ci ne doit pas dépasser 63 caractères. Vous pouvez utiliser n'importe quel service d'enregistrement de noms de domaine pour obtenir un nom de domaine.

  • Si vous utilisez un cluster GKE Standard, le module complémentaire HttpLoadBalancing doit être activé.

  • Votre fichier manifeste Ingress doit inclure l'annotation kubernetes.io/ingress.class: "gce". Le champ ingressClassName n'est pas disponible.

  • Vous devez appliquer les ressources Ingress et ManagedCertificate dans le même projet et le même espace de noms.

  • Créez une adresse IP externe réservée (statique). La réservation d'une adresse IP statique garantit que celle-ci restera en votre possession même si vous supprimez l'objet Ingress. En l'absence de réservation, l'adresse IP pourrait changer, vous obligeant alors à reconfigurer les enregistrements DNS de votre domaine. Utilisez Google Cloud CLI ou la console Google Cloud pour créer une adresse IP réservée.

    gcloud

    Pour créer une adresse IP réservée, exécutez la commande suivante :

    gcloud compute addresses create ADDRESS_NAME --global
    

    Remplacez ADDRESS_NAME par le nom de l'adresse IP réservée que vous créez.

    Pour trouver l'adresse IP statique que vous avez créée, exécutez la commande suivante :

    gcloud compute addresses describe ADDRESS_NAME --global
    

    Le résultat ressemble à ce qui suit :

    address: 203.0.113.32
    ...
    

    Console

    Pour créer une adresse IP réservée, procédez comme suit :

    1. Accédez à la page Adresses IP externes de la console Google Cloud .

      Accéder à la page Adresses IP externes

    2. Indiquez un nom pour l'adresse IP (par exemple, example-ip-address).

    3. Indiquez si vous souhaitez obtenir une adresse IPv4 ou IPv6.

    4. Sélectionnez l'option Global pour le champ Type.

    5. Cliquez sur Réserver. L'adresse IP s'affiche dans la colonne Adresse externe.

    Config Connector

    Remarque : Cette étape nécessite Config Connector. Suivez les instructions d'installation pour l'installer sur votre cluster.

    apiVersion: compute.cnrm.cloud.google.com/v1beta1
    kind: ComputeAddress
    metadata:
      name: example-ip-address
    spec:
      location: global
    Pour déployer ce manifeste, téléchargez le fichier sur votre ordinateur sous le nom compute-address.yaml, puis exécutez la commande suivante :

    kubectl apply -f compute-address.yaml
    

Configurer un certificat géré par Google

  1. Créer un objet ManagedCertificate. Cette ressource spécifie les domaines du certificat SSL. Les domaines avec des caractères génériques ne sont pas acceptés.

    Le fichier manifeste suivant décrit un objet ManagedCertificate. Enregistrez le fichier manifeste sous le nom managed-cert.yaml.

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

    Remplacez les éléments suivants :

    • FQDN_1, FQDN_2 : noms de domaine complets que vous possédez. Par exemple, example.com et www.example.com.
  2. Appliquez le fichier manifeste à votre cluster :

    kubectl apply -f managed-cert.yaml
    
  3. Créez un service de type NodePort pour exposer votre application à Internet.

    Le fichier manifeste suivant décrit un service de type NodePort. Enregistrez le fichier manifeste sous le nom 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. Appliquez le fichier manifeste à votre cluster :

    kubectl apply -f mc-service.yaml
    
  5. Créez une ressource Ingress.

    Le fichier manifeste suivant décrit un objet Ingress qui utilise la ressource ManagedCertificate que vous avez créée. Enregistrez le manifeste sous le nom 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
    

    Remplacez les éléments suivants :

    • ADDRESS_NAME est le nom de votre adresse IP réservée.
    • SERVICE_PORT est la valeur de ports.port dans votre fichier manifeste de service.
  6. Appliquez le fichier manifeste à votre cluster :

    kubectl apply -f managed-cert-ingress.yaml
    
  7. Obtenez l'adresse IP de l'équilibreur de charge :

    kubectl get ingress
    

    Le résultat ressemble à ce qui suit :

    NAME                 HOSTS       ADDRESS         PORTS     AGE
    managed-cert-ingress   *         203.0.113.32     80       54s
    

    L'adresse IP de l'équilibreur de charge est affichée dans la colonne ADDRESS. Si vous utilisez une adresse IP statique réservée, elle servira d'adresse à l'équilibreur de charge.

    Si l'adresse ne figure pas dans la liste, attendez la fin de la configuration de l'Ingress.

  8. Configurez les enregistrements DNS de vos domaines pour qu'ils pointent vers l'adresse IP de l'équilibreur de charge. Si vous utilisez Cloud DNS, consultez la section Gérer les enregistrements pour plus d'informations.

  9. Attendez que le certificat géré par Google soit provisionné. Cette opération peut prendre jusqu'à 60 minutes. Vous pouvez vérifier l'état du certificat à l'aide de la commande suivante :

    kubectl describe managedcertificate managed-cert
    

    Le résultat ressemble à ce qui suit :

    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
    (...)
    

    La valeur du champ Status.CertificateStatus indique que le certificat a été provisionné. Si Status.CertificateStatus n'est pas défini sur Active, le certificat n'est pas encore provisionné.

  10. Vous pouvez vérifier les événements d'une ressource Ingress à l'aide de la commande suivante :

    kubectl describe ingress INGRESS_NAME
    

    Remplacez INGRESS_NAME par le nom de votre ressource Ingress.

  11. Vérifiez que le protocole SSL fonctionne en accédant à vos domaines à l'aide du préfixe https://. Votre navigateur indique que la connexion est sécurisée et que vous pouvez afficher les détails du certificat.

Passer de certificats autogérés à des certificats gérés par Google

Lorsque vous migrez un Ingress pour qu'il utilise des certificats SSL gérés par Google au lieu de certificats SSL autogérés, ne supprimez pas vos certificats SSL autogérés avant que ceux gérés par Google soient actifs. Ces derniers deviennent automatiquement actifs une fois provisionnés. Lorsque les certificats SSL gérés par Google sont actifs, vous pouvez supprimer vos certificats SSL autogérés.

Suivez la procédure suivante pour passer de certificats SSL autogérés à des certificats SSL gérés par Google :

  1. Ajoutez un nouveau certificat géré par Google à l'Ingress, comme décrit dans la section Configurer un certificat géré par Google.
  2. Attendez que l'état du certificat géré par Google devienne "Actif". Vérifiez l'état du certificat à l'aide de la commande suivante :

    kubectl describe managedcertificate managed-cert
    
  3. Une fois que l'état est défini sur Active, mettez à jour l'objet Ingress pour supprimer les références au certificat autogéré.

Supprimer un certificat géré par Google

Pour supprimer un certificat géré par Google de votre cluster, vous devez supprimer l'objet ManagedCertificate ainsi que l'annotation de l'objet Ingress qui y fait référence.

  1. Supprimez l'objet ManagedCertificate :

    kubectl delete -f managed-cert.yaml
    

    Le résultat ressemble à ce qui suit :

    managedcertificate.networking.gke.io "managed-cert" deleted
    
  2. Supprimez l'annotation de l'Ingress :

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

    Vous remarquerez le signe moins, -, à la fin de la commande.

  3. Libérez l'adresse IP statique que vous avez réservée pour votre équilibreur de charge.

    Vous pouvez utiliser Google Cloud CLI, la console Google Cloud ou Config Connector pour libérer une adresse IP réservée.

    gcloud

    Utilisez la commande suivante pour libérer l'adresse IP réservée :

    gcloud compute addresses delete ADDRESS_NAME --global
    

    Remplacez ADDRESS_NAME par le nom de l'adresse IP.

    Console

    Pour libérer l'adresse IP réservée, procédez comme suit :

    1. Accédez à la page Adresses IP externes de la console Google Cloud .

      Accéder à la page Adresses IP externes

    2. Cochez la case en regard de l'adresse IP que vous souhaitez libérer.

    3. Cliquez sur Libérer l'adresse IP.

    Config Connector

    Remarque : Cette étape nécessite Config Connector. Suivez les instructions d'installation pour l'installer sur votre cluster.

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

    Pour déployer ce manifeste, téléchargez le fichier sur votre ordinateur sous le nom compute-address.yaml, puis exécutez la commande suivante :

    kubectl delete -f compute-address.yaml
    

Étapes suivantes