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
:
1°
- Destino:
199.36.153.8/30
- Next Hop:
default-internet-gateway
2°
- Destino:
34.126.0.0/18
- Next Hop:
default-internet-gateway
Rutas para restricted.googleapis.com
:
1°
- Destino:
34.36.153.4/30
- Next Hop:
default-internet-gateway
2°
- 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:
Dominio | Tipo de Registro | Dirección IP | Uso |
---|---|---|---|
private.googleapis.com | A | 199.36.153.8 | IPv4 |
A | 199.36.153.9 | IPv4 | |
A | 199.36.153.10 | IPv4 | |
A | 199.36.153.11 | IPv4 | |
AAAA | 2600:2d00:0002:2000:: | IPv6 | |
restricted.googleapis.com | A | 199.36.153.4 | IPv4 |
A | 199.36.153.5 | IPv4 | |
A | 199.36.153.6 | IPv4 | |
A | 199.36.153.7 | IPv4 | |
AAAA | 2600:2d00:0002:1000:: | IPv6 | |
*.googleapis.com | CNAME | private.googleapis.com. | Alias para private.googleapis.com |
*.gcr.io | CNAME | gcr.io. | Alias para gcr.io |
*.pkg.dev | CNAME | pkg.dev. | Alias para pkg.dev |
*.run.app | CNAME | run.app. | Alias para run.app |
googleapis.com | A | 199.36.153.8 | IPv4 |
A | 199.36.153.9 | IPv4 | |
A | 199.36.153.10 | IPv4 | |
A | 199.36.153.11 | IPv4 | |
gcr.io | A | 199.36.153.8 | IPv4 |
A | 199.36.153.9 | IPv4 | |
A | 199.36.153.10 | IPv4 | |
A | 199.36.153.11 | IPv4 | |
pkg.dev | A | 199.36.153.8 | IPv4 |
A | 199.36.153.9 | IPv4 | |
A | 199.36.153.10 | IPv4 | |
A | 199.36.153.11 | IPv4 | |
run.app | A | 199.36.153.8 | IPv4 |
A | 199.36.153.9 | IPv4 | |
A | 199.36.153.10 | IPv4 | |
A | 199.36.153.11 | IPv4 |
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 de0.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
- Subred con Private Google Access habilitado: La VM debe estar en una subred donde Private Google Access esté habilitado.
- 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.
- 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.
- 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
orestricted.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.
Leave a Reply