248

我有 2 个 Google Compute Engine 实例,我想在这两个实例中打开端口 9090。我认为我们需要添加一些防火墙规则。

你能告诉我我该怎么做吗?

4

9 回答 9

418

你需要:

  1. 转到 cloud.google.com

  2. 转到我的控制台

  3. 选择您的项目

  4. 选择网络 > VPC 网络

  5. 选择“防火墙”

  6. 选择“创建防火墙规则”

  7. 要将规则应用于选择 VM 实例,请选择 Targets > “Specified target tags”,然后在“Target tags”中输入标签名称。此标签将用于将新的防火墙规则应用于您想要的任何实例。然后,确保实例应用了网络标签。

  8. 设置源 IP 范围以允许来自所有 IP 的流量:0.0.0.0/0

  9. 要允许传入 TCP 连接到端口 9090,在“协议和端口”中,选中“tcp”并输入9090

  10. 单击创建(或单击“等效命令行”以显示gcloud创建相同规则的命令)

我希望这可以帮助你。

更新请参阅文档以自定义您的规则。

于 2014-01-11T21:56:35.073 回答
100

这是回答这个问题的命令行方法:

gcloud compute firewall-rules create <rule-name> --allow tcp:9090 --source-tags=<list-of-your-instances-names> --source-ranges=0.0.0.0/0 --description="<your-description-here>"

这将为您命名的实例打开端口9090。省略--source-tags并将--source-ranges规则应用于所有实例。更多详细信息在Gcloud 文档命令手册firewall-rule create

以前的答案很好,但谷歌建议使用较新的gcloud命令而不是gcutil命令。

PS:要了解 Google 的防火墙规则,请运行gcloud compute firewall-rules list并查看所有防火墙规则

于 2014-12-28T10:31:55.683 回答
12

创建防火墙规则

如果您不熟悉 GCP 中的防火墙规则,请查看防火墙规则组件 [1]。防火墙规则是在网络级别定义的,并且仅适用于创建它们的网络;但是,您为每个项目选择的名称对于项目必须是唯一的。

对于云控制台:

  1. 转到 Google Cloud Platform Console 中的防火墙规则页面。
  2. 单击创建防火墙规则。
  3. 输入防火墙规则的名称。此名称对于项目必须是唯一的。
  4. 指定将实施防火墙规则的网络。
  5. 指定规则的优先级。数字越小,优先级越高。
  6. 对于流量方向,选择入口或出口。
  7. 对于匹配时的操作,选择允许或拒绝。
  8. 指定规则的目标。

    • 如果您希望规则应用于网络中的所有实例,请选择网络中的所有实例。
    • 如果您希望将规则应用于按网络(目标)标签选择的实例,请选择指定的目标标签,然后在目标标签字段中键入应应用规则的标签。
    • 如果您希望规则适用于通过关联服务帐户选择实例,请选择指定服务帐户,指明服务帐户是在当前项目中还是在服务帐户范围下的另一个项目中,然后在目标服务中选择或键入服务帐户名称帐户字段。
  9. 对于入口规则,指定源过滤器:

    • 选择 IP 范围并在源 IP 范围字段中键入 CIDR 块,以按 IP 地址范围定义传入流量的来源。使用 0.0.0.0/0 作为来自任何网络的源。
    • 选择子网,然后从子网弹出按钮中标记您需要的子网,以按子网名称定义传入流量的来源。
    • 要按网络标签限制来源,请选择来源标签,然后在来源标签字段中输入网络标签。有关源标签数量的限制,请参阅 VPC 配额和限制。仅当服务帐户未指定目标时,才可以按源标记过滤。有关详细信息,请参阅按服务帐户与网络标签过滤。
    • 要按服务帐户限制源,请选择服务帐户,在服务帐户范围下指明服务帐户是在当前项目中还是在另一个项目中,然后在源服务帐户字段中选择或键入服务帐户名称。仅当网络标记未指定目标时,才可以按源服务帐户过滤。有关详细信息,请参阅按服务帐户与网络标签过滤。
    • 如果需要,指定第二个源过滤器。次要源过滤器不能使用与主要过滤器相同的过滤条件。
  10. 对于出口规则,指定目标过滤器:

    • 选择 IP 范围并在目标 IP 范围字段中键入 CIDR 块,以按 IP 地址范围定义传出流量的目标。使用 0.0.0.0/0 表示无处不在。
    • 选择子网,然后从子网弹出按钮中标记您需要的子网,以按子网名称定义传出流量的目的地。
  11. 定义规则将应用到的协议和端口:

    • 根据操作选择“全部允许”或“全部拒绝”以将规则应用于所有协议和端口。

    • 定义特定的协议和端口:

      • 选择 tcp 以包括 TCP 协议和端口。输入全部或以逗号分隔的端口列表,例如 20-22、80、8080。
      • 选择 udp 以包括 UDP 协议和端口。输入全部或以逗号分隔的端口列表,例如 67-69、123。
      • 选择其他协议以包括 icmp 或 sctp 等协议。
  12. (可选)您可以创建防火墙规则,但不能通过将其强制状态设置为禁用来强制它。单击禁用规则,然后选择禁用。

  13. (可选)您可以启用防火墙规则日志记录:

    • 单击日志 > 开启。
    • 单击打开。
  14. 单击创建。

链接:[1] https://cloud.google.com/vpc/docs/firewalls#firewall_rule_components

于 2019-05-01T09:08:53.680 回答
10

您需要添加防火墙规则以打开tcp:9090对您的实例的入站访问。如果您有两个以上的实例,并且只想向这两个实例打开 9090,则需要确保这两个实例共享一个标签。您可以通过控制台或命令行添加或更新标签;如果需要,我建议使用 GUI,因为它使用setinstancetags.

如果要向所有实例开放端口 9090,可以创建防火墙规则,例如:

gcutil addfirewall allow-9090 --allowed=tcp:9090

这将适用于您的所有实例。

如果您只想为为您的应用程序提供服务的两个实例打开端口 9090,请确保它们具有类似 的标记my-app,然后像这样添加防火墙:

gcutil addfirewall my-app-9090 --allowed=tcp:9090 --target_tags=my-app

您可以在此处阅读有关在 GCE 中创建和管理防火墙的更多信息。

于 2014-01-12T18:54:59.430 回答
10

这个问题很老,Carlos Rojas的回答很好,但我认为我应该发布一些在尝试打开端口时应该牢记的事情。

首先要记住的是Networking部分重命名为VPC Networking。因此,如果您想找出防火墙规则选项可用的位置,请查看VPC 网络

第二件事是,如果您尝试在 Linux VM 上打开端口,请确保在任何情况下都不应尝试使用ufw命令打开端口。我尝试使用它并失去了对 VM 的 ssh 访问权限。所以不要重复我的错误。

第三件事是,如果您尝试在 Windows 虚拟机上打开端口,则需要在虚拟机内创建防火墙规则,同时也在Windows 防火墙中创建VPC Networking -> Firewall Rules。与 Linux VM 不同,需要在两个防火墙规则中打开端口。因此,如果您无法从 VM 外部访问该端口,请检查您是否已在 GCP 控制台和 Windows 防火墙中打开了该端口。

最后(显而易见)的事情是,不要不必要地打开端口。不再需要时关闭端口。

我希望这个答案是有用的。

于 2018-05-14T05:19:47.267 回答
7

我遇到了和你一样的问题,我可以按照@CarlosRojas 的说明来解决它,但有一点不同。我没有创建新的防火墙规则,而是编辑了default-allow-internal它以接受来自任何地方的流量,因为创建新规则没有任何区别。

于 2014-08-25T14:49:37.187 回答
0

我必须通过降低优先级(使其更高)来解决这个问题。这引起了立即的反应。不是我所期待的,但它奏效了。

于 2019-07-18T23:51:10.980 回答
0

运行此命令打开端口

gcloud compute --project=<project_name> firewall-rules create firewall-rules --direction=INGRESS --priority=1000 --network=default --action=ALLOW --rules=tcp:<port number> --source-ranges=0.0.0.0/0 
于 2021-12-07T07:23:14.883 回答
0

console.cloud.google.com >> 选择项目 >> 网络 > VPC 网络 >> 防火墙 >> 创建防火墙。

要将规则应用于 VM 实例,请选择目标、“指定目标标签”,然后在“目标标签”中输入标签名称。此标签将用于将新的防火墙规则应用于您想要的任何实例。

在“协议和端口”中输入 tcp:9090

单击保存。

于 2020-07-09T11:55:11.833 回答