Gelöst. Ich verstehe nicht ganz, was hinter den Kulissen vor sich geht, aber die Lösung dafür erfordert die Verwendung von "Tags", die Firewall-Regeln im Netzwerk mit der VM-Instanz verknüpfen. Soweit ich an dieser Stelle sehen kann, ist dies nur für http und https relevant. Andere offene Ports im Netzwerk und der VM scheinen ohne dieses zusätzliche Teil zu funktionieren.
Wenn Sie Ihre Firewall-Regeln anzeigen, sehen Sie wahrscheinlich, dass die Regeln für Port 80 und 443 die Tags „http-server“ bzw. „https-server“ haben. Wenn dies nicht der Fall ist, müssen Sie diese (oder andere Tags Ihrer Wahl) hinzufügen. Es stellt sich heraus, dass der Instanz diese Tags ebenfalls hinzugefügt werden müssen.
Um die Tags zu einer vorhandenen VM-Instanz hinzuzufügen, verwenden Sie diesen gcloud-Befehl:
gcloud compute instances add-tags [YOUR_INSTANCE_NAME] --tags http-server,https-server
Um die Tags zum Zeitpunkt der Instanzerstellung hinzuzufügen, fügen Sie dieses Flag in Ihre Anweisung ein:
gcloud compute instances create [YOUR_INSTANCE_NAME] --tags http-server,https-server
Wenn Sie in der GCE-GUI nachsehen, sehen Sie, dass die Kontrollkästchen "HTTP-Verkehr zulassen" und "https-Verkehr zulassen" danach aktiviert sind. Anfragen und Antworten fließen dann wie erwartet über die Ports 80 und 443.
Eines der äußerst hilfreichen Dinge, die die Google Cloud Console bietet, ist ein Link am Ende der Erstellung für die meisten Ressourcen für die REST-API und die Befehlszeile, um dieselbe Ressource zu erstellen. Ich fordere mich selbst heraus, alles tun zu können, was ich in der Konsole von der SDK-Befehlszeile aus tun kann, also verwende ich dies oft, wenn ich eine Frage wie Ihre habe.
Bei der gleichen Frage wie oben habe ich in der Konsole eine VM erstellt und "HTTP-Verkehr zulassen" ausgewählt. Wenn Sie sich die Befehlszeile dafür ansehen, sehen Sie zwei Befehle. Der erste ist der create-Befehl mit dem oben erwähnten Tag (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
Die zweite erstellt tatsächlich die Firewall-Regel (default-allow-http ) für Sie und legt das Ziel für Anfragen an das HTTP-Server-Tag fest (--target-tags=http-server ) auf TCP-Port 80 (--rules=tcp:80 ) von eingehenden Anfragen (--direction=INGRESS ) aus allen Quellen (--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
Ich hoffe, dies ist für andere hilfreich.
HINWEIS: Ich habe die Ausgabe von gcloud compute instance create
reduziert auf relevante Bits, um die Unordnung zu reduzieren.