如何在Google Compute Engine中打开特定端口,例如9090

时间:2014-01-11 18:06:08

标签: google-cloud-platform port google-compute-engine

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

你能告诉我我该怎么做?

8 个答案:

答案 0 :(得分:286)

你需要:

  1. 转到cloud.google.com

  2. 转到我的控制台

  3. 选择您的项目

  4. 选择网络> VPC网络

  5. 选择“防火墙规则”

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

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

  8. 要允许传入TCP连接到端口9090,请在“协议和端口”中输入tcp:9090

  9. 点击创建

  10. 我希望这会对你有所帮助。

    更新请参阅docs以自定义规则。

答案 1 :(得分:67)

以下是回答此问题的命令行方法:

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 documentationthe firewall-rule create command manual

以前的答案很棒,but Google recommends使用较新的gcloud命令而不是gcutil命令。

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

答案 2 :(得分:9)

您需要添加防火墙规则才能打开对您的实例的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

您可以阅读有关creating and managing firewalls in GCE here的更多信息。

答案 3 :(得分:7)

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

答案 4 :(得分:6)

这个问题已经很久了,Carlos Rojas的答案很好,但我想我应该发布一些在尝试打开端口时应该记住的事情。

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

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

第三件事是,如果您尝试在Windows VM上打开端口,您还需要在Windows Firewall中与VM一起创建防火墙规则以及 VPC网络 - &GT;防火墙规则。与Linux VM不同,端口需要在两个防火墙规则中打开。因此,如果您无法从VM外部访问该端口,请检查您是否已在GCP控制台和Windows防火墙中打开该端口。

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

我希望这个答案很有用。

答案 5 :(得分:3)

创建防火墙规则

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

对于Cloud Console:

  1. 转到Google Cloud Platform控制台中的“防火墙规则”页面。
  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. (可选),您可以通过将防火墙实施规则的执行状态设置为Disabled来创建防火墙规则,但不能实施该规则。单击“禁用规则”,然后选择“禁用”。

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

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

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

答案 6 :(得分:0)

我不得不通过降低优先级(使其更高)来解决此问题。这引起了立即反应。并不是我所期望的,但是它起作用了。

答案 7 :(得分:0)

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

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

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

点击保存。