Problemas conocidos de la red de GKE


En esta página se enumeran los problemas conocidos de las redes de GKE. Esta página está dirigida a administradores y arquitectos que gestionan el ciclo de vida de la infraestructura tecnológica subyacente y responden a alertas y páginas cuando no se cumplen los objetivos de nivel de servicio (SLOs) o las aplicaciones fallan.

Para filtrar los problemas conocidos por versión del producto, selecciona los filtros en los siguientes menús desplegables.

Selecciona tu versión de GKE:

También puedes buscar tu problema:

Versión(es) identificada(s) Versión(es) corregida(s) Problema y solución alternativa
1.28, 1.29, 1.30, 1.31, 1.32, 1.33

Fuga de direcciones IP de pods en nodos con GKE Dataplane V2

En los clústeres con GKE Dataplane V2 habilitado, puede que se agoten las direcciones IP de los pods en los nodos. Este problema se debe a un error de tiempo de ejecución del contenedor que puede provocar fugas de direcciones IP asignadas cuando los pods sufren errores transitorios de CNI durante la creación.

El problema se produce cuando el nodo del clúster de GKE se actualiza o se crea con una de las siguientes versiones de GKE:

  • 1.33 y versiones posteriores
  • 1.32 y versiones posteriores
  • 1.31.2-gke.1115000 o versiones posteriores
  • 1.30.8-gke.1051001 o posterior
  • 1.29.10-gke.1059000 o posterior
  • 1.28.15-gke.1024000 o versiones posteriores

Cuando se produce este problema, los nuevos pods programados en el nodo afectado no se inician y devuelven un mensaje de error similar al siguiente: failed to assign an IP address to container.


Solución alternativa:

Para mitigar este problema, puedes aplicar el DaemonSet de mitigación al clúster para limpiar los recursos de IP filtrados:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cleanup-ipam-dir
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: cleanup-ipam
  template:
    metadata:
      labels:
        name: cleanup-ipam
    spec:
      hostNetwork: true
      securityContext:
        runAsUser: 0
        runAsGroup: 0
        seccompProfile:
          type: RuntimeDefault
      automountServiceAccountToken: false
      containers:
      - name: cleanup-ipam
        image: gcr.io/gke-networking-test-images/ubuntu-test:2022@sha256:6cfbdf42ccaa85ec93146263b6e4c60ebae78951bd732469bca303e7ebddd85e
        command:
        - /bin/bash
        - -c
        - |
          while true; do
          for hash in $(find /hostipam -iregex '/hostipam/[0-9].*' -mmin +10 -exec head -n1 {} \; ); do
          hash="${hash%%[[:space:]]}"
          if [ -z $(ctr -n k8s.io c ls | grep $hash | awk '{print $1}') ]; then
          grep -ilr $hash /hostipam
          fi
          done | xargs -r rm
          echo "Done cleaning up /var/lib/cni/networks/gke-pod-network at $(date)"
          sleep 120s
          done
        volumeMounts:
        - name: host-ipam
          mountPath: /hostipam
        - name: host-ctr
          mountPath: /run/containerd
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop:
            - ALL
      volumes:
      - name: host-ipam
        hostPath:
          path: /var/lib/cni/networks/gke-pod-network
      - name: host-ctr
        hostPath:
          path: /run/containerd

1.31, 1.32 y 1.33
  • 1.33.1-gke.1107000 y versiones posteriores

Interrupciones de los balanceadores de carga de entrada y de servicio en clústeres con una red antigua

Una incompatibilidad con las redes antiguas provoca que los backends de un balanceador de carga gestionado con GKE desplegado mediante Ingress o Service se desconecten. Como resultado, el balanceador de carga no tiene ningún backend activo, lo que a su vez provoca que se rechacen todas las solicitudes entrantes a esos balanceadores de carga.

El problema afecta a los clústeres de GKE que usan una red antigua y tienen la versión 1.31 o una posterior.

Para identificar los clústeres de GKE con una red antigua, ejecuta el siguiente comando:

    gcloud container clusters describe CLUSTER_NAME --location=LOCATION --format="value(subnetwork)"
  

Un clúster con una red antigua obtendrá una salida vacía para este comando.

Solución alternativa:

Las redes antiguas están obsoletas desde hace algún tiempo, por lo que la solución recomendada es migrar tu red antigua a una red de VPC. Para ello, puedes convertir una red antigua que contenga clústeres de GKE. Si no puedes realizar esta migración en este momento, ponte en contacto con el equipo de Atención al Cliente de Google Cloud.

1.30, 1.31 y 1.32
  • 1.30.10-gke.1070000 y versiones posteriores
  • 1.31.5-gke.1068000 y versiones posteriores
  • 1.32.1-gke.1002000 y versiones posteriores

Los nodos recién creados no se añaden a los balanceadores de carga internos de capa 4

Google Cloud Es posible que los balanceadores de carga que se crean para los servicios LoadBalancer internos no incluyan los nodos recién creados en el grupo de instancias de backend.

El problema será más visible en un clúster que se haya escalado a cero nodos y, a continuación, se haya vuelto a escalar a uno o más nodos.

Soluciones alternativas:

  • Activa el subconjunto de GKE y vuelve a crear el servicio.

    Nota: El subconjunto de GKE no se puede desactivar una vez que se ha activado.

  • Crea otro servicio de balanceo de carga interno. Cuando se sincronice, el grupo de instancias también se corregirá para el servicio afectado. El nuevo servicio se puede eliminar después de la sincronización.
  • Añade y, a continuación, elimina la etiqueta node.kubernetes.io/exclude-from-external-load-balancers de uno de los nodos.
  • Añade un nodo al clúster. Puedes quitar el nodo después de que el servicio empiece a funcionar.
1.31 y 1.32
  • 1.31.7-gke.1158000 y versiones posteriores
  • 1.32.3-gke.1499000 y versiones posteriores

Problemas con la API Gateway debido a que se han eliminado storedVersions del estado de CRD

Kube-Addon-Manager en GKE elimina incorrectamente v1alpha2 storedVersion del estado de los CRDs de la API Gateway, como gateway, httpRoute, gatewayClass y referenceGrant. Este problema se produce incluso cuando el clúster sigue teniendo instancias de esos CRDs almacenadas en formato v1alpha2. Si la versión del clúster de GKE se actualiza sin el storedVersions, las llamadas a la API Gateway fallarán. Las llamadas fallidas también pueden interrumpir los controladores que implementan la API Gateway.

Tu clúster puede estar en riesgo si cumple todas las condiciones siguientes:

  • La API Gateway está habilitada en tu clúster.
  • Has instalado en algún momento una versión v1alpha2 de un CRD de la API Gateway.
  • Tu clúster se ha ejecutado en una versión de GKE afectada.

Solución alternativa:

La solución alternativa recomendada es retrasar las actualizaciones del clúster hasta que se resuelva el problema.

Si necesitas actualizar la versión del clúster, debes actualizar la versión de almacenamiento de todos los CRDs de la API Gateway afectados a v1beta1. En el siguiente ejemplo se actualiza el CRD gatewayClass:

  1. Comprueba la presencia de la versión de almacenamiento v1alpha2:
    kubectl get crd gatewayclasses.gateway.networking.k8s.io -ojsonpath="{.status.storedVersions}"
  2. Ajusta la versión de almacenamiento a v1beta1 ejecutando lo siguiente en todos los recursos de GatewayClass presentes en el clúster:
    kubectl annotate gatewayclass gateway-class-name bump-storage-version="yes"
  3. Quita la versión de almacenamiento v1alpha2 y define la versión de almacenamiento v1beta1:
    kubectl patch customresourcedefinitions gatewayclasses.gateway.networking.k8s.io --subresource='status' --type='merge' -p '{"status":{"storedVersions":["v1beta1"]}}'
  4. Realiza la actualización como de costumbre.
1.32
  • 1.32.3-gke.1170000 y versiones posteriores

Los pods nuevos no se inicializan y se quedan en el estado ContainerCreating

No se pueden crear pods nuevos y se quedan en el estado ContainerCreating. Cuando se produce este problema, el contenedor de servicio registra lo siguiente:

Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "[sandbox-ID]": plugin type="cilium-cni" failed (add): unable to create endpoint: Cilium API client timeout exceeded

El problema afecta a los clústeres de GKE con versiones comprendidas entre la 1.32 y la 1.32.3-gke.1170000 (sin incluir), que se crearon con las versiones 1.31 o 1.32 de GKE. La causa principal es que una estructura de datos en memoria que mantenía una colección de identidades de Cilium asignadas no se sincronizaba correctamente con el estado del servidor de la API de Kubernetes.

Para confirmar la versión de GKE que se usó para crear el clúster, puedes consultar el recurso initialClusterVersion con el siguiente comando:

  gcloud container clusters describe [cluster_name] --location [location] --format='value(initialClusterVersion)'
  

Si el clúster de GKE tiene habilitado el registro, el contenedor cilium-agent registra el mensaje unable to resolve identity: timed out waiting for cilium-operator to allocate CiliumIdentity for key en el Explorador de registros mediante la siguiente consulta:

   resource.type="k8s_container"
   resource.labels.container_name="cilium-agent"
  

Solución alternativa:

Una medida de mitigación temporal es reiniciar el plano de control. Para ello, actualiza el plano de control a la misma versión que ya está ejecutando:

  gcloud container clusters upgrade [cluster_name] --location [location] --cluster-version=[version] --master
  
1.27,1.28,1.29,1.30,1.31

El controlador de NEG deja de gestionar los endpoints cuando se elimina el puerto del servicio

Cuando el controlador de NEG se configura para crear un NEG independiente para un servicio y uno de los puertos configurados se elimina posteriormente del servicio, el controlador de NEG dejará de gestionar los endpoints del NEG. Además de los servicios en los que el usuario crea una anotación de NEG independiente, esto también afecta a los servicios a los que hacen referencia GKE Gateway, MCI y GKE Multi Cluster Gateway.

Solución alternativa:

Cuando se elimina un puerto de un servicio con una anotación de NEG independiente, también se debe actualizar la anotación para eliminar el puerto en cuestión.

1,28

Error de configuración de TLS de la pasarela

Hemos detectado un problema al configurar TLS para las pasarelas en clústeres que ejecutan la versión 1.28.4-gke.1083000 de GKE. Esto afecta a las configuraciones de TLS que usan un recurso SSLCertificate o un recurso CertificateMap. Si actualizas un clúster con pasarelas, las actualizaciones que se hagan en la pasarela fallarán. En el caso de las nuevas pasarelas, los balanceadores de carga no se aprovisionarán. Este problema se solucionará en una próxima versión de parche de GKE 1.28.

1.27, 1.28 y 1.29
  • 1.26.13-gke.1052000 y versiones posteriores
  • 1.27.10-gke.1055000 y versiones posteriores
  • 1.28.6-gke.1095000 y versiones posteriores
  • 1.29.1-gke.1016000 y versiones posteriores

Errores intermitentes al establecer la conexión

Los clústeres de las versiones del plano de control 1.26.6-gke.1900 y posteriores pueden experimentar fallos intermitentes en el establecimiento de la conexión.

Las probabilidades de que se produzcan fallos son bajas y no afectan a todos los clústeres. Los fallos deberían desaparecer por completo al cabo de unos días desde la aparición del síntoma.

1.27, 1.28 y 1.29
  • 1.27.11-gke.1118000 o posterior
  • 1.28.7-gke.1100000 o versiones posteriores
  • 1.29.2-gke.1217000 o versiones posteriores

Problemas de resolución de DNS con Container-Optimized OS

Las cargas de trabajo que se ejecutan en clústeres de GKE con nodos basados en Container-Optimized OS pueden tener problemas de resolución de DNS.

1,28 1.28.3-gke.1090000 o posterior

Network Policy elimina una conexión debido a una búsqueda de seguimiento de conexiones incorrecta

En los clústeres con GKE Dataplane V2 habilitado, cuando un pod cliente se conecta a sí mismo mediante un servicio o la dirección IP virtual de un balanceador de carga de red interno de tipo pasarela, el paquete de respuesta no se identifica como parte de una conexión existente debido a una búsqueda de conntrack incorrecta en el plano de datos. Esto significa que una política de red que restringe el tráfico de entrada del pod se aplica de forma incorrecta al paquete.

El impacto de este problema depende del número de pods configurados para el servicio. Por ejemplo, si el servicio tiene un pod de backend, la conexión siempre falla. Si el servicio tiene dos pods backend, la conexión falla el 50% de las veces.

Solución alternativa:

Para mitigar este problema, configure los valores de port y containerPort en el manifiesto de servicio para que sean iguales.

1.27,1.28
  • 1.28.3-gke.1090000 o posterior
  • 1.27.11-gke.1097000 o versiones posteriores

Paquetes descartados en flujos de conexión en bucle

En los clústeres con GKE Dataplane V2 habilitado, cuando un pod crea una conexión TCP a sí mismo mediante un servicio, de forma que el pod sea tanto el origen como el destino de la conexión, el seguimiento de conexiones eBPF de GKE Dataplane V2 registra incorrectamente los estados de la conexión, lo que provoca que se filtren entradas de conntrack.

Cuando se ha filtrado una tupla de conexión (protocolo, IP de origen o destino y puerto de origen o destino), las nuevas conexiones que usen la misma tupla de conexión pueden provocar que se descarten los paquetes de retorno.

Solución alternativa:

Usa una de las siguientes soluciones alternativas:

  • Habilita la reutilización de TCP (keep-alives) para una aplicación que se ejecuta en un pod que puede comunicarse consigo misma mediante un servicio. De esta forma, se evita que se emita la marca FIN de TCP y que se filtre la entrada de conntrack.
  • Cuando se usan conexiones de corta duración, expón el pod mediante un balanceador de carga de proxy, como Gateway, para exponer el servicio. De este modo, la dirección de destino de la solicitud de conexión se establece en la dirección IP del balanceador de carga, lo que impide que GKE Dataplane V2 realice SNAT en la dirección IP de bucle invertido.
Anterior a 1.31.0-gke.1506000 1.31.0-gke.1506000 y versiones posteriores

La red de tipo dispositivo en GKE con varias redes falla con nombres de red largos

No se puede crear el clúster y se produce el siguiente error:

error starting very-long-string-that-exceeds-character-limit-gpu-nic0 device plugin endpoint: listen unix /var/lib/kubelet/plugins_registry/networking.gke.io.networks_very-long-string-that-exceeds-character-limit-gpu-nic0.sock: bind: invalid argument

Solución alternativa:

Limita la longitud de los nombres de objetos de red escritos en el dispositivo a 41 caracteres como máximo. Se compone la ruta completa de cada socket de dominio UNIX, incluido el nombre de red correspondiente. Linux tiene una limitación en la longitud de las rutas de sockets (menos de 107 bytes). Teniendo en cuenta el directorio, el prefijo del nombre de archivo y la extensión .sock, el nombre de la red puede tener un máximo de 41 caracteres.

1.27, 1.28, 1.29, 1.30
  • 1.30.4-gke.1282000 o versiones posteriores
  • 1.29.8-gke.1157000 o posterior
  • 1.28.13-gke.1078000 o versiones posteriores
  • 1.27.16-gke.1342000 o versiones posteriores

Problemas de conectividad de los pods hostPort tras actualizar el plano de control

Los clústeres que tengan la política de red habilitada pueden tener problemas de conectividad con los pods hostPort. Además, los pods recién creados pueden tardar entre 30 y 60 segundos en estar listos.

El problema se produce cuando el plano de control de GKE de un clúster se actualiza a una de las siguientes versiones de GKE:

  • 1.30 a 1.30.4-gke.1281999
  • 1.29.1-gke.1545000 a 1.29.8-gke.1156999
  • 1.28.7-gke.1042000 a 1.28.13-gke.1077999
  • 1.27.12-gke.1107000 a 1.27.16-gke.1341999

Solución alternativa:

Actualiza o vuelve a crear los nodos inmediatamente después de actualizar el plano de control de GKE.

1.31 y 1.32
  • 1.32.1-gke.1729000 o versiones posteriores
  • 1.31.6-gke.1020000 o posterior

Tráfico UDP dañado entre pods que se ejecutan en el mismo nodo

Los clústeres con la visibilidad intranodo habilitada pueden experimentar problemas con el tráfico UDP entre los pods que se ejecutan en el mismo nodo.

El problema se produce cuando el nodo del clúster de GKE se actualiza o se crea con una de las siguientes versiones de GKE:

  • 1.32.1-gke.1729000 o versiones posteriores
  • 1.31.6-gke.1020000 o posterior

La ruta afectada es el tráfico UDP de pod a pod en el mismo nodo a través de HostPort o Service.

Resolución

Actualiza el clúster a una de las siguientes versiones corregidas:

  • 1.32.3-gke.1927000 o versiones posteriores
  • 1.31.7-gke.1390000 o versiones posteriores
1.28, 1.29, 1.30, 1.31

Los pods de Calico no están en buen estado en clústeres con menos de 3 nodos en total y una vCPU insuficiente

Los pods calico-typha y calico-node no se pueden programar en clústeres que cumplan todas las condiciones siguientes: menos de 3 nodos en total, cada nodo tiene 1 o menos vCPUs asignables y la política de red habilitada. Esto se debe a que no hay suficientes recursos de CPU.

Soluciones alternativas:

  • Escala a un mínimo de 3 grupos de nodos con 1 nodo que use 1 vCPU asignable.
  • Cambia el tamaño de un grupo de nodos a un mínimo de 3 nodos con 1 vCPU asignable.
  • Usa un tipo de máquina con al menos 2 vCPUs asignables en un grupo de nodos con un solo nodo.

Interrupciones de Multi-Cluster Gateway (MCG) en clústeres zonales durante las actualizaciones del plano de control

Las implementaciones que usan Multi-Cluster Gateway (MCG) en clústeres zonales de GKE pueden experimentar interrupciones con errores `503` durante eventos que provoquen el reinicio del plano de control, como una actualización del clúster. Esto ocurre porque MCG se basa en un mecanismo antiguo para la detección de grupos de puntos finales de red (NEG) que informa incorrectamente de que no hay backends cuando los nodos de un clúster zonal no están disponibles temporalmente durante el reinicio del plano de control. Esto provoca que el balanceador de carga elimine todos los back-ends, lo que conlleva una pérdida de tráfico.

Soluciones alternativas:

  • La solución recomendada es migrar de un clúster de GKE de zona a un clúster de GKE regional. Los clústeres regionales tienen un plano de control de alta disponibilidad, lo que elimina el punto único de fallo que provoca este problema durante las actualizaciones o los reinicios.