Error al esperar la creación del clúster GKE: Todos los recursos del clúster fueron creados, pero x de x nodos están en estado no saludable.

Este error se da cuando estamos creando un GKE completamente aislado a nivel de red, en un entorno productivo del mundo real. Basicamente se resume en la interacción de los Nodos del Cluster con los Servicios de Google o las API de Google en una configuración de rutas especifica.

Resumen del error

Configuración de Rutas de la VPC:

  • En la sección de “Routes” de nuestra VPC, notamos que la ruta por defecto (que apunta a 0.0.0.0/0) no tiene como “Next Hop” el “Default Internet Gateway”. En cambio, esta ruta tiene como “Next Hop” una VM o un Appliance.

Logs de Deployment de GKE:

  • Al revisar los logs del deployment del clúster GKE, observamos que todos los recursos del clúster fueron creados correctamente y las VMs de los nodos están presentes en el proyecto.
  • Sin embargo, al acceder a los logs del puerto serial de la VM (Serial Port 1), podemos ver que aunque la resolución DNS funciona correctamente, los endpoints generan “Timeout”.

Analisis Logs de Deployment de GKE

Podremos detectar que nuestros recursos del cluster fueron creados: la vm de nuestros nodos se encuentra entre las VMs del project.

Para ver los logs de deployment debemos ingresar a la VM y hacer click sobre Serial Port 1:

Aquí podremos visualizar los logs del deployment automatizado de GKE:

  • En este caso, detectamos que la resolución DNS funciona correctamente, pero los endpoints generan Timeout.

Solución

Debemos implementar la configuración de rutas y DNS.

Rutas IPv4

Rutas para private.googleapis.com:

  • Destino: 199.36.153.8/30
  • Next Hop: default-internet-gateway

  • Destino: 34.126.0.0/18
  • Next Hop: default-internet-gateway

Rutas para restricted.googleapis.com:

  • Destino: 34.36.153.4/30
  • Next Hop: default-internet-gateway

  • Destino: 34.126.0.0/18
  • Next Hop: default-internet-gateway

DNS

Para la configuración de DNS podremos utilizar el siguiente modulo de Terraform:

https://registry.terraform.io/modules/mdiloreto/pga-private-dns-records/google/1.0.1

Este modulo creará los siguientes registros:

DominioTipo de RegistroDirección IPUso
private.googleapis.comA199.36.153.8IPv4
A199.36.153.9IPv4
A199.36.153.10IPv4
A199.36.153.11IPv4
AAAA2600:2d00:0002:2000::IPv6
restricted.googleapis.comA199.36.153.4IPv4
A199.36.153.5IPv4
A199.36.153.6IPv4
A199.36.153.7IPv4
AAAA2600:2d00:0002:1000::IPv6
*.googleapis.comCNAMEprivate.googleapis.com.Alias para private.googleapis.com
*.gcr.ioCNAMEgcr.io.Alias para gcr.io
*.pkg.devCNAMEpkg.dev.Alias para pkg.dev
*.run.appCNAMErun.app.Alias para run.app
googleapis.comA199.36.153.8IPv4
A199.36.153.9IPv4
A199.36.153.10IPv4
A199.36.153.11IPv4
gcr.ioA199.36.153.8IPv4
A199.36.153.9IPv4
A199.36.153.10IPv4
A199.36.153.11IPv4
pkg.devA199.36.153.8IPv4
A199.36.153.9IPv4
A199.36.153.10IPv4
A199.36.153.11IPv4
run.appA199.36.153.8IPv4
A199.36.153.9IPv4
A199.36.153.10IPv4
A199.36.153.11IPv4

Por que sucede esto?

La causa principal de este problema es la falta de acceso a los servicios y APIs de Google necesarios para que los nodos del clúster GKE funcionen correctamente. Esto ocurre porque:

Aislamiento de Red:

  • El clúster de GKE se encuentra en una VPC que está completamente aislada de Internet. Esto significa que los nodos del clúster no pueden comunicarse con los servicios de Google.

Configuración de Rutas:

  • La ruta por defecto (0.0.0.0/0) en la VPC no utiliza el “Default Internet Gateway” como “Next Hop”, sino que está redirigida a una VM o Appliance. Esto impide que el tráfico hacia los servicios de Google pueda salir de la VPC correctamente.

Private Google Access:

  • Aunque la resolución DNS funcione, los endpoints no pueden ser alcanzados debido a que no hay una configuración adecuada de “Private Google Access”.

Private Google Access

Private Google Access permite que las VM en Google Cloud, que no tienen una dirección IP externa, puedan acceder a las API y servicios de Google a través de sus direcciones IP internas.

¿Cómo Funciona?

  • Sin Private Google Access: Una VM sin dirección IP externa solo puede comunicarse con otros recursos internos en la misma red VPC.
  • Con Private Google Access: La misma VM puede comunicarse con las API y servicios de Google, aunque no tenga una dirección IP externa. Esto se logra configurando la red VPC para permitir este acceso.

Consideraciones

La configuración tiene consideraciones importantes de Default Routes

  • IPv4: debemos verificar que exista una ruta predeterminada con default-internet-gateway como Next Hop y un rango de destino de 0.0.0.0/0.
  • IPv6: Si usas IPv6, asegúrate de tener una ruta predeterminada con default-internet-gateway y un rango de destino de ::/0.

Si estas rutas están ausentes, debes crearlas para permitir el tráfico a todos los destinos necesarios.

Requisitos

  1. Subred con Private Google Access habilitado: La VM debe estar en una subred donde Private Google Access esté habilitado.
  2. Rutas y Reglas de Firewall: La red VPC debe tener rutas y reglas de firewall adecuadas que permitan el tráfico a las IP externas utilizadas por los servicios de Google.
  3. Dirección IP Interna: La VM debe usar una dirección IP interna como su dirección de origen para los paquetes enviados a los servicios de Google.
  4. DNS Configuration: debemos crear registros DNS específicos para dirigir el tráfico a las IP privadas (VIP) de Google. Aquí te explico qué registros DNS debes crear para private.googleapis.com o restricted.googleapis.com.

Cuándo Usar private.googleapis.com y Cuándo Usar restricted.googleapis.com

Debemos elegir entre los dominios private.googleapis.com y restricted.googleapis.com según tus necesidades específicas de acceso a las APIs y servicios de Google.

Private.googleapis.com

Utiliza private.googleapis.com cuando necesitas acceso a la mayoría de las APIs y servicios de Google, independientemente de si están soportados por VPC Service Controls.Incluye acceso a Google Maps, Google Ads, Google Cloud, y la mayoría de otras APIs de Google.No soporta aplicaciones web de Google Workspace (como Gmail y Google Docs) ni sitios web interactivos.

Restricted.googleapis.com

Utiliza restricted.googleapis.com cuando solo necesitas acceso a las APIs y servicios de Google que son compatibles con VPC Service Controls.Este dominio restringe el acceso a solo las APIs y servicios que soportan VPC Service Controls.No permite el acceso a las aplicaciones web de Google Workspace ni a las APIs que no soportan VPC Service Controls.

Utilizarlo solo para APIs y Servicios Compatibles con VPC Service Controls.


by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.