【问题标题】:What is the gcloud command to allow http traffic on a VM instance? (It's not create firewall rule!)允许 VM 实例上的 http 流量的 gcloud 命令是什么? (这不是创建防火墙规则!)
【发布时间】:2016-06-06 01:31:17
【问题描述】:

首先,我希望使用纯粹的 gcloud 命令来实现我的目标 - 而不是 GCE 界面 - 所以请不要使用 GUI 提供答案!

我从附加到 VM 实例的磁盘创建了一个映像。为了做到这一点,我必须根据谷歌创建图像的文档删除该实例。之后,我使用该图像重新创建了我的实例。

除了 http 和 https 流量现在在实例中被禁用之外,几乎所有东西似乎都在该过程中完美运行!我无法再浏览到 VM 上托管的网站。我也无法通过 ping 域得到响应。

当我查看 GCE gui 时(只是查看 - 不修改任何内容!)我可以看到该实例未选中“允许 http 流量”和“允许 https 流量”的复选框。看来这一定和我的问题有关。

我检查了服务器 (ipTables) 以及与 VM 关联的 Google 网络上的防火墙规则。这些都没有问题(并且VM肯定与该网络相关联)。如果我在服务器上使用 tcpdump 监听端口 80 并浏览到我的域,我可以看到请求正在到达服务器,因此它们不会被传入防火墙阻止。我还明确地重新启动了 Apache,请确保这不是问题。

那么,我需要做些什么来解除对传出端口 80 和 443 的阻塞吗?这可能是 SELinux 的事情吗?由于图像应该准确地代表磁盘上不应该的内容。看来这一定是在 GCE 方面...

如果这些复选框不编辑服务器上的 iptables 或 Google 网络上的防火墙规则,它们实际上对实例有什么作用?设置这些开关的 gcloud 命令是什么,或者理想情况下使用实例创建命令指定?

【问题讨论】:

    标签: linux google-compute-engine gcloud


    【解决方案1】:

    根据此链接中的详细信息: https://cloud.google.com/vpc/docs/special-configurations

    “通过选中这些复选框,VPC 网络会自动创建一个 default-http 或 default-https 规则,该规则适用于带有 http-server 或 https-server 标签的所有实例。您的新实例也带有相应的标签取决于您的复选框选择。”

    所以勾选这些框标记您的服务器并为您创建必要的防火墙规则,该规则将应用于具有该标记的所有服务器。从 gcloud 的角度来看,我猜您需要确保创建和应用标签,并且还为其创建规则以执行控制台选项为您执行的操作。

    【讨论】:

      【解决方案2】:

      解决了。我不完全了解幕后发生的事情,但解决方案需要使用“标签”,将网络上的防火墙规则与 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
      

      要在创建实例时添加标签,请在语句中包含该标志:

      gcloud compute instances create [YOUR_INSTANCE_NAME] --tags http-server,https-server
      

      如果您查看 GCE gui,您会看到那些“允许 http 流量”和“允许 https 流量”复选框在完成后被选中。然后请求和响应按预期流经端口 80 和 443。

      【讨论】:

      • 对我不起作用,即使我收到了“更新”确认消息..也许这已经过时了:(
      • 我最近读到 Google Cloud 正在更改他们的网络配置并摆脱某些旧选项。我相信它将于本月(2019 年 2 月)生效。让这个解决方案不起作用可能是这样的......
      • 啊,很高兴你发表了评论!我在评论后丢失了问题,无法删除我的评论。我实际上可以确认它在 2019 年 2 月开始工作,只是需要一些时间才能显示在实例页面中
      • “http-server”似乎反映了“default-allow-http”防火墙规则的“目标”。
      【解决方案3】:

      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
      

      第二个实际上为您创建了防火墙规则(default-allow-http),并将请求的目标设置为 http-server 标签(--target-tags=http -server) 在 tcp 端口 80 (--rules=tcp:80) 上来自所有来源 (--direction=INGRESS) 的传入请求>--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
      

      我希望这对其他人有帮助。

      注意:我确实将 gcloud compute instance create 的输出减少到相关位以减少混乱。

      【讨论】:

      • 感谢您提供更多详细信息以及提示!
      猜你喜欢
      • 2019-06-26
      • 2022-01-05
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2013-12-25
      相关资源
      最近更新 更多