En esta página, se describe cómo solucionar problemas de GKE Dataplane V2 para clústeres de Google Kubernetes Engine (GKE).
Soluciona problemas con GKE Dataplane V2
En esta sección, se muestra cómo investigar y resolver problemas con GKE Dataplane V2.
Confirma que GKE Dataplane V2 esté habilitado:
kubectl -n kube-system get pods -l k8s-app=cilium -o wide
Si GKE Dataplane V2 está en ejecución, el resultado incluye Pods con el prefijo
anetd-
. anetd es el controlador de herramientas de redes para GKE Dataplane V2.Si el problema es con los servicios o la aplicación de la política de red, verifica los registros del Pod
anetd
: Usa los siguientes selectores de registros en Cloud Logging:resource.type="k8s_container" labels."k8s-pod/k8s-app"="cilium" resource.labels.cluster_name="CLUSTER_NAME"
Si falla la creación de un Pod, revisa los registros de kubelet para obtener pistas. Usa los siguientes selectores de registros en Cloud Logging:
resource.type="k8s_node" log_name=~".*/logs/kubelet" resource.labels.cluster_name="CLUSTER_NAME"
Reemplaza
CLUSTER_NAME
por el nombre del clúster o quítalo por completo para ver los registros de todos los clústeres.
Problemas conocidos
Problemas de conectividad intermitentes relacionados con conflictos de rango de NodePort en el clúster de GKE Dataplane V2
En los clústeres de GKE Dataplane V2, pueden ocurrir problemas de conectividad intermitentes para el tráfico enmascarado o con el uso de puertos efímeros. Estos problemas se deben a posibles conflictos de puertos con el rango de NodePort reservado y, por lo general, ocurren en las siguientes situaciones:
ip-masq-agent
personalizado: Si usas unip-masq-agent
personalizado (versión 2.10 o posterior), en el que el clúster tiene servicios de NodePort o de balanceador de cargas, es posible que observes problemas de conectividad intermitente debido a su conflicto con el rango de NodePort. A partir de la versión 2.10 y versiones posteriores,ip-masq-agent
tiene el argumento--random-fully
implementado internamente de forma predeterminada. Para mitigar esto, configura de forma explícita--random-fully=false
(aplicable desde la versión 2.11) en los argumentos de la configuración deip-masq-agent
. Para obtener más información sobre la configuración, consulta Configura un agente de enmascaramiento de IP en clústeres de Standard.Superposición del rango de puertos efímeros: Si el rango de puertos efímeros definido por
net.ipv4.ip_local_port_range
en tus nodos de GKE se superpone con el rango de NodePort (30000-32767), también puede generar problemas de conectividad. Para evitar este problema, asegúrate de que estos dos rangos no se superpongan.
Revisa la configuración de ip-masq-agent
y la configuración del rango de puertos efímero para asegurarte de que no entren en conflicto con el rango de NodePort. Si tienes problemas de conectividad intermitentes, considera estas posibles causas y ajusta tu configuración según corresponda.
Los rangos de puertos de la política de red no se aplican
Si especificas un campo endPort
en una política de red en un clúster que tiene habilitado GKE Dataplane V2, no se aplicará.
A partir de GKE 1.22, la API de Kubernetes Network Policy te permite especificar un rango de puertos en los que se aplica la política de red. Esta API es compatible con clústeres con la política de red Calico, pero no con clústeres con GKE Dataplane V2.
Puedes verificar el comportamiento de tus objetos NetworkPolicy
si los vuelves a leer después de escribirlos en el servidor de la API. Si el objeto todavía contiene el campo endPort
, la función se aplica. Si falta el campo endPort
, la función no se aplica. En todos los casos, el objeto almacenado en el servidor de la API es la fuente de información de la política de red.
Para obtener más información, consulta KEP-2079: Política de red que admite rangos de puertos.
Los Pods muestran un mensaje de error de failed to allocate for range 0: no IP addresses available in range set
Versiones afectadas de GKE: 1.22.0 a 1.25
Los clústeres de GKE que ejecutan grupos de nodos que usan containerd y tienen GKE Dataplane V2 habilitado pueden experimentar problemas de filtración de direcciones IP y agotar todas las direcciones IP de Pods en un nodo. Un Pod programado en un nodo afectado muestra un mensaje de error similar al siguiente:
failed to allocate for range 0: no IP addresses available in range set: 10.48.131.1-10.48.131.62
Para obtener más información sobre el problema, consulta el problema número 5768 de containerd.
Versiones fijas
Para solucionar este problema, actualiza tu clúster a una de las siguientes versiones de GKE:
- 1.22.17-gke.3100 o superior
- 1.23.16-gke.200 o superior
- 1.24.9-gke.3200 o superior
- 1.25.6-gke.200 o superior
La política de red descarta una conexión debido a una búsqueda de seguimiento de conexión incorrecta
Cuando un Pod de cliente se conecta consigo mismo a través de un Service o la dirección IP virtual de un balanceador de cargas de red de transferencia interno, 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 para el Pod se aplica de forma incorrecta en el paquete.
El impacto de este problema depende de la cantidad de Pods configurados para el Service. Por ejemplo, si el Service tiene 1 Pod de backend, la conexión siempre falla. Si el Service tiene 2 Pods de backend, la conexión falla el 50% del tiempo.
Versiones fijas
Para solucionar este problema, actualiza tu clúster a una de las siguientes versiones de GKE:
- 1.28.3-gke.1090000 o superior.
Soluciones alternativas
Puedes mitigar este problema si configuras port
y containerPort
en el manifiesto del Service para que tengan el mismo valor.
Pérdida de paquetes para los flujos de conexión en horquilla
Cuando un Pod crea una conexión TCP a sí misma usando un Service, de modo que el Pod sea la fuente y el destino de la conexión, el seguimiento de conexión de eBPF de GKE Dataplane V2 realiza un seguimiento incorrecto de los estados de conexión, lo que genera entradas de conntrack filtradas.
Cuando se filtra una tupla de conexión (protocolo, IP de origen/destino y puerto de origen/destino), las conexiones nuevas que usan la misma tupla de conexión pueden provocar que se pierdan paquetes de retorno.
Versiones fijas
Para solucionar este problema, actualiza tu clúster a una de las siguientes versiones de GKE:
- 1.28.3-gke.1090000 o superior
- 1.27.11-gke.1097000 o superior
Soluciones alternativas
Aplica una de las siguientes soluciones:
Habilita la reutilización de TCP (keep-alive) para las aplicaciones que se ejecutan en Pods que pueden comunicarse con sí mismas a través de un Service. Esto evita que se emita la marca TCP FIN y se evite que se filtre la entrada de conntrack.
Cuando uses conexiones de corta duración, expón el Pod con un balanceador de cargas de proxy, como Gateway, para exponer el Service. Esto hace que el destino de la solicitud de conexión se establezca en la dirección IP del balanceador de cargas, lo que evita que GKE Dataplane V2 realice SNAT a la dirección IP de bucle invertido.
¿Qué sigue?
- Usa el registro de políticas de red para registrar cuándo las políticas de red del clúster permiten o rechazan las conexiones a los Pods.
- Obtén información sobre cómo funciona GKE Dataplane V2.