Vyřešeno. Úplně nerozumím tomu, co se děje v zákulisí, ale řešení tohoto vyžaduje použití „tagů“, které spojují pravidla brány firewall v síti s instancí virtuálního počítače. Pokud v tuto chvíli vidím, je to relevantní pouze pro http a https. Zdá se, že ostatní porty, které jsou otevřené v síti a virtuálním počítači, fungují bez tohoto dalšího kusu.
Pokud si prohlédnete pravidla brány firewall, pravděpodobně uvidíte, že pravidla pro port 80 a 443 mají značky „http-server“ a „https-server“. Pokud ne, budete je muset přidat (nebo jiné značky dle vašeho výběru). Ukázalo se, že instance potřebuje tyto značky také přidat.
Chcete-li přidat značky do existující instance virtuálního počítače, použijte tento příkaz gcloud:
gcloud compute instances add-tags [YOUR_INSTANCE_NAME] --tags http-server,https-server
Chcete-li přidat značky v době vytváření instance, zahrňte tento příznak do svého příkazu:
gcloud compute instances create [YOUR_INSTANCE_NAME] --tags http-server,https-server
Pokud se podíváte do GCE gui, uvidíte, že zaškrtávací políčka „Povolit http provoz“ a „Povolit https provoz“ jsou poté zaškrtnuta. Požadavky a odpovědi pak proudí přes porty 80 a 443 podle očekávání.
Jednou ze super užitečných věcí, které Google Cloud Console nabízí, je odkaz ve spodní části vytvoření pro většinu zdrojů pro REST API a příkazový řádek k vytvoření stejného zdroje. Snažím se, abych byl schopen dělat vše, co umím v konzole z příkazového řádku SDK, takže to často používám, když mám otázku, jako je ta vaše.
Se stejnou otázkou jako výše jsem v konzole vytvořil VM a vybral „Povolit přenos HTTP“. Když se podíváte na příkazový řádek, uvidíte dva příkazy. První je příkaz create s výše uvedenou značkou (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
Druhý ve skutečnosti vytváří pravidlo brány firewall (default-allow-http ) a nastaví cíl pro požadavky na značku http-server (--target-tags=http-server ) na tcp portu 80 (--rules=tcp:80 ) z příchozích požadavků (--direction=INGRESS ) ze všech zdrojů (--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
Doufám, že to bude užitečné pro někoho dalšího.
POZNÁMKA: Snížil jsem výstup gcloud compute instance create
na příslušné bity, aby se omezil nepořádek.