Buv*_*inJ 11 linux google-compute-engine gcloud
首先,我希望使用纯粹的gcloud命令来实现我的目标 - 而不是GCE接口 - 所以请不要使用GUI提供答案!
我从连接到VM实例的磁盘创建了一个映像.为了做到这一点,我必须根据用于创建图像的Google文档删除该实例.之后,我使用图像重新创建了我的实例.
除了http和https流量现在在实例中被禁用之外,几乎所有内容似乎都完美地从该过程完成!我无法再浏览VM上托管的网站.我也无法通过ping域名来获得响应.
当我查看GCE gui(只是看 - 不修改任何内容!)时,我可以看到实例没有检查"允许http流量"和"允许https流量"的复选框.似乎必须与我的问题有关.
我检查了服务器上的防火墙规则(ipTables),以及与VM关联的Google网络.这些中的任何一个都没有错(并且VM肯定与该网络相关联).如果我在服务器上使用tcpdump监听端口80并浏览到我的域,我可以看到请求到达服务器,因此它们不会被传入的防火墙阻止.我也明确地重新启动了Apache,只是确保不是问题所在.
那么,我是否需要做一些事情来解除端口80和443的传出?这可能是SELinux的事吗?由于图像应该完全代表磁盘上的内容,因此不应该如此.看来这必须在GCE方面......
如果这些复选框不在服务器上编辑iptables或在Google网络上编辑防火墙规则,那么这些复选框实际上对该实例做了什么?什么是设置这些开关的gcloud命令,或者理想情况下使用实例create命令指定?
Buv*_*inJ 24
解决了.我并不完全了解幕后发生的事情,但解决方案需要使用"标签",它可以在网络上与VM实例相关联.据我所知,这只适用于http和https.在网络上打开的其他端口和VM似乎在没有这个额外部分的情况下工作.
如果您查看防火墙规则,您可能会看到端口80和443规则分别具有标签"http-server"和"https-server".如果他们不这样做,您需要添加(或您选择的其他标签).事实证明,实例也需要添加那些标签.
要将标记添加到现有VM实例,请使用以下gcloud命令:
gcloud compute instances add-tags [YOUR_INSTANCE_NAME] --tags http-server,https-server
Run Code Online (Sandbox Code Playgroud)
要在创建实例时添加标记,请在语句中包含该标记:
gcloud compute instances create [YOUR_INSTANCE_NAME] --tags http-server,https-server
Run Code Online (Sandbox Code Playgroud)
如果你查看GCE gui,你会看到那些"允许http流量"和"允许https流量"复选框被执行后检查.然后,请求和响应按预期流过端口80和443.
Google Cloud Console 提供的超级有用的东西之一是在为 REST API 和命令行创建相同资源的大多数资源的创建底部的链接。我正在挑战自己,以便能够通过 SDK 命令行在控制台中完成我可以做的所有事情,因此当我遇到像您这样的问题时,我经常使用它。
遇到与上述相同的问题,我在控制台中创建了一个 VM 并选择了“允许 HTTP 流量”。为此查看命令行,您将看到两个命令。第一个是上面提到的带有标签的 create 命令(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
Run Code Online (Sandbox Code Playgroud)
第二个实际上为您创建了防火墙规则(default-allow-http),并将请求的目标设置为tcp 端口 80 上的 http-server 标记(--target-tags=http-server)(--rules=tcp ) :80)来自所有来源(--source-ranges=0.0.0.0/0)的传入请求(--direction=INGRESS):
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
Run Code Online (Sandbox Code Playgroud)
我希望这对其他人有帮助。
注意:我确实减少了gcloud compute instance create
相关位的输出以减少混乱。
归档时间: |
|
查看次数: |
4974 次 |
最近记录: |