Effectuer une rotation des identifiants de cluster


Cette page explique comment effectuer une rotation des identifiants dans les clusters Google Kubernetes Engine (GKE).

À propos des rotations d'identifiants dans GKE

L'autorité de certification (CA) racine du cluster a une durée de vie limitée. Lorsque l'autorité de certification expire, tous les identifiants signés par l'autorité de certification ne sont plus valides, y compris le certificat client du cluster (du champ d'API MasterAuth), la clé et le certificat du serveur d'API, ainsi que les certificats client kubelet. Pour en savoir plus, consultez Durée de vie de l'autorité de certification racine du cluster.

Vous pouvez effectuer une rotation des identifiants pour révoquer et émettre de nouveaux identifiants pour votre cluster. Cette opération entraîne la rotation de la clé privée de l'autorité de certification du cluster et nécessite de recréer des nœuds pour utiliser de nouveaux identifiants. Vous devez démarrer et terminer une rotation des identifiants pour votre cluster avant l'expiration de vos identifiants actuels. Notez en outre que la rotation des identifiants entraîne également une rotation des adresses IP.

Quand effectuer une rotation des identifiants

Vous devez effectuer des rotations des identifiants régulièrement et avant la date d'expiration de vos identifiants actuels. Les rotations d'identifiants nécessitent la recréation de nœuds pour utiliser les nouveaux identifiants, ce qui peut perturber les charges de travail en cours d'exécution. Planifiez les périodes de maintenance et effectuez les rotations pendant les intervalles de maintenance afin d'éviter les temps d'arrêt inattendus des charges de travail ou les clients API qui ne répondent pas en dehors du cluster.

Rechercher les clusters dont les identifiants arrivent à expiration ou ont expiré

Si les identifiants de votre cluster expirent dans les 180 prochains jours ou ont déjà expiré, GKE fournit des conseils sous forme d'insight et de recommandation pour expliquer qu'il est nécessaire d'effectuer une rotation des identifiants pour ce cluster. Ces conseils incluent la date d'expiration des identifiants. Vous pouvez les consulter dans la console Google Cloud. Vous pouvez également afficher ces conseils en utilisant la gcloud CLI ou l'API Recommender en spécifiant le sous-type CLUSTER_CA_EXPIRATION.

Si vous recevez un insight et une recommandation pour un cluster, vous devez effectuer une rotation des identifiants. Sinon, GKE lance automatiquement une rotation des identifiants dans les 30 jours suivant la date d'expiration de l'autorité de certification actuelle, comme expliqué dans la section suivante. Une fois la rotation des identifiants terminée, il peut s'écouler jusqu'à 36 heures avant que l'insight et la recommandation soient résolus.

Règle d'automatisation GKE pour éviter les interruptions de clusters

Pour éviter que votre cluster n'entre dans un état irrécupérable en cas d'expiration de vos identifiants actuels, GKE lance automatiquement une rotation des identifiants dans les 30 jours suivant la date d'expiration de votre autorité de certification actuelle. Par exemple, si l'autorité de certification de votre cluster expire le 6 janvier 2024 et que vous ne procédez pas à la rotation de vos identifiants avant le 5 décembre 2023, GKE va lancer une rotation automatique le 7 décembre 2023 ou après cette date, et va finaliser cette rotation sept jours après le début de l'opération. Cette rotation automatique est une tentative de dernier recours pour éviter une interruption du cluster. Elle prend en compte les points suivants :

  • Les rotations automatiques ignorent les intervalles ou les exclusions de maintenance configurés.
  • Une fois la rotation des identifiants terminée, les identifiants arrivant à expiration sont révoqués. Les clients d'API Kubernetes en dehors du cluster, tels que kubectl dans les environnements locaux, ne fonctionneront pas tant que vous n'aurez pas configuré les clients pour qu'ils utilisent les nouveaux identifiants.
  • Les recréations de pools de nœuds pendant la rotation peuvent perturber les charges de travail en cours d'exécution.

Les rotations automatiques initiées par GKE sont une mesure de prévention des pannes de dernier recours. Ne vous fiez pas uniquement à ces rotations automatiques : il s'agit d'une mesure d'urgence préventive afin d'éviter les pannes complètes.

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  • Activez l'API Google Kubernetes Engine.
  • Activer l'API Google Kubernetes Engine
  • Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande gcloud components update.

Vérifier la durée de vie des identifiants

Nous vous recommandons de vérifier la durée de vie de vos identifiants avant et après l'exécution d'une rotation des identifiants. Cela vous permet de vous assurer de la validité de l'autorité de certification racine de votre cluster.

Exécutez la commande suivante pour vérifier la durée de vie des identifiants pour un seul cluster :

gcloud container clusters describe CLUSTER_NAME \
    --region REGION_NAME \
    --format "value(masterAuth.clusterCaCertificate)" \
    | base64 --decode \
    | openssl x509 -noout -dates

Le résultat ressemble à ce qui suit :

notBefore=Mar 17 16:45:34 2023 GMT
notAfter=Mar  9 17:45:34 2053 GMT

Si vous exécutez cette commande après avoir lancé une rotation des identifiants, la sortie correspond à la durée de validité de votre certificat d'origine. Ce certificat reste valide jusqu'à ce que vous terminiez la rotation. Une fois la rotation terminée, la durée de validité de votre nouveau certificat est affichée.

Exécutez la commande suivante pour vérifier la durée de vie des identifiants pour tous les clusters d'un projet :

gcloud container clusters list --project PROJECT_ID \
    | awk 'NR>1 {print "echo; echo Validity for cluster " $1 " in location " $2 ":;\
         gcloud container clusters describe --project PROJECT_ID " $1 " --location " $2 " \
         --format \"value(masterAuth.clusterCaCertificate)\" \
         | base64 --decode | openssl x509 -noout -dates"}' \
    | bash

Effectuer une rotation des identifiants

La rotation des identifiants comprend les étapes suivantes :

  1. Lancement de la rotation : le plan de contrôle commence à diffuser le trafic sur une nouvelle adresse IP en plus de l'adresse IP d'origine. De nouveaux identifiants sont émis pour les charges de travail et le plan de contrôle.
  2. Recréation des nœuds : GKE recrée les nœuds de cluster afin qu'ils utilisent la nouvelle adresse IP et les nouveaux identifiants, en respectant la disponibilité définie par les intervalles de maintenance et les exclusions. Vous pouvez également recréer manuellement vos nœuds en effectuant une mise à niveau de la version des nœuds vers la même version GKE que celle que les nœuds exécutent déjà.
  3. Mise à jour des clients API : après avoir lancé la rotation, mettez à jour les clients API du cluster, tels que les ordinateurs de développement utilisant kubectl, afin qu'ils puissent communiquer avec le plan de contrôle à l'aide de la nouvelle adresse IP.
  4. Achèvement de la rotation : le plan de contrôle cesse de diffuser le trafic sur l'adresse IP d'origine. Les anciens identifiants sont révoqués, y compris les identifiants statiques existants pour les comptes de service Kubernetes.

Lorsque vous lancez une rotation des identifiants, GKE recrée les nœuds pour vous. Toutefois, lors d'événements majeurs tels que Google Cloud Next, nous pouvons suspendre les recréations automatiques des nœuds afin d'éviter toute interruption. Si vous n'effectuez pas de rotation des identifiants dans les sept jours suivant son démarrage, GKE tente de la terminer pour vous. Si certains nœuds de votre cluster utilisent toujours les identifiants précédents, la saisie automatique échoue. Vous devez planifier le suivi et la finalisation manuelle des rotations d'identifiants après avoir démarré la rotation. Ne comptez pas sur la saisie semi-automatique, qui est une mesure la plus optimale possible.

Lancer la rotation

Pour lancer une rotation des identifiants, exécutez la commande suivante :

gcloud container clusters update CLUSTER_NAME \
    --region REGION_NAME \
    --start-credential-rotation

Cette commande crée de nouveaux identifiants, les transmet au plan de contrôle et configure ce dernier afin qu'il diffuse le trafic sur deux adresses IP (l'adresse IP d'origine et une nouvelle adresse IP).

Recréer des nœuds

Après avoir reconfiguré le serveur d'API pour qu'il assure la diffusion sur une nouvelle adresse IP, GKE met automatiquement à jour vos nœuds afin qu'ils utilisent la nouvelle adresse IP et les nouveaux identifiants, s'il existe une disponibilité pour maintenance. GKE met tous vos nœuds à niveau vers la version de GKE déjà exécutée par les nœuds, ce qui recrée les nœuds. Pour en savoir plus, consultez la page Mises à niveau des pools de nœuds.

Par défaut, GKE effectue automatiquement les rotations des identifiants sept jours après le démarrage de l'opération. Si un intervalle de maintenance actif ou une exclusion dans votre cluster empêche GKE de recréer certains nœuds pendant cette période de sept jours, la rotation des identifiants échoue.

  • Si vous utilisez des exclusions ou des intervalles de maintenance susceptibles d'entraîner une échec de la rotation, mettez à niveau manuellement votre cluster pour forcer la recréation des nœuds :

    gcloud container clusters upgrade CLUSTER_NAME \
        --location=LOCATION \
        --cluster-version=VERSION
    

    Remplacez VERSION par la même version de GKE que celle utilisée par le cluster.

    Pour en savoir plus, consultez la section Mise en garde à propos des intervalles de maintenance.

Vérifier la progression de la recréation du pool de nœuds

  1. Pour surveiller l'opération de rotation, exécutez la commande suivante :

    gcloud container operations list \
        --filter="operationType=UPGRADE_NODES AND status=RUNNING" \
        --format="value(name)"
    

    Cette commande renvoie l'ID d'opération de la mise à niveau des nœuds.

  2. Pour interroger l'opération, transmettez l'ID d'opération à la commande suivante :

    gcloud container operations wait OPERATION_ID
    

Les pools de nœuds sont recréés un par un, et chacun possède sa propre opération. Si vous avez plusieurs pools de nœuds, suivez ces instructions pour interroger chaque opération.

Mettre à jour les clients API

Après avoir démarré la rotation des identifiants, vous devez mettre à jour tous les clients API en dehors du cluster (tels que kubectl sur les ordinateurs de développement), de sorte qu'ils utilisent les nouveaux identifiants et pointent vers la nouvelle adresse IP du plan de contrôle.

Pour mettre à jour vos clients API, exécutez la commande suivante pour chaque client :

gcloud container clusters get-credentials CLUSTER_NAME \
    --region REGION_NAME

Mettre à jour les identifiants du compte de service Kubernetes

Si vous utilisez des identifiants statiques pour ServiceAccounts dans votre cluster, passez aux identifiants éphémères. Si vous terminez la rotation, les identifiants du compte de service existants ne seront plus valides. Si vous ne souhaitez pas utiliser d'identifiants éphémères, veillez à recréer vos identifiants statiques pour tous les comptes de service du cluster une fois la rotation terminée.

Mettre à jour les adresses IP codées en dur et les règles de pare-feu

Si vous avez codé en dur l'adresse IP du plan de contrôle dans votre environnement, ou si vous avez des règles de pare-feu qui ciblent l'adresse IP du plan de contrôle, mettez à jour les adresses vers la nouvelle adresse IP. Si vous terminez la rotation sans mettre à jour les adresses IP dans les applications et les règles de pare-feu, ces ressources peuvent subir des interruptions lorsque GKE cesse de diffuser sur l'adresse IP précédente du plan de contrôle.

Achever la rotation

Après avoir mis à jour les clients API en dehors du cluster, terminez la rotation pour configurer le plan de contrôle afin qu'il diffuse le trafic uniquement avec les nouveaux identifiants et via la nouvelle adresse IP :

gcloud container clusters update CLUSTER_NAME \
    --region=REGION_NAME \
    --complete-credential-rotation

Si la rotation des identifiants échoue et renvoie un message d'erreur semblable à celui-ci, consultez Erreur 400 : le pool de nœuds nécessite la recréation :

ERROR: (gcloud.container.clusters.update) ResponseError: code=400, message=Node pool "test-pool-1" requires recreation.

Étape suivante