Cette page explique comment résoudre les problèmes liés aux clusters privés de Google Kubernetes Engine (GKE).
Si vous avez besoin d'aide supplémentaire, contactez l'assistance Cloud Customer Care.
Le cluster privé ne s'exécute pas
La suppression de l'appairage VPC entre le plan de contrôle de cluster et les nœuds de cluster, la suppression des règles de pare-feu autorisant le trafic entrant issu du plan de contrôle de cluster vers les nœuds sur le port 10250 ou la suppression de la route par défaut vers la passerelle Internet par défaut entraînent l'arrêt du fonctionnement d'un cluster privé. Si vous supprimez la route par défaut, vous devez vous assurer que le trafic vers les services Google Cloud nécessaires est bien routé. Pour plus d'informations, consultez la section Routage personnalisé.
Expiration du délai lors de la création d'un cluster privé
Chaque cluster privé nécessite une route d'appairage entre les VPC, mais une seule opération d'appairage peut se produire à la fois. Si vous tentez de créer plusieurs clusters privés en même temps, le processus de création du cluster risque d'expirer. Pour éviter cela, créez des clusters privés en série afin que les routes d'appairage VPC existent déjà pour chaque cluster privé suivant. La tentative de création d'un seul cluster privé peut également expirer si des opérations sont en cours d'exécution sur votre VPC.
La connexion d'appairage de réseaux VPC sur le cluster privé est accidentellement supprimée
- Symptômes
Lorsque vous supprimez une connexion d'appairage de réseaux VPC par inadvertance, le cluster est en état de réparation et tous les nœuds affichent un état
UNKNOWN
. Vous ne pourrez effectuer aucune opération sur le cluster, car la joignabilité au plan de contrôle est déconnectée. Lorsque vous inspectez le plan de contrôle, les journaux affichent une erreur semblable à celle-ci :error checking if node NODE_NAME is shutdown: unimplemented
- Causes probables
Vous avez accidentellement supprimé la connexion d'appairage de réseaux VPC.
- Solution
Procédez comme suit :
Créez un cluster d'appairage de réseaux VPC temporaire. La création d'un cluster entraîne la recréation de l'appairage de réseaux VPC et le rétablissement de l'ancien cluster sur son fonctionnement normal.
Une fois que l'ancien cluster est restauré, supprimez le cluster d'appairage de réseaux VPC créé temporairement.
Le cluster chevauche l'homologue actif
- Symptômes
La tentative de création d'un cluster privé renvoie une erreur semblable à ce qui suit :
Google Compute Engine: An IP range in the peer network overlaps with an IP range in an active peer of the local network.
- Causes probables
Vous avez choisi un CIDR de plan de contrôle chevauchant.
- Solution
Supprimez et recréez le cluster avec un CIDR de plan de contrôle différent.
Vous ne pouvez pas accéder au plan de contrôle d'un cluster privé
Augmentez la probabilité d'accès à votre plan de contrôle de cluster en mettant en œuvre l'une des configurations d'accès aux points de terminaison du cluster. Pour en savoir plus, consultez la section Accès aux points de terminaison du cluster.
- Symptômes
Après la création d'un cluster privé, une tentative d'exécution de commandes
kubectl
sur le cluster renvoie une erreur semblable à l'un des exemples suivants :Unable to connect to the server: dial tcp [IP_ADDRESS]: connect: connection timed out.
Unable to connect to the server: dial tcp [IP_ADDRESS]: i/o timeout.
- Causes probables
kubectl
ne parvient pas à communiquer avec le plan de contrôle du cluster.- Solution
Vérifiez que les identifiants du cluster ont été générés pour kubeconfig ou que le contexte approprié est activé. Pour en savoir plus sur la définition des identifiants du cluster, consultez la page Générer une entrée kubeconfig.
Vérifiez que l'accès au plan de contrôle à l'aide de son adresse IP externe est autorisé. La désactivation de l'accès externe au plan de contrôle du cluster isole le cluster d'Internet. Cette configuration est immuable après la création du cluster. Avec cette configuration, seules les plages CIDR de réseau interne autorisées ou le réseau réservé ont accès au plan de contrôle.
Vérifiez que l'adresse IP d'origine est autorisée à atteindre le plan de contrôle :
gcloud container clusters describe CLUSTER_NAME \ --format="value(masterAuthorizedNetworksConfig)"\ --location=COMPUTE_LOCATION
Remplacez les éléments suivants :
CLUSTER_NAME
: nom du clusterCOMPUTE_LOCATION
: emplacement Compute Engine du cluster.
Si votre adresse IP d'origine n'est pas autorisée, la sortie peut renvoyer un résultat vide (uniquement entre accolades) ou des plages CIDR qui n'incluent pas votre adresse IP d'origine.
cidrBlocks: cidrBlock: 10.XXX.X.XX/32 displayName: jumphost cidrBlock: 35.XXX.XXX.XX/32 displayName: cloud shell enabled: true
Ajoutez des réseaux autorisés au plan de contrôle des accès.
Si vous exécutez la commande
kubectl
à partir d'un environnement sur site ou d'une région différente de celle du cluster, assurez-vous que l'accès mondial au point de terminaison privé du plan de contrôle est activé. Pour en savoir plus, consultez la section Accéder au point de terminaison privé du plan de contrôle dans le monde entier.Décrivez le cluster pour afficher la réponse de configuration d'accès au plan de contrôle :
gcloud container clusters describe CLUSTER_NAME \ --location=COMPUTE_LOCATION \ --flatten "privateClusterConfig.masterGlobalAccessConfig"
Remplacez les éléments suivants :
CLUSTER_NAME
: nom du clusterCOMPUTE_LOCATION
: emplacement Compute Engine du cluster.
Le résultat renvoyé en cas de succès ressemble à ce qui suit :
enabled: true
Si
null
est renvoyé, activez l'accès mondial au plan de contrôle.
Impossible de créer le cluster en raison du chevauchement du bloc CIDR IPv4
- Symptômes
gcloud container clusters create
renvoie une erreur semblable à ce qui suit :The given master_ipv4_cidr 10.128.0.0/28 overlaps with an existing network 10.128.0.0/20.
- Causes probables
Vous avez spécifié un bloc CIDR de plan de contrôle qui chevauche un sous-réseau existant dans votre VPC.
- Solution
Spécifiez un bloc CIDR pour
--master-ipv4-cidr
qui ne chevauche pas un sous-réseau existant.
Impossible de créer le cluster en raison de l'utilisation de la plage de services par un autre cluster
- Symptômes
La tentative de création d'un cluster privé renvoie une erreur semblable à ce qui suit :
Services range [ALIAS_IP_RANGE] in network [VPC_NETWORK], subnetwork [SUBNET_NAME] is already used by another cluster.
- Causes probables
Au choix :
- Vous avez choisi une plage de services qui est toujours utilisée par un autre cluster, ou le cluster n'a pas été supprimé.
- Un cluster utilisant cette plage de services a été supprimé, mais les métadonnées des plages secondaires n'ont pas été correctement supprimées. Les plages secondaires d'un cluster GKE sont enregistrées dans les métadonnées Compute Engine et doivent être supprimées une fois le cluster supprimé. Même lorsqu'un cluster est correctement supprimé, il est possible que les métadonnées ne le soient pas.
- Solution
Procédez comme suit :
- Vérifiez si la plage de services est utilisée par un cluster existant. Vous pouvez utiliser la commande
gcloud container clusters list
avec l'optionfilter
pour rechercher le cluster. Si un cluster existant utilise les plages de services, vous devez le supprimer ou en créer une nouvelle. - Si la plage de services n'est pas utilisée par un cluster existant, supprimez manuellement l'entrée de métadonnées correspondant à la plage de services que vous souhaitez utiliser.
- Vérifiez si la plage de services est utilisée par un cluster existant. Vous pouvez utiliser la commande
Impossible de créer le sous-réseau
- Symptômes
Lorsque vous tentez de créer un cluster privé avec un sous-réseau automatique, ou de créer un sous-réseau personnalisé, vous pouvez rencontrer l'erreur suivante :
An IP range in the peer network overlaps with an IP range in one of the active peers of the local network.
- Causes probables
La plage CIDR du plan de contrôle que vous avez spécifiée chevauche une autre plage d'adresses IP du cluster. Cela peut également se produire si vous avez récemment supprimé un cluster privé et que vous essayez de créer un autre cluster privé avec le même CIDR de plan de contrôle.
- Solution
Essayez d’utiliser une autre plage CIDR.
Impossible d'extraire l'image du registre Docker Hub public
- Symptômes
Un pod exécuté dans votre cluster affiche un avertissement dans
kubectl describe
:Failed to pull image: rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
- Causes probables
Les nœuds d'un cluster privé ne possèdent pas d'adresses IP externes et ne répondent donc pas aux conditions d'accès à Internet. Toutefois, les nœuds peuvent accéder aux API et aux services de Google, y compris à Artifact Registry, si vous avez activé l'accès privé à Google et que vous remplissez les conditions requises pour le réseau.
- Solution
Utilisez l'une des solutions suivantes :
Copiez les images de votre cluster privé de Docker Hub vers Artifact Registry. Pour en savoir plus, consultez la page Migrer des conteneurs à partir d'un registre tiers.
GKE vérifie automatiquement
mirror.gcr.io
pour les copies mises en cache des images Docker Hub fréquemment utilisées.Si vous devez extraire des images de Docker Hub ou d'un autre dépôt public, utilisez Cloud NAT ou un proxy basé sur une instance correspondant à la cible d'une route
0.0.0.0/0
statique.
Dépassement du délai d'une requête API déclenchant un webhook d'admission
- Symptômes
Une requête API qui déclenche un webhook d'admission configuré pour utiliser un service avec un port cible autre que 443 dépasse le délai, ce qui entraîne l'échec de la requête :
Error from server (Timeout): request did not complete within requested timeout 30s
- Causes probables
Par défaut, le pare-feu n'autorise pas les connexions TCP aux nœuds, sauf sur les ports 443 (HTTPS) et 10250 (kubelet). Un webhook d'admission qui tente de communiquer avec un pod sur un port autre que 443 échoue si aucune règle de pare-feu personnalisée n'autorise le trafic.
- Solution
Ajoutez une règle de pare-feu pour votre cas d'utilisation spécifique.
Impossible de créer le cluster en raison de l'échec de la vérification de l'état
- Symptômes
Une fois créé, un cluster privé se retrouve bloqué à l'étape de vérification de l'état et génère un message d'erreur semblable à l'un des messages suivants :
All cluster resources were brought up, but only 0 of 2 have registered.
All cluster resources were brought up, but: 3 nodes out of 4 are unhealthy
- Causes probables
Parmi les suivantes :
- Les nœuds de cluster ne peuvent pas télécharger les binaires requis depuis l'API Cloud Storage (
storage.googleapis.com
). - Des règles de pare-feu limitent le trafic de sortie.
- Les autorisations IAM du VPC partagé sont incorrectes.
- L'accès privé à Google nécessite la configuration du DNS pour
*.gcr.io
.
- Les nœuds de cluster ne peuvent pas télécharger les binaires requis depuis l'API Cloud Storage (
- Solution
Utilisez l'une des solutions suivantes :
Activez l'accès privé à Google sur le sous-réseau pour permettre l'accès réseau du nœud à
storage.googleapis.com
, ou activez Cloud NAT pour autoriser les nœuds à communiquer avec les points de terminaisonstorage.googleapis.com
. Pour en savoir plus, consultez la section Résoudre les problèmes de création de cluster privé GKE.Pour un accès en lecture du nœud à
storage.googleapis.com
, vérifiez que le compte de service assigné au nœud de cluster dispose d'un accès en lecture à l'espace de stockage.Vérifiez que vous disposez d'une règle de pare-feu Google Cloud pour autoriser tout le trafic de sortie, ou configurez une règle de pare-feu pour autoriser le trafic de sortie des nœuds vers le plan de contrôle du cluster et
*.googleapis.com
.Créez la configuration DNS pour
*.gcr.io
.Si vous utilisez une configuration de pare-feu ou de routage autre que celle par défaut, configurez l'accès privé à Google.
Si vous utilisez VPC Service Controls, configurez Container Registry ou Artifact Registry pour les clusters privés GKE.
Assurez-vous de ne pas avoir supprimé ou modifié les règles de pare-feu créées automatiquement pour Ingress.
Si vous utilisez un VPC partagé, assurez-vous d'avoir configuré les autorisations IAM requises.
kubelet n'a pas réussi à créer le bac à sable de pod
- Symptômes
Après la création d'un cluster privé, il génère une erreur semblable à l'une des suivantes :
Warning FailedCreatePodSandBox 12s (x9 over 4m) kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = Error response from daemon: Get https://registry.k8s.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
- Causes probables
Le pod
calico-node
ounetd
ne peut pas atteindre*.gcr.io
.- Solution
Utilisez l'une des solutions suivantes :
- Assurez-vous d'avoir effectué la configuration requise pour Container Registry ou Artifact Registry.
Nœuds de cluster privé créés, mais non associés au cluster
Souvent, lorsque vous utilisez des dispositifs de routage personnalisé et de réseau tiers sur le VPC utilisé par votre cluster privé, la route par défaut (0.0.0.0/0
) est redirigée vers le dispositif au lieu de la passerelle Internet par défaut. Outre la connectivité du plan de contrôle, vous devez vous assurer que les destinations suivantes sont accessibles :
- *.googleapis.com
- *.gcr.io
- gcr.io
Configurez l'accès privé à Google pour les trois domaines. Cette bonne pratique permet de démarrer les nouveaux nœuds et de les associer au cluster, tout en continuant à limiter le trafic Internet.
Les charges de travail sur des clusters GKE privés ne parviennent pas à accéder à Internet
Les pods des clusters GKE privés ne peuvent pas accéder à Internet. Par exemple, après avoir exécuté la commande apt update
à partir du pod exec shell
, elle signale une erreur semblable à celle-ci :
0% [Connecting to deb.debian.org (199.232.98.132)] [Connecting to security.debian.org (151.101.130.132)]
Si la plage d'adresses IP secondaire du sous-réseau utilisée pour les pods du cluster n'est pas configurée sur la passerelle Cloud NAT, les pods ne peuvent pas se connecter à Internet, car ils n'ont pas d'adresse IP externe configurée pour la passerelle Cloud NAT.
Assurez-vous de configurer la passerelle Cloud NAT pour appliquer au moins les plages d'adresses IP de sous-réseau suivantes au sous-réseau utilisé par votre cluster :
- Plage d'adresses IP principale du sous-réseau (utilisée par les nœuds)
- Plage d'adresses IP secondaire du sous-réseau pour les pods du cluster
- Plage d'adresses IP secondaire du sous-réseau pour les services du cluster
Pour en savoir plus, consultez la section Ajouter une plage d'adresses IP secondaire de sous-réseau pour les pods.