En esta página, se muestra cómo resolver problemas con el aislamiento de red de Google Kubernetes Engine (GKE).
Si necesitas asistencia adicional, comunícate con Atención al cliente de Cloud.
El clúster de GKE no se está ejecutando
Un clúster deja de funcionar si se borran las reglas de firewall que permiten la entrada de tráfico desde el plano de control del clúster a los nodos en el puerto 10250 o la ruta predeterminada a la puerta de enlace predeterminada de Internet. Si borras la ruta predeterminada, debes asegurarte de que se enrute el tráfico a los servicios necesarios deGoogle Cloud . Para obtener más información, consulta enrutamiento personalizado.
Se agota el tiempo de espera cuando se crea un clúster
- Síntomas
- Los clústeres creados en la versión 1.28 o anterior con nodos privados requieren una ruta de intercambio de tráfico entre las VPC. Sin embargo, solo se puede realizar una operación de vinculación a la vez. Si intentas crear varios clústeres con las características anteriores al mismo tiempo, es posible que se agote el tiempo de espera de creación del clúster.
- Solución
Utiliza una de las siguientes soluciones:
Crea clústeres en la versión 1.28 o anterior de manera serial para que las rutas de intercambio de tráfico entre VPC ya existan en cada clúster posterior sin un extremo externo. Si intentas crear un solo clúster, es posible que también se agote el tiempo de espera si hay operaciones en ejecución en la VPC.
Crea clústeres en la versión 1.29 o una posterior.
La conexión de intercambio de tráfico entre redes de VPC se borra por accidente
- Síntomas
Cuando borras una conexión de intercambio de tráfico entre redes de VPC por accidente, el clúster entra en un estado de reparación y todos los nodos muestran un estado
UNKNOWN
. No podrás realizar ninguna operación en el clúster, ya que se desconecta la accesibilidad del plano de control. Cuando inspeccionas el plano de control, los registros mostrarán un error similar al siguiente:error checking if node NODE_NAME is shutdown: unimplemented
- Causas posibles
Borraste por accidente la conexión de intercambio de tráfico entre redes de VPC.
- Solución
Lleva a cabo los pasos siguientes:
Crea un clúster nuevo de intercambio de tráfico entre redes de VPC temporal. La creación del clúster hace que la recreación del intercambio de tráfico entre redes de VPC y el clúster anterior se restablezca a su funcionamiento normal.
Borra el clúster de intercambio de tráfico entre redes de VPC creado de forma temporal después de que el clúster anterior se restablezca a su funcionamiento normal.
Se borran accidentalmente el extremo y la regla de reenvío de Private Service Connect
- Síntomas
Cuando borras por accidente un extremo o una regla de reenvío de Private Service Connect, el clúster entra en un estado de reparación y todos los nodos muestran un estado
UNKNOWN
. No podrás realizar ninguna operación en el clúster, ya que se desconecta el acceso al plano de control. Cuando inspeccionas el plano de control, los registros mostrarán un error similar al siguiente:error checking if node NODE_NAME is shutdown: unimplemented
- Causas posibles
Borraste accidentalmente el extremo de Private Service Connect o la regla de reenvío. Ambos recursos se denominan
gke-[cluster-name]-[cluster-hash:8]-[uuid:8]-pe
y permiten que el plano de control y los nodos se conecten de forma privada.- Solución
El clúster se superpone con el intercambio de tráfico
- Síntomas
Si intentas crear un clúster sin un extremo externo, se muestra un error similar al siguiente:
Google Compute Engine: An IP range in the peer network overlaps with an IP range in an active peer of the local network.
- Causas posibles
Elegiste un CIDR del plano de control superpuesto.
- Solución
Utiliza una de las siguientes soluciones:
- Borra y vuelve a crear el clúster mediante otro CIDR del plano de control.
- Vuelve a crear el clúster en la versión 1.29 y, además, incluye la marca
--enable-private-nodes
.
No se puede acceder al plano de control de un clúster sin un extremo externo
Aumenta la probabilidad de que se pueda acceder al plano de control del clúster mediante la implementación de cualquiera de las opciones de configuración de acceso del extremo del clúster. Si deseas obtener más información, consulta el acceso a los extremos del clúster.
- Síntomas
Después de crear un clúster sin un extremo externo, si se intenta ejecutar los comandos
kubectl
en el clúster, se muestra un error similar a uno de los siguientes: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.
- Causas posibles
kubectl
no puede comunicarse con el plano de control del clúster.- Solución
Utiliza una de las siguientes soluciones:
Habilita el acceso a DNS para obtener una forma simplificada de acceder de forma segura a tu clúster. Para obtener más información, consulta Extremo basado en DNS.
Verifica que las credenciales del clúster se hayan generado para kubeconfig o que se haya activado el contexto correcto. Para obtener más información sobre cómo configurar las credenciales del clúster, consulta Genera una entrada de kubeconfig.
Verifica que se permita el acceso al plano de control mediante su dirección IP externa. La inhabilitación del acceso externo al plano de control del clúster aísla el clúster de Internet. Con esta configuración, solo los rangos de CIDR de red interna autorizados o la red reservada tienen acceso al plano de control.
Verifica que la dirección IP de origen esté autorizada para acceder al plano de control:
gcloud container clusters describe CLUSTER_NAME \ --format="value(controlPlaneEndpointsConfig.ipEndpointsConfig.authorizedNetworksConfig)"\ --location=COMPUTE_LOCATION
Reemplaza lo siguiente:
CLUSTER_NAME
: es el nombre de tu clúster.COMPUTE_LOCATION
: la ubicación de Compute Engine para el clúster.
Si la dirección IP de origen no está autorizada, el resultado que se muestra puede estar vacío (solo aparecen llaves) o contener rangos CIDR que no incluyen la dirección IP de origen.
cidrBlocks: cidrBlock: 10.XXX.X.XX/32 displayName: jumphost cidrBlock: 35.XXX.XXX.XX/32 displayName: cloud shell enabled: true
Agrega redes autorizadas al plano de control de acceso.
Si ejecutas el comando
kubectl
desde un entorno local o una región diferente a la ubicación del clúster, asegúrate de que esté habilitado el acceso global del extremo privado del plano de control. Para obtener más información, consulta Accede con la dirección IP interna del plano de control desde cualquier región.Describe el clúster para ver la respuesta de la configuración de acceso de control:
gcloud container clusters describe CLUSTER_NAME \ --location=COMPUTE_LOCATION \ --flatten "controlPlaneEndpointsConfig.ipEndpointsConfig.globalAccess"
Reemplaza lo siguiente:
CLUSTER_NAME
: es el nombre de tu clúster.COMPUTE_LOCATION
: la ubicación de Compute Engine para el clúster.
Un resultado correcto es similar al siguiente:
enabled: true
Si se muestra
null
, habilita el acceso con la dirección IP interna del plano de control desde cualquier región.
No se puede crear el clúster debido a la superposición del bloque CIDR de IPv4
- Síntomas
gcloud container clusters create
muestra un error similar al siguiente:The given master_ipv4_cidr 10.128.0.0/28 overlaps with an existing network 10.128.0.0/20.
- Causas posibles
Especificaste un bloque CIDR del plano de control que se superpone con una subred existente en tu VPC.
- Solución
Especifica un bloque CIDR para
--master-ipv4-cidr
que no se superponga con una subred existente.
No se puede crear el clúster debido a que otro clúster ya usa el rango de servicios
- Síntomas
Si intentas crear un clúster, se muestra un error similar al siguiente:
Services range [ALIAS_IP_RANGE] in network [VPC_NETWORK], subnetwork [SUBNET_NAME] is already used by another cluster.
- Causas posibles
Las siguientes configuraciones pueden causar este error:
- Elegiste un rango de servicios que aún está en uso por otro clúster o el clúster no se borró.
- Hubo un clúster con ese rango de servicios que se borró, pero los metadatos de rangos secundarios no se borraron de forma correcta. Los rangos secundarios de un clúster de GKE se guardan en los metadatos de Compute Engine y deben quitarse una vez que se borra el clúster. Incluso cuando un clúster se borra de forma correcta, es posible que los metadatos no se quiten.
- Solución
Lleva a cabo los pasos siguientes:
- Comprueba si un clúster existente está usando el rango de servicios. Puedes usar el comando
gcloud container clusters list
con la marcafilter
para buscar el clúster. Si hay un clúster existente que usa los rangos de servicios, debes borrar ese clúster o crear un rango de servicios nuevo. - Si un clúster existente no usa el rango de servicios, quita manualmente la entrada de metadatos que coincida con el rango de servicios que deseas usar.
- Comprueba si un clúster existente está usando el rango de servicios. Puedes usar el comando
No se puede crear una subred
- Síntomas
Cuando intentas crear un clúster con una subred automática o crear una subred personalizada, puedes encontrar cualquiera de los siguientes errores:
An IP range in the peer network overlaps with an IP range in one of the active peers of the local network.
Error: Error waiting for creating GKE cluster: Invalid value for field PrivateClusterConfig.MasterIpv4CidrBlock: x.x.x.x/28 conflicts with an existing subnet in one of the peered VPCs.
- Causas posibles
El rango CIDR del plano de control que especificaste se superpone con otro rango de IP en el clúster. Este error de creación de subred también puede ocurrir si intentas volver a usar los CIDR de
master-ipv4-cidr
que se usaron en un clúster borrado recientemente.- Solución
Usa otro rango de CIDR.
No se puede extraer la imagen de Docker Hub público
- Síntomas
Un Pod que se ejecuta en tu clúster muestra una advertencia en
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)
- Causas posibles
Los nodos con direcciones IP privadas solo necesitan una configuración adicional para cumplir con los requisitos de acceso a Internet. Sin embargo, los nodos pueden acceder a los servicios y las APIs de Google Cloud , incluido Artifact Registry, si habilitaste el Acceso privado a Google y cumpliste con los requisitos de red.
- Solución
Utiliza una de las siguientes soluciones:
Copia las imágenes de tu clúster de Docker Hub a Artifact Registry. Consulta la página sobre cómo migrar contenedores desde un registro de terceros para obtener más información.
GKE busca de forma automática
mirror.gcr.io
para las copias almacenadas en caché de las imágenes de Docker Hub a las que se accede con frecuencia.Si necesitas extraer imágenes de Docker Hub o de otro repositorio público, usa Cloud NAT o un proxy basado en instancias que sea el objetivo de una ruta estática
0.0.0.0/0
.
Solicitud a la API que activa el agotamiento del tiempo de espera del webhook de admisión
- Síntomas
Se agota el tiempo de espera de una solicitud a la API que activa un webhook de admisión configurado para usar un servicio con un
targetPort
distinto a 443, lo que hace que la solicitud falle:Error from server (Timeout): request did not complete within requested timeout 30s
- Causas posibles
De forma predeterminada, el firewall no permite conexiones TCP a los nodos, excepto en los puertos 443 (HTTPS) y 10250 (kubelet). Un webhook de admisión que intenta comunicarse con un Pod en un puerto distinto a 443 fallará si no hay una regla de firewall personalizada que permita el tráfico.
- Solución
Agrega una regla de firewall para tu caso de uso específico.
No se puede crear el clúster porque falla la verificación de estado
- Síntomas
Después de crear un clúster estándar con grupos de nodos privados, se atasca en el paso de verificación de estado y se informa un error similar a uno de los siguientes:
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
- Causas posibles
Las siguientes configuraciones pueden causar este error:
- Los nodos del clúster no pueden descargar objetos binarios obligatorios de la API de Cloud Storage (
storage.googleapis.com
). - Reglas de firewall que restringen el tráfico de salida.
- Los permisos de IAM de VPC compartida son incorrectos.
- El acceso privado a Google requiere que configures el DNS para
*.gcr.io
.
- Los nodos del clúster no pueden descargar objetos binarios obligatorios de la API de Cloud Storage (
- Solución
Utiliza una de las siguientes soluciones:
Habilita el Acceso privado a Google en la subred para el acceso de la red del nodo a
storage.googleapis.com
o habilita Cloud NAT a fin de permitir que los nodos se comuniquen constorage.googleapis.com
. extremos.Para el acceso de lectura del nodo a
storage.googleapis.com
, confirma que la cuenta de servicio asignada al nodo del clúster tenga acceso de lectura de almacenamiento.Asegúrate de tener una regla de firewall deGoogle Cloud para permitir todo el tráfico de salida o configura una regla de firewall para permitir el tráfico de salida de los nodos al plano de control del clúster y
*.googleapis.com
.Crea la configuración de DNS para
*.gcr.io
.Si tienes una configuración de firewall o de ruta no predeterminada, configura el Acceso privado a Google.
Si usas los Controles del servicio de VPC, configura Container Registry o Artifact Registry para los clústeres de GKE.
Asegúrate de no haber borrado o modificado las reglas de firewall creadas automáticamente para la entrada.
Si usas una VPC compartida, asegúrate de haber configurado los permisos de IAM necesarios.
kubelet no pudo crear una zona de pruebas de Pod
- Síntomas
Después de crear un clúster con nodos privados, se informa un error similar a uno de los siguientes:
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
- Causas posibles
El Pod
calico-node
onetd
no puede alcanzar*.gcr.io
.- Solución
Asegúrate de que completaste la configuración requerida para Container Registry o Artifact Registry.
Se crearon nodos privados, pero no se unieron al clúster
En el caso de los clústeres que usan solo nodos con direcciones IP privadas, a menudo, cuando se usan rutas personalizadas y dispositivos de red de terceros en la VPC, la ruta predeterminada (0.0.0.0/0
) se redirecciona al dispositivo, en lugar de a la puerta de enlace de Internet predeterminada. Además de la conectividad del plano de control, debes asegurarte de que sea posible acceder a los siguientes destinos:
- *.googleapis.com
- *.gcr.io
- gcr.io
Configura el Acceso privado a Google en los tres dominios. Con esta práctica recomendada, se permite que los nodos nuevos se inicien y se unan al clúster, y se mantiene restringido el tráfico vinculado a Internet.
Las cargas de trabajo de los clústeres de GKE no pueden acceder a Internet
Los pods que se ejecutan en nodos con direcciones IP privadas no pueden acceder a Internet. Por ejemplo, después de ejecutar el comando apt update
desde el Pod exec shell
, se informa un error similar al siguiente:
0% [Connecting to deb.debian.org (199.232.98.132)] [Connecting to security.debian.org (151.101.130.132)]
Si el rango de direcciones IP secundario de la subred que se usa para los Pods en el clúster no está configurado en la puerta de enlace de Cloud NAT, los Pods no pueden conectarse a Internet, ya que no tienen configurada una dirección IP externa para la puerta de enlace de Cloud NAT.
Asegúrate de configurar la puerta de enlace de Cloud NAT a fin de aplicar al menos los siguientes rangos de direcciones IP de subred para la subred que usa tu clúster:
- Rango de direcciones IP principal de la subred (para los nodos)
- Rango de direcciones IP secundario de la subred utilizado para los Pods del clúster
- Rango de direcciones IP secundario de la subred utilizado para los servicios del clúster
Si quieres obtener más información, consulta cómo agregar un rango de IP de subred secundario usado para los Pods.
No se puede inhabilitar el acceso directo a la IP para los clústeres públicos.
- Síntomas
Después de inhabilitar el extremo de la dirección IP, verás un mensaje de error similar al siguiente:
Direct IP access can't be disabled for public clusters
- Causas posibles
Tu clúster usa una red heredada.
- Solución
Migra tus clústeres a Private Service Connect. Para obtener más información sobre el estado de la migración, comunícate con el equipo de asistencia .
No se puede inhabilitar el acceso directo a la IP para los clústeres en medio de la migración de PSC.
- Síntomas
Después de inhabilitar el extremo de la dirección IP, verás un mensaje de error similar al siguiente:
Direct IP access can't be disabled for public clusters
- Causas posibles
Tu clúster usa una red heredada.
- Solución
Utiliza una de las siguientes soluciones:
- Vuelve a crear manualmente todos los grupos de nodos en una versión diferente.
- Espera a que GKE actualice automáticamente los grupos de nodos durante un evento de mantenimiento.
No se puede habilitar el extremo interno del plano de control
- Síntomas
Cuando intentas habilitar el extremo interno del plano de control de tu clúster, verás mensajes de error similares al siguiente:
private_endpoint_enforcement_enabled can't be enabled when envoy is disabled
private_endpoint_enforcement_enabled is unsupported. Please upgrade to the minimum support version
- Causas posibles
El clúster debe rotar las direcciones IP o actualizar la versión.
- Solución
Utiliza una de las siguientes soluciones:
- Rota la dirección IP del plano de control para habilitar Envoy.
- Actualiza tu clúster a la versión 1.28.10-gke.1058000 o una posterior.
La creación de clústeres falla cuando se definen políticas de la organización.
- Síntomas
Cuando intentas crear un clúster, ves un mensaje de error similar al siguiente:
compute.disablePrivateServiceConnectCreationForConsumers violated for projects
- Causas posibles
Una política de la organización de consumidores bloquea el extremo o el backend del clúster.
- Solución
Para permitir que las instancias creen extremos con la restricción
compute.restrictPrivateServiceConnectProducer
, completa los pasos que se indican en Políticas de la organización del lado del consumidor.
Es posible que el extremo de Private Service Connect tenga filtraciones durante la eliminación del clúster.
- Síntomas
Después de crear un clúster, es posible que veas uno de los siguientes síntomas:
No puedes ver un extremo conectado en Private Service Connect en tu clúster basado en Private Service Connect.
No puedes borrar la subred ni la red de VPC asignadas para el extremo interno en un clúster que usa Private Service Connect. Aparecerá un mensaje de error similar al siguiente:
projects/<PROJECT_ID>/regions/<REGION>/subnetworks/<SUBNET_NAME> is already being used by projects/<PROJECT_ID>/regions/<REGION>/addresses/gk3-<ID>
- Causas posibles
En los clústeres de GKE que usan Private Service Connect, GKE implementa un extremo de Private Service Connect con una regla de reenvío que asigna una dirección IP interna para acceder al plano de control del clúster en la red de un plano de control. Para proteger la comunicación entre el plano de control y los nodos con Private Service Connect, GKE mantiene el extremo invisible, y no puedes verlo en la consola deGoogle Cloud ni en gcloud CLI.
- Solución
Para evitar que se filtre el extremo de Private Service Connect antes de borrar el clúster, completa los siguientes pasos:
- Asigna
Kubernetes Engine Service Agent role
a la cuenta de servicio de GKE. - Asegúrate de que los permisos
compute.forwardingRules.*
ycompute.addresses.*
no se rechacen de forma explícita desde la cuenta de servicio de GKE.
Si ves que se filtró el extremo de Private Service Connect, comunícate con el equipo de asistencia .
- Asigna
No se puede analizar la red autorizada del clúster.
- Síntomas
No puedes crear un clúster en la versión 1.29 o posterior. Aparecerá un mensaje de error similar al siguiente:
Unable to parse cluster.master_ipv4_cidr "" into a valid IP address and mask
- Causas posibles
Tu proyecto de Google Cloud usa webhooks privados basados en IP. Por lo tanto, no puedes crear un clúster con Private Service Connect. En su lugar, tu clúster usa el intercambio de tráfico entre redes de VPC, que analiza la marca
master-ipv4-cidr
.- Solución
Utiliza una de las siguientes soluciones:
Continúa creando tu clúster de intercambio de tráfico de red de VPC y, luego, incluye el
master-ipv4-cidr
para definir CIDR válidos. Esta solución tiene las siguientes limitaciones:- La marca
master-ipv4-cidr
dejó de estar disponible en la consola de Google Cloud . Para actualizar esta marca, solo puedes usar Google Cloud CLI o Terraform. - El intercambio de tráfico de redes de VPC dejó de estar disponible en la versión 1.29 de GKE o versiones posteriores.
- La marca
Para migrar tus webhooks basados en IP privadas, completa los pasos que se indican en Limitaciones de Private Service Connect. Luego, comunícate con el equipo de asistencia para habilitar el uso de clústeres con Private Service Connect.
No se puede definir el rango de direcciones IP internas en clústeres con nodos públicos.
- Síntomas
No puedes definir un rango de direcciones IP internas con la marca
--master-ipv4-cidr
. Aparecerá un mensaje de error similar al siguiente:ERROR: (gcloud.container.clusters.create) Cannot specify --master-ipv4-cidr without --enable-private-nodes
- Causas posibles
Estás definiendo un rango de direcciones IP internas para el plano de control con la marca
master-ipv4-cidr
en un clúster sin la marcaenable-private-nodes
habilitada. Para crear un clúster conmaster-ipv4-cidr
definido, debes configurarlo para aprovisionar nodos con direcciones IP internas (nodos privados) con la marcaenable-private-nodes
.- Solución
Utiliza una de las siguientes soluciones:
Crea un clúster con el siguiente comando:
gcloud container clusters create-auto CLUSTER_NAME \ --enable-private-nodes \ --master-ipv4-cidr CP_IP_RANGE
Reemplaza lo siguiente:
CLUSTER_NAME
: El nombre de tu clúster.CLUSTER_NAME
: Es el rango de direcciones IP internas para el plano de control.
Actualiza el clúster para aprovisionar nodos con solo direcciones IP. Para obtener más información, consulta Cómo configurar tu clúster.
No se pueden programar cargas de trabajo públicas en clústeres de Autopilot
- Síntomas
- En los clústeres de Autopilot, si tu clúster solo usa nodos privados, no puedes programar cargas de trabajo en Pods públicos con el nodeSelector
cloud.google.com/private-node=false
. - Causas posibles
- La configuración de la marca
private-node
establecida comofalse
en el nodeSelector del pod solo está disponible en clústeres de la versión 1.30.3 o posterior. - Solución
- Actualiza tu clúster a la versión 1.30 o una posterior.
El acceso al extremo basado en DNS está inhabilitado
- Síntomas
Si intentas ejecutar comandos kubectl en el clúster, se muestra un error similar al siguiente:
couldn't get current server API group list: control_plane_endpoints_config.dns_endpoint_config.allow_external_traffic is disabled
- Causas posibles
Se inhabilitó el acceso basado en DNS en tu clúster.
- Solución
Habilita el acceso al plano de control con el extremo basado en DNS del plano de control. Para obtener más información, consulta Cómo modificar el acceso al plano de control.
Los nodos no pueden asignar direcciones IP durante el escalamiento
- Síntomas
Si intentas expandir el rango de direcciones IP principal de la subred a la lista de redes autorizadas, se muestra un error similar al siguiente:
authorized networks fields cannot be mutated if direct IP access is disabled
- Causas posibles
Inhabilitaste el extremo basado en IP del clúster.
- Solución
Inhabilita y habilita el extremo basado en IP del clúster con la marca
enable-ip-access
.
Demasiados bloques CIDR
gcloud
muestra el siguiente error cuando intenta crear o actualizar un clúster con más de 50 bloques CIDR:
ERROR: (gcloud.container.clusters.update) argument --master-authorized-networks: too many args
Para resolver este problema, realiza las siguientes acciones:
- Si tu clúster no usa Private Service Connect ni Intercambio de tráfico entre redes de VPC, asegúrate de no especificar más de 50 bloques CIDR.
- Si tu clúster usa Private Service Connect o intercambio de tráfico entre redes de VPC, no especifiques más de 100 bloques CIDR.
No se puede establecer una conexión con el servidor
Los comandos kubectl
agotan el tiempo de espera debido a que los bloques CIDR están configurados de forma incorrecta:
Unable to connect to the server: dial tcp MASTER_IP: getsockopt: connection timed out
Cuando creas o actualizas un clúster, asegúrate de especificar los bloques CIDR correctos.