Cette page explique comment utiliser les objets Ingress pour créer des équilibreurs de charge externes avec des certificats SSL gérés par Google. 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 contenu Google Cloud, consultez la section Rôles utilisateur et tâches courantes de l'utilisateur dans GKE Enterprise.
Pour savoir comment créer des certificats gérés par Google avec Google Cloud, consultez la page sur les certificats gérés par Google.
Les certificats SSL gérés par Google pour GKE sont compatibles avec les clusters publics et privés.
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'annotationnetworking.gke.io/managed-certificates
à l'Ingress. Cette annotation est une liste d'objetsManagedCertificate
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 objet Ingress, consultez la section 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 Google Domains ou un autre service d'enregistrement.
- Si vous utilisez un cluster GKE Standard, le module complémentaire
HttpLoadBalancing
doit être activé. - La valeur de
ingressClassName
doit être"gce"
. - Vous devez appliquer les ressources
Ingress
etManagedCertificate
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 :
Accédez à la page Adresses IP externes de la console Google Cloud.
Indiquez un nom pour l'adresse IP (par exemple,
example-ip-address
).Indiquez si vous souhaitez obtenir une adresse IPv4 ou IPv6.
Sélectionnez l'option Global pour le champ Type.
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.
Pour déployer ce manifeste, téléchargez le fichier sur votre ordinateur sous le nomcompute-address.yaml
, puis exécutez la commande suivante :kubectl apply -f compute-address.yaml
Configurer un certificat géré par Google
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 nommanaged-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
etwww.example.com
.
Appliquez le fichier manifeste à votre cluster :
kubectl apply -f managed-cert.yaml
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 nommc-service.yaml
.apiVersion: v1 kind: Service metadata: name: mc-service spec: selector: app: mc-service type: NodePort ports: - protocol: TCP port: 80 targetPort: 8080
Appliquez le fichier manifeste à votre cluster :
kubectl apply -f mc-service.yaml
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 nommanaged-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
Remplacez les éléments suivants :
ADDRESS_NAME
est le nom de votre adresse IP réservée.SERVICE_PORT
est la valeur deports.port
dans votre fichier manifeste de service.
Appliquez le fichier manifeste à votre cluster :
kubectl apply -f managed-cert-ingress.yaml
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.
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.
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é. SiStatus.CertificateStatus
n'est pas défini surActive
, le certificat n'est pas encore provisionné.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.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 :
- Ajoutez un nouveau certificat géré par Google à l'Ingress, comme décrit dans la section Configurer un certificat géré par Google.
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
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.
Supprimez l'objet
ManagedCertificate
:kubectl delete -f managed-cert.yaml
Le résultat ressemble à ce qui suit :
managedcertificate.networking.gke.io "managed-cert" deleted
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.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 :
Accédez à la page Adresses IP externes de la console Google Cloud.
Cochez la case en regard de l'adresse IP que vous souhaitez libérer.
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.
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
Dépannage
Cette section explique comment résoudre les problèmes liés aux certificats gérés par Google.
Vérifier les événements sur les ressources ManagedCertificate
et Ingress
Si vous dépassez le nombre de certificats autorisés, un événement avec le motif TooManyCertificates
est ajouté à ManagedCertificate
. Vous pouvez vérifier les événements d'un objet ManagedCertificate
à l'aide de la commande suivante :
kubectl describe managedcertificate CERTIFICATE_NAME
Remplacez CERTIFICATE_NAME
par le nom de votre ManagedCertificate
.
Si vous associez un ManagedCertificate
non existant à un objet Ingress, un événement avec le motif MissingCertificate
est ajouté à l'objet Ingress. 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.
Certificat géré non provisionné lorsque le domaine est associé aux adresses IP de plusieurs équilibreurs de charge
Lorsque votre domaine est associé aux adresses IP de plusieurs équilibreurs de charge (plusieurs objets Ingress), vous devez créer un seul objet ManagedCertificate
et l'associer à tous les objets Ingress. Si vous créez plusieurs objets ManagedCertificate
et que vous associez chacun d'entre eux à un objet Ingress distinct, l'autorité de certification risque de ne pas pouvoir valider la propriété de votre domaine et certains de vos certificats risquent de ne pas être provisionnés. Pour que la validation aboutisse, le certificat doit être visible sous toutes les adresses IP auxquelles votre domaine est associé.
En particulier, lorsque votre domaine est associé à une adresse IPv4 et une adresse IPv6 configurées avec différents objets Ingress, vous devez créer un seul objet ManagedCertificate
et l'associer aux deux objets Ingress.
Perturbations de la communication entre les certificats gérés par Google et l'objet Ingress
Les certificats gérés communiquent avec l'objet Ingress à l'aide de l'annotation ingress.gcp.kubernetes.io/pre-shared-cert
. Vous pouvez perturber cette communication, par exemple si vous :
- exécutez un processus automatisé supprimant l'annotation
ingress.gcp.kubernetes.io/pre-shared-cert
; - stockez un instantané de l'objet Ingress, puis supprimez et restaurez l'Ingress à partir de l'instantané. Dans l'intervalle, la ressource
SslCertificate
répertoriée dans l'annotationingress.gcp.kubernetes.io/pre-shared-cert
a peut-être été supprimée. L'objet Ingress ne fonctionne pas si des certificats associés sont manquants.
Si la communication entre des certificats gérés par Google et l'objet Ingress est interrompue, supprimez le contenu de l'annotation ingress.gcp.kubernetes.io/pre-shared-cert
et attendez que le système effectue le rapprochement. Pour éviter que le problème ne se reproduise, assurez-vous que l'annotation n'est pas modifiée ni supprimée par inadvertance.
Erreurs de validation lors de la création d'un certificat géré par Google
Les définitions ManagedCertificate
sont validées avant la création de l'objet ManagedCertificate
. Si la validation échoue, l'objet ManagedCertificate
n'est pas créé et un message d'erreur s'affiche. Vous trouverez ci-dessous les différents messages d'erreur ainsi que les raisons pour lesquelles ils apparaissent :
spec.domains in body should have at most 100 items
Votre fichier manifeste ManagedCertificate
regroupe plus de 100 domaines dans le champ spec.domains
. Les certificats gérés par Google n'acceptent que 100 domaines au maximum.
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]\.?$'
Vous avez spécifié un nom de domaine non valide ou un nom de domaine avec des caractères génériques dans le champ spec.domains
. L'objet ManagedCertificate
n'est pas compatible avec les domaines comportant des caractères génériques (par exemple, *.example.com
).
spec.domains in body should be at most 63 chars long
Vous avez spécifié un nom de domaine trop long. Les certificats gérés par Google n'acceptent pas les noms de domaine dépassant 63 caractères.
Mettre à jour manuellement un certificat géré par Google
Pour mettre à jour manuellement le certificat afin que le certificat de l'ancien domaine continue de fonctionner jusqu'à ce que le certificat du nouveau domaine soit provisionné, procédez comme suit :
- Créez un certificat
ManagedCertificate
pour le nouveau domaine. - Ajoutez le nom de l'élément
ManagedCertificate
à l'annotationnetworking.gke.io/managed-certificates
dans l'objet Ingress à l'aide d'une liste d'éléments séparés par une virgule. Ne supprimez pas l'ancien nom du certificat. - Attendez que le certificat
ManagedCertificate
devienne actif. - Dissociez l'ancien certificat de l'objet Ingress et supprimez-le.
Lorsque vous créez un certificat ManagedCertificate
, Google Cloud crée un certificat SSL géré par Google. Vous ne pouvez pas mettre à jour ce certificat. Si vous mettez à jour ManagedCertificate
, Google Cloud supprime et recrée le certificat SSL géré par Google.
Pour fournir un objet Ingress chiffré HTTPS sécurisé pour vos clusters GKE, consultez l'exemple Entrée sécurisée.
Étapes suivantes
- Apprenez-en davantage sur les certificats gérés par Google
- Découvrez comment configurer un équilibreur de charge d'application externe avec Ingress.
- Découvrez comment utiliser plusieurs certificats SSL en utilisant des équilibreurs de charge d'application externes avec Ingress.
- Implémentez un Ingress sécurisé.