Solución:
Resuelto. No entiendo del todo lo que sucede detrás de escena, pero la solución a esto requiere el uso de “etiquetas” que asocian las reglas de firewall en la red con la instancia de VM. Por lo que puedo ver en este punto, esto solo es pertinente para http y https. Otros puertos que están abiertos en la red y la VM parecen funcionar sin esta pieza adicional.
Si ve las reglas de su firewall, probablemente verá que las reglas del puerto 80 y 443 tienen las etiquetas “http-server” y “https-server” respectivamente. Si no es así, deberá agregar esas (u otras etiquetas de su elección). Resulta que la instancia también necesita que se le agreguen esas etiquetas.
Para agregar las etiquetas a una instancia de VM existente, use este comando de gcloud:
gcloud compute instances add-tags [YOUR_INSTANCE_NAME] --tags http-server,https-server
Para agregar las etiquetas en el momento de la creación de la instancia, incluya esa marca en su declaración:
gcloud compute instances create [YOUR_INSTANCE_NAME] --tags http-server,https-server
Si miras en la interfaz gráfica de usuario de GCE, verás que las casillas de verificación “Permitir tráfico http” y “Permitir tráfico https” están marcadas después de hacer eso. Luego, las solicitudes y respuestas fluyen a través de los puertos 80 y 443 como se esperaba.
Una de las cosas muy útiles que ofrece Google Cloud Console es un enlace en la parte inferior de la creación para la mayoría de los recursos para la API REST y la línea de comandos para crear el mismo recurso. Me desafío a mí mismo para poder hacer todo lo que puedo hacer en la consola desde la línea de comandos del SDK, por lo que lo uso a menudo cuando tengo una pregunta como la suya.
Teniendo la misma pregunta anterior, en la consola creé una VM y seleccioné “Permitir tráfico HTTP”. Mirando la línea de comando para esto, verá dos comandos. El primero es el comando de creación con la etiqueta como se indicó anteriormente (servidor http):
gcloud beta compute --project=XXXX instances create cgapperi-vm1
--zone=XXXXX --machine-type=f1-micro --subnet=default
--tags=http-server --image=debian-10-buster-v20200413
--image-project=debian-cloud --boot-disk-size=10GB
--boot-disk-type=pd-standard --boot-disk-device-name=cgapperi-vm1
--no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring
--reservation-affinity=any
El segundo realmente crea la regla de firewall (default-allow-http) y establece el destino de las solicitudes en la etiqueta del servidor http (–target-tags = servidor-http) en el puerto tcp 80 (–reglas = tcp: 80) de las solicitudes entrantes (–direction = INGRESO) de todas las fuentes (–fuente-rangos = 0.0.0.0 / 0):
gcloud compute --project=XXXX firewall-rules create default-allow-http
--direction=INGRESS --priority=1000 --network=default --action=ALLOW
--rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=http-server
Espero que esto sea útil para cualquier otra persona.
NOTA: Reduje la salida del gcloud compute instance create
a los bits relevantes para reducir el desorden.