Par défaut, les nœuds Google Kubernetes Engine (GKE) utilisent le processus kubelet sur chaque nœud pour enregistrer les objets Node auprès du serveur d'API Kubernetes. Ce document vous explique comment empêcher cette auto-inscription pour les nœuds GKE protégés et exiger à la place qu'un composant de plan de contrôle GKE de confiance effectue les opérations d'inscription. Les ingénieurs en sécurité et les administrateurs de plate-forme peuvent utiliser la création de nœuds de plan de contrôle pour limiter les privilèges des nœuds.
Vous devez déjà connaître les concepts suivants :
Modes de création de nœuds dans GKE
Les nœuds GKE protégés, qui sont activés dans tous les clusters GKE, appliquent la vérification cryptographique des identités de nœud lors du processus d'enregistrement des nœuds. Cette vérification permet de s'assurer que seuls les nœuds légitimes peuvent s'enregistrer auprès du serveur d'API Kubernetes et exécuter des charges de travail.
Le workflow d'enregistrement par défaut des clusters GKE, dans lequel kubelet sur chaque nœud crée et modifie son objet Node dans le serveur d'API, crée un risque si un nœud est compromis. Par exemple, dans CVE-2025-5187, une faille de sécurité permettait aux utilisateurs de nœuds de supprimer les objets Node correspondants et d'enregistrer les nœuds compromis.
Création de nœuds du plan de contrôle
Dans GKE version 1.35.3-gke.1189000 et ultérieure, vous pouvez éventuellement exiger qu'un composant de plan de contrôle GKE de confiance nommé gcp-controller-manager crée des objets Node au lieu d'autoriser le kubelet à enregistrer lui-même les nœuds. Une fois que kubelet a configuré une connexion TLS avec le serveur d'API à l'aide de l'identité de nœud cryptographiquement vérifiée, le composant gcp-controller-manager crée l'objet Node. Un contrôleur d'admission rejette toute demande de kubelet visant à créer l'objet Node. En utilisant le composant du plan de contrôle pour créer des objets Node, vous pouvez réduire le risque qu'un nœud potentiellement compromis crée des objets Node arbitraires ou manipule sa spécification Node.
Pour modifier le comportement par défaut de création et d'enregistrement des nœuds, effectuez l'une des opérations suivantes lorsque vous créez un cluster Standard ou Autopilot :
- Google Cloud CLI : spécifiez la valeur
CONTROL_PLANEdans le flag--node-creation-mode. - API Kubernetes Engine : spécifiez la valeur
VIA_CONTROL_PLANEdans le champnode-creation-modede la méthodeNodeCreationConfig.
Limites
Il existe un bref délai entre le moment où gcp-controller-manager crée un objet Node dans l'API Kubernetes et celui où kubelet met à jour cet objet Node avec l'ensemble complet des libellés et annotations de nœud. Toutes les charges de travail ou tous les contrôleurs qui dépendent d'un ensemble complet d'étiquettes ou d'annotations immédiatement après la création du nœud peuvent présenter un comportement inattendu. Certains libellés et annotations peuvent être réconciliés à un moment différent de l'enregistrement kubelet. Vérifiez que vos charges de travail et DaemonSets utilisent des vérifications de présence de libellés et d'annotations avant d'agir.
- Évitez de déployer des DaemonSets et des charges de travail qui tolèrent tous les rejets de nœuds, car cela pourrait entraîner l'exécution de pods sur des nœuds qui ne sont pas prêts.
- Utilisez un
initContainerpour vérifier les libellés de nœud avant d'autoriser l'exécution des conteneurs principaux.
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 la Google Cloud CLI pour cette tâche, installez et initialisez la gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande
gcloud components update. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.
Activer la création de nœuds de plan de contrôle
Vous pouvez activer la création de nœuds à l'aide du composant gcp-controller-manager lorsque vous créez un cluster ou mettez à jour un cluster existant. Pour les clusters existants, la mise à jour n'affecte que les nouveaux nœuds du cluster. Les nœuds existants ne sont pas affectés par ce changement.
La commande suivante active le mode de création de nœuds du plan de contrôle pour un cluster existant :
gcloud container clusters update CLUSTER_NAME \
--node-creation-mode=CONTROL_PLANE \
--location=CONTROL_PLANE_LOCATION \
Remplacez les éléments suivants :
CLUSTER_NAME: nom du clusterCONTROL_PLANE_LOCATION: région ou zone de votre plan de contrôle du cluster.
Vous pouvez également spécifier l'indicateur --node-creation-mode dans la commande clusters create et dans la commande clusters create-auto.
Désactiver la création de nœuds de plan de contrôle
Vous pouvez revenir au comportement GKE par défaut dans lequel kubelet crée des nœuds à tout moment en spécifiant la valeur KUBELET dans l'option --node-creation-mode de Google Cloud CLI ou VIA_KUBELET dans la méthode NodeCreationConfig de l'API GKE. Pour les clusters existants, cette modification n'affecte que les nouveaux nœuds de ce cluster.
La commande suivante met à jour un cluster pour désactiver la création de nœuds de plan de contrôle :
gcloud container clusters update CLUSTER_NAME \
--node-creation-mode=KUBELET \
--location=CONTROL_PLANE_LOCATION \
Remplacez les éléments suivants :
CLUSTER_NAME: nom du clusterCONTROL_PLANE_LOCATION: région ou zone de votre plan de contrôle du cluster.
Étapes suivantes
- En savoir plus sur les nœuds GKE protégés
- Consultez la présentation de la sécurité dans GKE.
- Découvrez comment renforcer la sécurité de votre cluster.