Risolto. Non capisco del tutto cosa stia succedendo dietro le quinte, ma la soluzione a questo richiede l'uso di "tag" che associano le regole del firewall sulla rete all'istanza VM. Per quanto posso vedere a questo punto, questo è pertinente solo per http e https. Altre porte aperte sulla rete e sulla VM sembrano funzionare senza questo pezzo aggiuntivo.
Se visualizzi le regole del tuo firewall, probabilmente vedrai che le regole della porta 80 e 443 hanno rispettivamente i tag "http-server" e "https-server". In caso contrario, dovrai aggiungere quelli (o altri tag di tua scelta). Si scopre che l'istanza ha bisogno che vengano aggiunti anche quei tag.
Per aggiungere i tag a un'istanza VM esistente, utilizza questo comando gcloud:
gcloud compute instances add-tags [YOUR_INSTANCE_NAME] --tags http-server,https-server
Per aggiungere i tag al momento della creazione dell'istanza, includi quel flag nella tua istruzione:
gcloud compute instances create [YOUR_INSTANCE_NAME] --tags http-server,https-server
Se guardi nella gui di GCE, vedrai che le caselle di controllo "Consenti traffico http" e "Consenti traffico https" sono selezionate dopo averlo fatto. Le richieste e le risposte passano quindi attraverso le porte 80 e 443 come previsto.
Una delle cose super utili offerte da Google Cloud Console è un collegamento nella parte inferiore della creazione per la maggior parte delle risorse per l'API REST e la riga di comando per creare la stessa risorsa. Sto sfidando me stesso per essere in grado di fare tutto ciò che posso fare nella console dalla riga di comando dell'SDK, quindi lo uso spesso quando ho una domanda come la tua.
Avendo la stessa domanda di cui sopra, nella console ho creato una VM e selezionato "Consenti traffico HTTP". Guardando la riga di comando per questo, vedrai due comandi. Il primo è il comando create con il tag come indicato sopra (http-server):
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
Il secondo crea effettivamente la regola del firewall (default-allow-http ) per te e imposta la destinazione per le richieste al tag http-server (--target-tags=http-server ) sulla porta tcp 80 (--rules=tcp:80 ) dalle richieste in arrivo (--direction=INGRESS ) da tutte le fonti (--source-ranges=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
Spero che questo sia utile per chiunque altro.
NOTA: Ho ridotto l'output di gcloud compute instance create
ai bit rilevanti per ridurre il disordine.